Skip to content
ZeroZero

Desktop app

The Zero desktop app, zero-desktop, shows the same UI as zero browser in one window of its own: the operating system's web view, with native menus and dialogs, through the mygo toolkit. It talks to one long-lived Zero daemon per user over a private socket, so the window and zero . share the same server.

It shows projects on this computer. The app is a preview: macOS builds are not notarized and there is no auto-update. It has not been run on a Mac yet.

Install

macOS and Linux, no sudo. The install script installs the app and the zero CLI:

curl -fsSL https://raw.githubusercontent.com/flexdinesh/zero/main/scripts/install.sh | sh

For latest main (the edge prerelease; no macOS Intel builds):

curl -fsSL https://raw.githubusercontent.com/flexdinesh/zero/main/scripts/install-edge.sh | sh

If zero is taken, confirm available zero-cli in the terminal or pass --name NAME; see command name collisions. Only the exposed CLI name changes. The app and launcher stay zero-desktop, with canonical zero:// links, configuration paths, and bundled zero binary.

Linux needs WebKitGTK 4.1 and GTK 3; the install script warns when it can't find them. On Debian and Ubuntu:

sudo apt install libwebkit2gtk-4.1-0

The app carries its own zero binary for the daemon. The scripts put the chosen CLI command and zero-desktop in ~/.local/bin (or ~/bin). The CLI opens the app with zero . and publishes walkthroughs; substitute your chosen command for zero in the examples below.

  • macOS: zero-desktop.app goes to /Applications (or ~/Applications). Builds are ad-hoc signed, not notarized. curl marks nothing as downloaded, so Gatekeeper does not block the first launch. A browser-downloaded zip needs one right-click, Open, or:

    xattr -dr com.apple.quarantine /Applications/zero-desktop.app
  • Linux: the app goes to ~/.local/share/zero-desktop/app/, with a desktop entry that opens zero:// links and an icon.

Run a script again to update; quit the app first. Packages are on GitHub Releases: zero-desktop_<version>_linux_<arch>.tar.gz and zero-desktop_<version>_darwin_<arch>.zip. Unpacking one by hand registers no zero:// handler on Linux, so zero . serves in a browser instead.

Open from a terminal

zero-desktop .

opens the current directory. Only one copy runs: a second command or link opens in the running app. With the CLI installed:

zero .

Zero checks the directory, starts the daemon if needed, adds the directory to it, opens the project in the app, and exits. --no-open prints the zero:// link instead.

Zero serves in a browser instead, as zero browser does, when:

  • --host or --port is set;
  • the app is not installed or does not open (prints install instructions);
  • the daemon cannot start or speaks another protocol (prints why).

zero browser [path] always serves in a browser. On a machine without a UI (an SSH session, or Linux without a display), zero [path] tells you to use --remote (Remote hosts).

Tabs

Cmd+W on macOS or Ctrl+W on Linux closes the active tab. Closing the final tab leaves the window open with no tabs; pressing the shortcut again closes the window.

zero://local/?project=/abs/path opens a project, and zero://local/view?… takes the same query as a browser URL (path, wt, review, …). Links never add directories; only zero [path], zero-desktop [path], and File › Open Folder… do. zero walkthrough publish prints a zero:// link when the app can show the walkthrough.

zero://r-<id>/… opens a server you connected to with zero connect (Remote hosts), with the same routes. Links carry no address and no secret; the app looks up a connection saved on this computer.

Window theme

On macOS the window takes your Zero theme: the title bar is drawn in the theme's chrome, and menus and the window controls follow its light or dark polarity (Auto follows macOS). A new window opens in the theme it had last. On Linux the window keeps your desktop's title bar and menus.

File context menus

Right-click a file or folder in the Explorer, or a tab, for the app's native menu. Reveal in File Manager shows the file in Finder or your Linux file manager; the Explorer menu also copies a file's full or relative path, and a file's menu has Show File History (Browsing). Zero reveals only files inside a project it serves, and never follows a link out of the project.

Notifications

The app tells you what changed in projects you are not looking at. Choose what in Settings, under Notifications:

SettingDefaultNotifies you when
New CommitsOna project's branch gets a new commit
Branch SwitchesOna project checks out another branch
File EditsOffedits stop for 10 seconds in the project a window shows
WalkthroughsOna walkthrough is published or updated
Feedback RepliesOnan agent replies to review feedback or starts a thread

Commits, branch switches, walkthroughs, and feedback replies cover every project opened since the window opened, up to 16. Nothing fires for the project in a focused window, and closing a window ends its notifications. Editing a file that already has uncommitted changes does not notify again. Click a notification to open what it is about.

Settings warns you if this computer has no notification service or macOS is blocking Zero. Each notification is limited to one per project and kind every 30 seconds.

Not in the desktop app

These went with the earlier Electron app and are not coming back as they were:

  • ssh connections and the Connect page. zero connect opens other machines (Remote hosts).
  • Open at Login, recent folders, the Dock menu, and dropping folders on the window or the Dock.
  • Open in zero in file managers, and deb and AppImage packages.

WebKit

The page runs on WebKit: Safari's engine on macOS and WebKitGTK on Linux. A distribution's WebKitGTK can lag behind what the UI is tested on. Explorer, tabs, documents, diagrams, images, and live updates are tested in this app. Search, Source Control, code navigation, and walkthroughs are the same UI, tested on WebKit in a browser but not yet in this app. Known differences from a browser:

  • Text shifts slightly when a document gains a scrollbar.
  • A review link to a line deep in a very large diff may not reach it.

Uninstall

The uninstall script remembers your CLI name and removes only installer-owned paths whose fingerprints still match. Modified or unrelated paths are retained and reported. Quit the app first; if a daemon is running, the script stops and prints the command to end it. It keeps user data and leaves existing srcz installs and data untouched:

curl -fsSL https://raw.githubusercontent.com/flexdinesh/zero/main/scripts/uninstall.sh | sh

Page state lives in ~/.local/share/zero-desktop/ beside the app on Linux, and in ~/Library/WebKit/io.github.flexdinesh.zero.desktop on macOS. The daemon's remembered directories are in zero/roots.json under ~/.config or ~/Library/Application Support.