your code editor is mostly decoration.

zero is what’s left.

A 20MB macOS code editor built around running coding agents: a terminal that takes the whole width, projects as tabs, git worktrees down the side, a record button that turns four minutes of rambling into a prompt you can hand any AI, and an editor for when you actually need to read one of your files. That’s it — on purpose. It opens in 0.38s and has never once asked about your onboarding journey.

brew install --cask zero-editor/tap/zero

or download the dmg

Open source, MIT — all 42,956 lines of it on GitHub.

Apple Silicon · macOS 26 or later · no telemetry, no account

42×
smaller on disk
20MB
845MB
21×
sooner to a window
0.38s
8.16s
2.9×
lighter with four projects open
594MB
1,709MB

The bright bar is zero; the long one is Cursor — method and scripts →

The whole interface: project tabs on a bare top bar, and below them every pane is a card floating on the window — sidebar, editor with its own file tabs, each terminal — parted by gaps instead of seams. The ring on a project is its session: sweeping while something’s working, a closed circle when it’s done and waiting on you. From macOS 26 the window is liquid glass by default — one translucent tone per card, your desktop showing through the gaps; a solid mode sits in preferences for anyone who’d rather not.

you always know what’s running.

Every project is a tab, and the ring on it is that project’s pulse — sweeping while something is running, a closed circle once it’s waiting on you. One look across the top and you know where everything stands.

Read from each shell’s process tree and how long the pty has been silent, once a second. Nothing to configure.

press record, ramble, press stop.

Talk at your project instead of typing at it. Your Mac writes down what you said, claude tidies it into the prompt you meant — ready to hand to any AI, or keep as the note — and recording again folds the new thoughts in. Four minutes of rambling, one document you’d actually show someone.

Transcription is the system’s own (macOS 26 and later), on this Mac; one claude -p pass makes the concise version, so Claude Code’s CLI is the one thing it needs. Audio, transcripts and document all land in .zero/memos/.

it’s barely even there.

20MB on disk. A window in 0.38s. 594MB with four projects open, and a third less CPU than Cursor to draw the same four agents talking. Your RAM goes to the work, not to the app it runs in.

Numbers below, method in BENCHMARKS.md, scripts in bench/ to run on your own machine.

benchmarks

Same machine, same project, both editors, three launches each, median reported. M3 Max · 36GB · macOS 26.5.1 · zero 0.25.0 · Cursor 3.17.19 (cold launch: the original 0.1.0-vs-3.15.6 run — it needs a fresh boot). Disk and JavaScript re-measured on zero 0.58.4. In every graph: zero is the bright mark; the long grey one is Cursor.

on disk

42×
20MB
845MB

And 7 files in the bundle, against 17,021 — 2,432× fewer.

shipped JavaScript

170×
1.6MB
265MB, in 11,995 files

Drawn to scale, by area. The bright square is the entire frontend.

launch

21×
window up · cold 0.38s 8.16s
usable · warm 2.23s 9.52s
0s4s8s12s

Two different finish lines, not two clocks on one race: first a window on screen, then the app actually ready. Warm, zero’s window is up in 0.53s to Cursor’s 1.08s — starting cold adds nothing to zero and seven seconds to Cursor.

memory, as projects open

up to 2.9×
0 1GB 2GB 1,851 ≈2.5GB at six zero: +60MB per project 1 2 3 4 5 6

MB of phys_footprint, one through four projects measured, the dashed parts extended on each editor’s own slope — Cursor opens a window per project, ~330MB and three processes each. zero opens a tab: ~60MB, no new processes, and five steady-state samples within 17MB of each other.

ships with

∞
0
bundled extensions Cursor: 116
∞ fewer
0
bundled runtime — system WebKit Cursor: 257MB of Electron
∞ less

The whole bundle is seven files. There is nothing to update, nothing to sync, and nothing to disable.

rendering agents’ output

1.5×
+35.8%
+54.9%

Of one core: the editor’s own cost of drawing four terminals streaming 25 lines/s each. And zero starts from an idle floor a third of Cursor’s — 3.42% against 11.35% with four projects open.

terminal frame rate

2.1×
125fps
59fps, stock WebView

The one graph where longer is better. zero on a ProMotion display against WKWebView’s default 60fps clamp — Safari was the control, so the machine was never the limit.

what’s in it

projects are tabs

Each keeps its own terminals, sidebar and files. Switching is instant, because nothing re-renders. A project can be several folders, for code split across repositories.

the terminal is the point

Full width, splits in any direction, no chrome. Buttons appear when the pointer comes looking.

worktrees, not branches

Every worktree down the sidebar with its changes, staging and commit box.

bars for what you changed

Every uncommitted line gets a bar — in the gutter, beside the scrollbar, and up the file tree.

getting around

⌘P fuzzy-opens anything git admits to. ⌘⇧F searches in Rust, quicker than ripgrep. ⌘-click jumps to a definition.

the terminal is all links

⌘-click file.ts:42 and it opens on the line, even when the agent named it from three folders down. A folder opens in Finder, PR #732 on GitHub, ECL-260 in Linear. Hover says where first.

it opens how you left it

Projects, splits, tabs — and the shells in them. Restart or update zero and every terminal comes back mid-sentence, Claude sessions included. Quitting still takes them with it.

issues beside the code

Your Linear issues down the rail, sorted by urgency — each row also saying what the checkout knows: whether the branch exists, whether it is in a worktree, whether the pull request is open or merged. Press play on a group or a row and a terminal opens with claude on a prompt about exactly those.

press record, ramble, press stop

Talk at it and a written-up document comes back. Transcribed on the machine, tidied by the agent you already pay for. Say more later, or type a follow-up, and it merges in.

notes, drawn as you type

⌘⌥N opens a note that renders its markdown as you write — headings, checkboxes that tick, tables as tables — and takes the terminal out of anything pasted in. Its Run button hands the whole note to claude.

updates itself, never restarts itself

A new version downloads in the background. The restart waits for your click, and your terminals are still there after it.

switch off what you don’t use

Memos, notes, Linear and search are switches in settings. Off means off — the icon goes, and so does anything that was listening.

what’s not in it

An extension marketplace. A sign-in. A welcome tour. A chat panel you can’t close. Telemetry, analytics, or an account of any kind. zero talks to exactly two things, and only one by default: GitHub, to ask whether there is an update, and Linear, if you connect it.

Apple Silicon only. macOS 26 or later.

zero is purpose-built for exactly one platform. No Intel branch, no Electron, no compatibility ballast for a MacBook from 2017 — and it leans on macOS for everything macOS is already good at: the WebView, the transcriber, the fonts. Building for one machine instead of every machine is why the whole app is 20MB and why it opens in 0.38s.

install

brew install --cask zero-editor/tap/zero

Or download the dmg and drag zero to Applications. Apple Silicon, macOS 26 or later, git — nothing else.

The whole thing is open source on GitHub — 42,956 lines of MIT. Read it in an afternoon, or build it yourself in about a minute.