Which method should I use?
Most users should use Homebrew. It installs all runtime dependencies
automatically and keeps
gc on your PATH. Choose direct download when you
cannot use Homebrew (CI images, Docker layers, machines without package
managers). Choose source when you need unreleased changes or plan to contribute.
Prerequisites
Gas City requires a small set of runtime tools. Homebrew installs all of them for you; the other methods require manual installation.
Use a final Dolt 2.1.0 or newer. Gas City’s managed Dolt checks reject older
and pre-release builds because they are below the managed bd/Dolt compatibility
floor; releases before 1.86.2 can also miss the upstream GC/writer deadlock
fix in dolthub/dolt commit
ccf7bde206, which can hang dolt_backup sync
under heavy write load.
The exact versions CI pins are in deps.env.
The tested bd is v1.3.1: brew install beads (or brew upgrade beads)
installs it, or download bd for your platform from the
v1.3.1 release assets.
With bd v1.3.0 Gas City falls back from its native store to the bd CLI, and
proxied bd backup and closed-wisp purge are skipped.
Gas City 1.4.2 pairs the native store with Beads 1.3.0, and main pairs it with
Beads 1.3.1, which keeps the same schema. When upgrading
an existing shared database from Beads 1.2.2, coordinate the upgrade of all
clients using that database, then run bd migrate schema from the workspace
(for a city, see Migrate the Beads schema).
The tested upgrade moves schema 53 to 66 and preserves existing beads. Older
clients cannot use the migrated schema. Fresh workspaces initialize directly
at the new schema.
To install the exact release archive pinned by CI:
Homebrew (recommended)
gastownhall/gascity formula, downloads the matching gc
release asset, and installs all six runtime dependencies (tmux, jq, git, dolt,
flock, beads).
Once Gas City is accepted into homebrew-core, the normal install path will be
brew install gascity; the gastownhall/gascity tap remains available for
emergency updates.
Verify the installation:
Upgrading via Homebrew
gascity formula depends on beads, so this upgrades bd too.
After upgrading, run gc start for each city. When the supervisor is still
running the old binary, gc start restarts it on the new one, and it
regenerates the supervisor’s service file on each invocation, so a
brew upgrade followed by gc start always picks up template changes.
An upgrade that changes the Beads version can also need a backup and a
one-time database migration. Before upgrading a city you rely on, follow
Upgrading an existing city.
Uninstalling via Homebrew
Direct download
Release tarballs are published for every tagged version. Supported platforms:Download and install
Verify release artifacts
Homebrew verifies release checksums from the formula automatically. For direct downloads, verify the archive before installing it:gastownhall/gascity repository:
Upgrading a direct-download install
Repeat the download steps above with the new version number. Thegc binary is
a single static file — overwriting it is safe. Install the matching bd as
well, and see Upgrading an existing city for the
backup and Beads migration steps.
Build from source
Requiresmake and Go 1.26+ (pinned in go.mod as 1.26.4).
make build signs the binary with a stable local codesigning
identity when one is available, which helps macOS remember local permission
grants across rebuilds. Without a stable identity, the build leaves Go’s
linker-produced signature unchanged. Set GC_SIGN_IDENTITY=<certificate name>
to choose a specific certificate, GC_SIGN_IDENTIFIER=<identifier> to use a
separate local TCC identity, or GC_ADHOC_SIGN=1 to opt into ad-hoc signing
for a local experiment. Successful local signing also removes stale
com.apple.provenance metadata when present.
Contributor setup
make install and make build produce the binary you run. To change Gas
City itself, you test with Bazel: CI checks every
pull request with bazel test, and the make targets below run the same
commands. Install Bazelisk, which
reads the Bazel version the repo pins, then set up the dev toolchain and git
hooks:
fork-cache line points Bazel at the project’s anonymous, read-only
cache, so anything CI already built or tested is reused instead of rerun on
your machine. Nothing you build is uploaded.
Plain
go test ./... still works for a quick check of one package, but it
is not what CI runs and skips the lint, formatting, and generated-file
checks. See
CONTRIBUTING.md
for the full contributor workflow and the
Bazel quickstart
for remote execution and troubleshooting.
Verify your installation
Regardless of install method, confirm everything is working:git commit instead of Gas City, your shell has a gc alias.
Use command gc version for this check and see
Troubleshooting
for the permanent fix.
Then create your first city:
gc init registers the city with the supervisor, which then starts it. By the
time the command returns, the city is running.
See the Quickstart for a complete walkthrough.
Gas City ships a JSONL archive that snapshots every bead database for
disaster recovery. By default it runs in local-only mode and keeps commits
on this host. To enable off-box backup, see
JSONL archive push failures.