Skip to content
MalinrRuwanPublic

About

Just a little note taking native app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Worktable's desk lamp logo

Worktable

A quiet home for everything worth keeping.

Native macOS notes, quick captures, and an assistant that can search your knowledge.

Native macOS app Built with Rust MIT license

Features · Get started · Shortcuts · Development · License


Good ideas rarely arrive in the right window. Worktable gives you somewhere to put them: a snippet from another app, a link to revisit, an image, or a thought you do not want to lose. Keep them in a local library, connect them into knowledge, and ask questions when you need the context back.

Capture → Collect → Connect

  1. Capture the moment. Type a note, add an image, or press Shift three times quickly to capture a selection from another app.
  2. Keep the context. Search your entries, browse by topic, and bring your GitHub stars into the same library.
  3. Find the connection. Build knowledge, then ask the assistant about what you have saved. Citation chips take you back to the original entries.

Features

What you can do
Quick capture Save selected text or images with triple-Shift, without switching away from the app you are using
A library for more than text Keep notes, links, and images together; open full entries and view images fullscreen
Search and organize Filter entries and sort by time, alphabetically, or by topic; use keyboard navigation and multi-selection
Connected knowledge Build local topics and relationships, with optional AI topic enrichment from your chosen provider
An assistant with context Read streaming answers, follow source citations, stop a running answer, and reopen or delete saved chats
GitHub stars Import repositories you have starred, including their descriptions and links
At home on macOS Stay in the menu bar, check for updates, use native menus and shortcuts, and switch between Ayu Light and Ayu Dark

Built with Rust, GPUI, and GPUI Component. The AI runtime lives in the native app through Rig; there is no JavaScript worker or separate sidecar to install.

Get started

Run from source

You will need:

  • macOS — the packaged app targets macOS 13 or later.
  • Rust installed through rustup — the repository pins its nightly toolchain in rust-toolchain.toml.
  • Xcode Command Line Tools — install them with xcode-select --install if they are not already available.
git clone https://github.com/MalinrRuwan/worktable.git
cd worktable
cargo run -p worktable-app

Rustup selects the pinned toolchain automatically. The first build takes longer while it compiles the native UI dependencies.

Drive the app from a shell or agent

worktable-cli starts the real app with an isolated data directory and drives the same controls a person uses through a local Unix socket:

cargo build -p worktable-app -p worktable-cli
./target/debug/worktable-cli start --seed '["Remember the milk"]'
./target/debug/worktable-cli state
./target/debug/worktable-cli screenshot
./target/debug/worktable-cli stop

The control socket exists only when WORKTABLE_CONTROL_SOCKET is set, uses owner-only permissions, and never listens on the network. Commands print JSON, so scripts and agents can inspect the app after every action. See docs/cli.md for the full command set, state shape, raw protocol, and screenshot permission notes.

Make it yours

  1. Take the welcome tour. Every step is skippable, and you can replay it from Settings → Appearance.
  2. Enable capture when you want it. The tour links to macOS Accessibility settings. Triple-Shift uses the foreground app's Copy action and clipboard, so that app must support copying the selected text or image.
  3. Add your first note. The note bar is always ready: type and press Return. Shift+Return adds a line; the field grows to four lines. Use its plus button to choose an image.
  4. Set up the assistant, optionally. Open Settings → Providers, configure a provider, and choose a model. Build knowledge before asking about your library.

Notes and the local knowledge-building pass work without an AI provider. Closing the window keeps Worktable in the menu bar by default; change Keep running in the menu bar in Settings → General if you prefer closing to quit. The menu-bar icon hides as soon as that toggle is turned off.

Worktable → Check for Updates… checks the latest stable GitHub release. An installed copy downloads the DMG, verifies its published SHA-256 and signature, replaces itself, and reopens. If macOS dropped the Accessibility grant during that replacement, Worktable asks once to turn it back on; a preserved grant does not prompt.

While Accessibility is off, the menu-bar glyph carries a red dot and the library menu prepends Accessibility is off…. That dialog explains the System Settings path, opens the pane, and checks the grant again without a relaunch.

Choose your AI provider

Provider Authentication
OpenCode, with Go and Zen services API key
OpenAI API key
ChatGPT subscription Device OAuth sign-in
Anthropic API key
DeepSeek API key

Available models come from authenticated provider discovery, not a bundled model list. ChatGPT subscription sign-in is separate from an OpenAI API key. Provider access, limits, and any charges depend on the service you choose.

Keyboard shortcuts

Shortcut Action
⇧ three times quickly Capture selected text or an image from another app
⌘F Return to Entries and focus search
⌘1 / ⌘2 Show Entries / Assistant
⌘, Open Settings
⌘T Switch between light and dark themes
↑ / ↓ Move the entry selection
Return Open the selected entry
Delete (⌫) Delete selected entries
⌘C / ⌘⇧C Copy selected entries / copy the selected entry's link
⌘⇧P Clear search
⌘Return Submit the note bar
Shift+Return Add a line to the note bar (up to four lines)
Escape (⎋) Dismiss the current overlay or image viewer
⌘Q Quit Worktable

Entry commands are scoped to the Entries page and yield to focused text fields. Return in the note bar adds a note; Return in search sends the query to the assistant instead of opening an entry.

Your data

Worktable stores its library locally. By default:

Location Contents
~/.worktable/worktable.db Entries, settings, provider credentials, saved chats, and model context
~/.worktable/media/ Imported images, hard-linked when possible and copied across devices
~/.worktable/images/ Images saved by global capture
~/.worktable/logs/worktable.log Diagnostic log, written only after you turn on Settings → General → Diagnostic logs
~/.worktable/codesign/ Self-signed code-signing identity, keychain, and password used by local release packaging

Diagnostic logging is off by default. When enabled, it appends startup and background errors (including database migration failures) to the log file; nothing technical is written to stderr in its place.

Local storage does not mean local AI inference. Assistant prompts, retrieved entry content, and content used for AI topic enrichment can be sent to your configured provider. GitHub imports contact GitHub, and loading remote images contacts their hosts.

Provider credentials are stored in Worktable's database, not the macOS Keychain. Treat the database and its backups as sensitive, and never commit credentials to the repository.

Under the hood

One native app, with a small Rust workspace:

Crate Responsibility
worktable-app macOS shell, main view, settings, capture, and service orchestration
worktable-cli Agent-friendly CLI that starts and drives the real app
worktable-control Typed local control protocol and Unix-socket client
worktable-ui Shared motion, activity indicators, streaming text, and interactive citations
worktable-ai Rig-backed assistant, providers, model discovery, and cancellation
worktable-db SQLite persistence for the native app
worktable-events Typed events shared across the app and runtime
worktable-helix Embedded knowledge graph, topic extraction, and search

Development

The everyday development loop is:

cargo run -p worktable-app

Workspace crates retain debug information, while dependencies are optimized so the debug UI stays responsive.

Checks

cargo test -p worktable-ui
cargo test -p worktable-app
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo fmt --all -- --check

UI interaction tests exercise the real view using stable debug selectors. Provider tests do not make live AI requests.

Real Metal visual snapshots

The macOS visual runner is a binary so it can render on the main thread:

cargo run -p worktable-app --bin worktable_visual_test --features visual-tests

To intentionally update its baselines:

UPDATE_BASELINE=1 cargo run -p worktable-app --bin worktable_visual_test --features visual-tests

Visual snapshots complement interaction tests; they do not replace them.

Development overrides

Variable Purpose
WORKTABLE_DB_PATH Use a different database file
WORKTABLE_MEDIA_DIR Use a different imported-image library
WORKTABLE_CONTROL_SOCKET Enable the local control socket at this path
WORKTABLE_APP_BIN App binary used by worktable-cli start
WORKTABLE_THEMES_DIR Watch a different directory for development theme overrides
WORKTABLE_LOG_DIR Write the gated diagnostic log to this directory
RUST_LOG Configure logging, for example worktable=debug

Package a macOS app

Set the version you want to package:

VERSION=1.5.1 sh scripts/package-macos.sh

The script builds the release binary, bundles themes and the app icon, signs the app, and creates:

dist/
├── Worktable.app
├── Worktable-1.5.1.dmg
└── Worktable-1.5.1.dmg.sha256

Packaging uses the host architecture and a dedicated self-signed identity by default; it does not notarize the app. Generated files in dist/ are ignored by Git.

The default identity is Worktable Self-Signed Code Signing. The first package run creates it in its own keychain at ~/.worktable/codesign/worktable-codesign.keychain-db and stores the certificate and keychain password beside it. The certificate is trusted only as a user-domain code-signing root, not in the login keychain. Creating the identity needs OpenSSL 3 with pkcs12 -legacy (brew install openssl@3); the script also finds Homebrew's keg-only install. The first run may ask macOS to confirm the user trust setting for that certificate. Signing uses the certificate leaf as the designated requirement (designated => identifier "com.worktable.app" and certificate leaf = H"…") rather than an ad-hoc cdhash, so replacing the app in /Applications keeps the same requirement. Losing or recreating that keychain creates a new certificate, changes the requirement, and may cost one Accessibility re-grant. Replacing an older ad-hoc build with this self-signed one also changes the requirement once; the app's red-dot lamp and Accessibility dialog walk through the re-grant. To use a Developer ID instead, set CODESIGN_IDENTITY to the identity name:

CODESIGN_IDENTITY="Developer ID Application: Name (TEAMID)" \
  VERSION=1.5.1 sh scripts/package-macos.sh

A Developer ID-signed and notarized build remains the reliable TCC path for keeping Accessibility across updates. The self-signed build is best effort: macOS may still require enabling Accessibility once after an update, and if capture stays blocked, remove Worktable from System Settings → Privacy & Security → Accessibility and add it again. Ad-hoc signing is no longer a supported release path; the packaging script rejects CODESIGN_IDENTITY=-. Worktable also records last_run_version and accessibility_granted, so an update can offer the recovery step once when a grant that used to work is gone.

Contributing

Bug reports and focused improvements are welcome. Read AGENTS.md for the project's architecture, UI, accessibility, and testing conventions before changing code. Include tests for behavior changes and run the checks above before submitting a pull request.

Acknowledgments

Worktable builds on GPUI from Zed, GPUI Component from Longbridge, and Rig. Its agent presentation includes components adapted from aiCSS, with motion inspired by transitions.dev and the Ayu theme family.

License

Worktable is licensed under the MIT License.

Copyright © 2026 Malin Dhamsara. Dependencies and adapted components retain their respective licenses.

About

Just a little note taking native app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages