A self-hosted, desktop-style Git workspace client: a single Rust binary that serves a fast React web UI — commit graph, diffs, branches, remotes, and live sync — over your Git repositories on disk.
Linux and macOS (x86_64 and arm64):
curl -fsSL https://raw.githubusercontent.com/prongbang/zync/main/install.sh | shThis installs the zync binary (the web UI is embedded in it). Then run it and
open http://127.0.0.1:58271:
ZYNC_SECRET_KEY="$(openssl rand -base64 32)" zync serveA system git (and ssh for SSH remotes) must be installed. Override the
version or install location with ZYNC_VERSION and ZYNC_INSTALL_DIR.
Zync requires a login by default. Two ways to start it:
Quick local run, no login (single-user) — the simplest way to try Zync on your own machine:
ZYNC_SECRET_KEY="$(openssl rand -base64 32)" ZYNC_AUTH=disabled zync serveThen open http://127.0.0.1:58271 — it opens straight in, no sign-in. This mode has no authentication, so only use it on a trusted machine / localhost — don't expose it on a network without auth.
With a login (multi-user, or anything reachable beyond localhost) — set
ZYNC_ADMIN_USER (the login email) and ZYNC_ADMIN_PASSWORD on first start
to create the admin account:
ZYNC_SECRET_KEY="$(openssl rand -base64 32)" \
ZYNC_ADMIN_USER="you@example.com" \
ZYNC_ADMIN_PASSWORD="a-strong-password" \
zync serveThen open http://127.0.0.1:58271 and sign in with that email and password.
The admin is created once, in zync.db (path via ZYNC_DB) — later starts
ignore ZYNC_ADMIN_*, so don't delete the DB or change ZYNC_SECRET_KEY
afterwards. If you start without ZYNC_ADMIN_* (and without
ZYNC_AUTH=disabled), follow the one-time /setup?token=... link (valid
~24h) that the server logs on boot instead.
From another machine on your LAN — the server only binds to
127.0.0.1 by default. Set ZYNC_BIND=0.0.0.0:58271 to accept connections
from the network, then open http://<host-ip>:58271 from another device.
Only do this on a trusted LAN — with ZYNC_AUTH=disabled that also means
anyone on the network has full unauthenticated access. With a login over
plain HTTP, also set ZYNC_COOKIE_INSECURE=1 (the session cookie is
Secure by default); for real exposure, prefer a TLS reverse proxy, see
docs/DEPLOY.md.
ZYNC_SECRET_KEY="$(openssl rand -base64 32)" ZYNC_AUTH=disabled ZYNC_BIND=0.0.0.0:58271 zync servedocker compose up --buildThen open http://127.0.0.1:58271. Mount host Git projects under /workspaces
in docker-compose.yml and add the mounted path in the UI. Set the same
ZYNC_ADMIN_USER/ZYNC_ADMIN_PASSWORD (or ZYNC_AUTH=disabled) in
docker-compose.yml for first-run sign-in, as above.
Requires Rust and bun:
cd web && bun install && cd apps/web && bun run build # build the web UI
cargo build --release -p zync-server --features embed-ui # embed it into the binary
ZYNC_SECRET_KEY="$(openssl rand -base64 32)" ./target/release/zync serveProduction deployment, backups, and the HTTP API are documented in docs/DEPLOY.md, docs/BACKUP.md, and docs/API.md.