Skip to content

Releases: zero-editor/zero

v0.24.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 15:38

Apple Silicon. Signed and notarized — it opens without a warning.

sha256  dfcc4909ef9e6e5c139523afa39aca85cd9be9569bf357c94140ad40beb71882

What's Changed

First round of fixes from real-world feedback — thanks to the TRMNL crew for the field report.

  • ⌘K clears the terminal, the way Terminal.app means it: the display clears without asking the shell, so it works mid-program, not just at a prompt.
  • ⌘W closes the terminal you're focused in — the undo for one ⌘T too many. With the keyboard anywhere else it closes the active editor tab, as before.
  • Go to file (⌘P) matches substrings now. Space-separated words, each matched as a contiguous substring in order: app cont dev bas finds app/controllers/api/device/base_controller.rb. Single-word abbreviations like wspWorkspace.tsx still work.
  • A project opened for the first time lands on the file tree, not the git tab — a clean repo's git tab read as "this project is empty".
  • The empty editor screen lists the shortcuts you'd want first — go to file, new terminal, toggle terminal, find in files, file tree — under the zero mark.

Nothing changed in the terminal daemon, so running sessions survive this update as usual.

Still to come from the same feedback: a ⌘? shortcut overlay and a hidden-files toggle in the tree.

Full Changelog: v0.23.4...v0.24.0

v0.23.4

Choose a tag to compare

@github-actions github-actions released this 25 Aug 10:53

Apple Silicon. Signed and notarized — it opens without a warning.

sha256  cced332c808e925487918faa7cacc3006be3a1ed9fc7b58c6112d586ec1bfb60

What's Changed

  • Git panel: no more hole in a staged row's buttons. A staged file has no discard button, but the open-file button still sat in its usual spot — leaving an empty slot between it and unstage. On staged rows the open button now sits directly beside unstage.

That's the whole release — a one-line visual fix to the git panel. Sessions survive the update as usual.

Full Changelog: v0.23.3...v0.23.4

v0.23.3

Choose a tag to compare

@github-actions github-actions released this 25 Aug 09:37

What's Changed

Scrolling is smooth now. Since glass landed, every surface in zero has been translucent over the live-blurred window — and WKWebView responded by repainting the editor, the diff view and the changes panel on the CPU for every frame of every scroll. Long files visibly drew themselves in as they arrived. The scroll containers now live on their own compositor layers, so scrolling moves a texture instead of repainting the file. If zero ever felt janky to scroll, this release is the fix.

The diff's overview ruler stopped exaggerating. A modified chunk drew its red half the full height of the change, so one line rewritten into twenty read as twenty lines deleted. The red is now sized by what HEAD actually lost — one line of red beside twenty of green.

Less background churn. A git sweep that finds nothing new no longer re-renders the changes panel, the file tree and the tab tints; the editor's live refresh applies the smallest edit instead of replacing the whole document when an agent saves; and a bug is fixed where that refresh stopped working after the first external change to an open file.

No daemon changes — running terminal sessions carry across this update untouched.

Apple Silicon. Signed and notarized — it opens without a warning.

sha256  476c415647e69c4569028da1a208ca6c6c3bec15f3b346b91ddad0856c04e394

Full Changelog: v0.23.2...v0.23.3

v0.23.2

Choose a tag to compare

@github-actions github-actions released this 24 Aug 15:56

Your terminals restart once on this update, and after that a restart keeps
the scrollback.

0.23.1 added the history to what a reattaching pane is handed, and changed
nothing for anyone — including on a fresh install. The shells are held by a
separate long-lived process, and updating the app doesn't replace it: the new
app finds the old one still listening and reattaches to it, so the release
landed everywhere and took effect nowhere.

This update renames the socket that process listens on, which is the only way
to move the shells to a daemon that keeps history. So on the restart after
this one your panes come back as fresh shells — the layout is restored, but
whatever was running in them, Claude sessions included, ends. Pick your moment;
the restart is always your click.

Every restart after that comes back scrolled up to where you left it.

Still true: a pane showing a full-screen program at the moment of restart has
no history to hand back.

Apple Silicon. Signed and notarized — it opens without a warning.

sha256  c59e49c5004378e92fb113d4952ac83bd540bd7169703d6d3d1eba59edafcca3

Full Changelog: v0.23.1...v0.23.2

v0.23.1

Choose a tag to compare

@github-actions github-actions released this 24 Aug 15:40

Restarting zero keeps the scrollback, not just the screen.

Terminals already survived a restart — but a reattached pane came back as a
single screenful with an empty buffer above it. If Claude was open, the
conversation you had scrolled through was gone: nothing broken about scrolling,
and nothing to scroll to.

Now the daemon keeps 2000 rows of history behind each session and hands them
back when the app reattaches, so a restarted pane scrolls up into the same
output it had before.

Two things to know:

  • This release's own restart still comes back bare. The daemon holding your
    sessions right now never recorded any history. It starts recording once this
    version is running; the restart after that is the first one that keeps it.
  • A pane in a full-screen program at the moment of restart still has nothing
    above it.
    There is no scrollback to save while a full-screen TUI owns the
    screen.

Apple Silicon. Signed and notarized — it opens without a warning.

sha256  289bde4173a78d8eab5f7081d26320aaa2a5f75be87baf980102e48bd4a7f9a5

Full Changelog: v0.23.0...v0.23.1

v0.23.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 14:22

Apple Silicon. Signed and notarized — it opens without a warning.

sha256  a4b4383773dae8fb83324320898a4b50b7a4eeda21e348c06b35fd9e0a09e3f4

Your pane layout comes back the way you left it. Since document panes
arrived, quitting could quietly lose the arrangement you had — you would
relaunch into an older window and rebuild it by hand. The layout was being
kept in the browser's storage behind a short delay, with a page-unload event
as the promise it would be flushed on the way out. That event never fires:
zero exits the process without unloading the page, so the write never
happened, and the browser's own copy never reached disk either. Both failures
were silent.

The layout now lives in a file, written the moment anything moves. Nothing is
sitting in a queue waiting for a deadline that quitting won't let arrive.

Four smaller faults went with it, each of which could cost part of a layout on
its own:

  • A split with one bad stored size came back as an even split, resizing every
    pane beside it.
  • Dragging a divider against an already-tiny pane could store a size of zero,
    which the next launch distrusted — taking that split's other panes with it.
  • A pane whose tabs were all unsaved scratch buffers vanished on relaunch,
    taking its place in the layout. One pane per launch, with nothing said.
  • Retired fields were being rewritten forever after they had been read.
    Sessions here got about a fifth smaller.

Two things the terminal daemon made necessary. If the layout file can't be
read, zero no longer treats that as "no terminals are wanted" — it leaves your
shells alone rather than ending live Claude sessions over a transient error.
And a tauri dev build no longer shares a layout with the installed app: they
had separate storage before, and now they have separate files.

Still true: unsaved scratch buffers don't survive a relaunch — their
contents only ever exist in the editor. A pane holding nothing else now comes
back empty instead of disappearing.

Full Changelog: v0.22.1...v0.23.0

v0.22.1

Choose a tag to compare

@github-actions github-actions released this 24 Aug 08:59

zero finds out about a new version in half an hour instead of six.

A shorter wait, and no wait at all when you come back. An installed copy checked for a new release on launch and then every six hours, which is most of a working day for a version already built and sitting on GitHub. It checks every half hour now, and again whenever you come back to the zero window after five minutes away — which is the one you'll actually notice, since a release usually goes out while zero is behind a browser. You return to it and the restart button is already there.

Nothing else changes: the download is still silent and still finished before anything appears in the titlebar, and the restart is still yours to click.

The interval was never about cost. A check is one small request for a file GitHub already serves from its CDN; six hours bought nothing.

Still doesn't work. This only takes effect once you are on 0.22.1 — the copy you are updating from is the one doing the waiting. And scrollback above the visible screen is still not kept across a restart.


Apple Silicon. Signed and notarized — it opens without a warning.

sha256  1e06a7e8bf6900ec495ad4c584719578fbe73c2b9b21988ee8c0926ff25ead9d

Full Changelog: v0.22.0...v0.22.1

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 08:35

Return renames a file in the explorer, in the row it is already in.

Where macOS types a name. Select a file in the sidebar, press Return, and the row's name becomes a field — same indent, same icon, and the name selected up to the extension, so api.ts offers you api and leaves .ts alone. A folder's dot isn't an extension and neither is a leading one, so folders and .gitignore come up selected whole. Return commits, clicking away commits, ⎋ leaves the name as it was. The keyboard lands back on the row either way, so a second Return fixes a typo in the first.

Until now that key did nothing at all: a tree row is a button, so the browser turned Return into a click on it and the file just opened again. Renaming was a menu item and a dialog in the middle of the window.

The menu goes to the same place. Right-click → Rename… in the explorer now opens the field in the row rather than the overlay. Everything else that names a file keeps the overlay — a changes row, a tab, and every New File…, which has no row to type into yet because the file doesn't exist.

Folders too, and an open one keeps showing its contents while you type.

Still doesn't work. Nothing else in the sidebar answers the keyboard: no arrow keys between rows, no ⌫ to trash, no ⌘D. And scrollback above the visible screen is still not kept across a restart.


Apple Silicon. Signed and notarized — it opens without a warning.

sha256  bb5ba7f11d777853e394d04969f959ec62ad7eece852fd25d2e85577bb96d7fd

Full Changelog: v0.21.0...v0.22.0

v0.21.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 14:42

The update button asked twice and cost you your window. Now it asks once and hands the window back.

One click. The pill in the titlebar warned that restarting would close every Claude session in the window, then wanted a second click to agree to it. That stopped being true in 0.20.0, when the terminals moved into a daemon that outlives the app — so the warning is gone and one click restarts. It is drawn like the + and the gear beside it now, instead of like an alert.

The window comes back. zero built its window from scratch on every launch: 1440×900 in the middle of the main display, however you had left it. Maximized, fullscreen, moved to a second screen — all of it went, every time you updated. It is remembered now, with zoomed and fullscreen kept apart from each other: restoring a maximized window as a fullscreen one would put you on a Space you weren't on.

And it comes back in front. A restart spawns the new copy from the one that is exiting, which macOS doesn't hand the front of the window order to — so the app you had just asked to restart came back underneath every other window you had open. It asks for the front now.

Still doesn't work. Scrollback above the visible screen is still not kept across a restart: the screen a session was on comes back, what you had scrolled past doesn't.


Apple Silicon. Signed and notarized — it opens without a warning.

sha256  f655729f12bd8d2667c1252ab934ba0d4182b78aa740662577b45504729b8b1b

Full Changelog: v0.20.2...v0.21.0

v0.20.2

Choose a tag to compare

@github-actions github-actions released this 23 Aug 10:14

⌘-clicking a file path in a terminal worked — except on the paths you most wanted it on.

Path resolution remembered its answers forever, and that included "that isn't a file". Claude names a file before it exists: ⏺ Write(~/scripts/deploy.sh) is on screen while the write is still happening, and "run it yourself: /Users/…" often prints a beat before the file lands. Move the mouse across that line during the gap and the miss was cached for the life of the window, so that spelling of the path never lit up again. The same file named another way still worked, which made it read as a matching bug rather than a caching one.

Answers now expire: a miss after four seconds, a hit after a minute — so a file deleted since stops underlining too.

Still doesn't work. A path Claude truncates with , and a path Claude wraps across two lines of its own output. Neither is on screen in one piece, so there is nothing to resolve.


Apple Silicon. Signed and notarized — it opens without a warning.

sha256  735d8a80a13922fe0906a542bf5944336c11dbb1811881ec35692f0aeead809b

Full Changelog: v0.20.1...v0.20.2