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 | shFor latest main (the edge prerelease; no macOS Intel builds):
curl -fsSL https://raw.githubusercontent.com/flexdinesh/zero/main/scripts/install-edge.sh | shIf 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-0The 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.appgoes 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 openszero://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:
--hostor--portis 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.
Links
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:
| Setting | Default | Notifies you when |
|---|---|---|
| New Commits | On | a project's branch gets a new commit |
| Branch Switches | On | a project checks out another branch |
| File Edits | Off | edits stop for 10 seconds in the project a window shows |
| Walkthroughs | On | a walkthrough is published or updated |
| Feedback Replies | On | an 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 connectopens 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 | shPage 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.