Next (rough priority)
- Own extension registry (GitHub repo with
index.json, PR to publish) for extensions Zed's catalog can't carry (languages, agents, code plugins) - Code plugins in TypeScript via JavaScriptCore, same package format
- Developer ID signing and notarization (the script is ready for it, D129)
Not implemented yet
Everything below is known to be missing; nothing here is in progress.
Beyond an editor (non-goals for now, product.md)
- No debugger (no breakpoints, no Debug Adapter Protocol)
- No refactoring tools of Orbit's own: refactorings are what the language server offers as code actions and rename
Language features (LSP)
- An inline peek editor for references (Peek References is a jump list, D111); no outline panel on purpose (D82)
- Inlay hints can't be clicked, double-clicked to insert or hovered for their tooltip
- Other companions (Stylelint, Biome's server, Prettier's lint); companions and project roots are picked per file when it opens (a dependency or lockfile added later needs Restart Language Servers)
- Diagnostics for the whole project (workspace diagnostics): Problems lists open files, the agent's changed files (D75), the files using them (D198) and what servers push on their own; nothing else is checked
- Imported servers (D65) aren't tested one by one (only Prisma's install
runs in
make test-language-installs); 93 of nvim-lspconfig's need code and are missing (Angular, Flow, Julia, PowerShell, Roslyn…); choosing another server for a language than the ranked one needs it installed and the first one not; RubyGems / NuGet / opam packages can't be installed (D57)
Formatting
- Format Selection (D140) formats the whole file and keeps only the selection's changes
- Formatter chains (D203) come only from settings; detection picks one tool, ESLint only when nothing else formats the file
- Presets for languages Orbit has no server for (ktfmt / ktlint,
google-java-format,
mix format,dart format, CSharpier, nixfmt, sqlfluff); they work only as custom commands in.orbit/settings.json - Global formatter installs for Node tools (only the repo's
node_modulescopy is used, on purpose); Pint and PHP CS Fixer don't use their cache - Rules can't be edited in Settings, only in the JSON file (simple options can, D183); the Formatting section refreshes when Settings opens, not when the files change
.orbit/settings.json(D108) has no font, indentation, terminal or per-agent model options; keys are checked by the JSON server's schema (D182), not by Orbit itself
Editor
- Combined injections (PHP's HTML as one document,
injection.combined): each piece is parsed on its own; embedded languages in read-only views (diffs, agent transcripts) aren't colored - Multiple carets (D202): a snippet accepted at several carets has no Tab walk; linked editing with several carets isn't linked
Git and terminal
- A three-pane merge editor (conflicts are resolved inline, D134)
Known limitations
What works differently than you'd expect today. Things built but not yet tried by hand are in manual-checks.md.
Agents and review
- Claude Code needs the standalone
claudeCLI logged in (claude→/login). - Merging an agent's edit into unsaved edits makes those edits count as agent changes in the inline review (its baseline is the disk before the turn).
- An agent's unreviewed changes in a file moved or renamed in the explorer lose their inline review. A review note follows its code only while the code is unchanged.
- Isolated sessions: a project on a non-APFS volume gets a full (slow) copy; Apply is all-or-nothing per file; undoing an applied change in the project counts it as not applied again. Restore points aren't available there.
- Listing an agent's conversations spawns that agent once per folder per launch. Agents installed while Orbit runs find Node.js / uv only on the PATH resolved at launch.
- Usage: Codex reports its subagents' context without saying so, so the ring can briefly show a subagent's; Claude's limits arrive only with its events (one window each), Codex's are as fresh as its last logged turn.
- The transcript's rows are lazy, so scrolling up a long chat can shift as rows come in. Turn summaries aren't restored with a reloaded conversation.
- No per-agent status of which MCP servers connected.
Language features
- sourcekit-lsp understands SwiftPM packages fully; Xcode projects get single-file results only (no build server).
- Squiggles move with edits until the server republishes. A server that fails stays off until Restart Language Servers or reopening the folder. Go to Symbol in Project only asks servers already running.
- Renaming a file in the explorer doesn't ask servers to update imports
(
workspace/willRenameFiles). - One server per file type. RubyGems / NuGet / opam packages can't be installed (Ruby is found on PATH only).
- Vue:
.tsfiles importing components don't see their props (their TypeScript server has no Vue plugin; a TypeScript 7 project can't load one).sqllscrashes on start, so.sqlgetssqlsfirst. - Grammars compile on first open and need Xcode's command line tools and network; a failed build isn't retried until restart.
- The Swift cross-file rename in
make test-languagesfails now and then (sourcekit-lsp's index not ready yet); it passes on a rerun.
Editor and workspace
- The split editor has two sides, side by side. Tabs can't be dragged out of the window; dragging in the explorer moves one item.
- Undoing a new file in the explorer drops its unsaved edits.
- Location history: moving a tab between sides records passing through the tab left behind; no mouse back / forward buttons. Open Quickly doesn't open preview tabs.
- Markdown preview: no side-by-side view; preview tabs aren't restored on launch; code colors follow a theme change only after the next edit.
- Replace in files: the panel's Undo puts back the last replace only and skips files edited since; ⌘Z doesn't reach it.
- Shortcuts: function keys and keys without ⌘⌃⌥ can't be recorded; a command has one user key (Move Line keeps ⌥↑ beside a reassigned menu key).
- No keyboard focus for sidebar panels other than the explorer; focused native lists outside it select in the system accent.
- Cloning shows only a spinner and has no sign-in prompt (a private repository needs git credentials already set up).
- Downloaded packages that run programs get no consent prompt yet; nothing downloadable brings one until Orbit has its own catalog.
Terminal, tasks and browser
- The terminal panel hides when the last shell exits.
- Problem matchers cover tsc, clang / Swift / Go, Rust and ESLint only (no Python tracebacks, Vite / esbuild boxes, Jest); a fixed error stays listed until the task reruns.
- The browser has no tabs of its own, no find in page and no device sizes.