Packaging & Distribution¶
How Nemo is built, packaged, and distributed. See README.md for the
end-user installation instructions.
Release artifacts¶
The Release workflow (.github/workflows/release.yml) runs on v* tags (and
manual workflow_dispatch). It first gates on the full CI workflow, then builds
a matrix of targets and uploads to a GitHub Release:
| Target | Archive | Also |
|---|---|---|
aarch64-apple-darwin |
nemo-aarch64-apple-darwin.tar.gz |
Nemo-*.zip + Nemo-*.dmg (.app) |
x86_64-apple-darwin |
nemo-x86_64-apple-darwin.tar.gz |
Nemo-*.zip + Nemo-*.dmg (.app) |
x86_64-unknown-linux-gnu |
nemo-x86_64-unknown-linux-gnu.tar.gz |
.deb + .rpm |
aarch64-unknown-linux-gnu |
nemo-aarch64-unknown-linux-gnu.tar.gz |
.deb + .rpm |
x86_64-pc-windows-msvc |
nemo-x86_64-pc-windows-msvc.zip |
— |
A checksums.txt (SHA-256 of every archive, .deb, .rpm, and .dmg) is
uploaded alongside.
The tarball layout is:
Distribution channels¶
Install script¶
scripts/install.sh detects OS/arch, downloads the matching tar.gz, verifies
it against checksums.txt, and installs the binary. It is served from main, so
it always reflects the latest release. No crates.io publish is involved.
Homebrew tap¶
The nemo binary cannot be published to crates.io (it depends on a git build of
GPUI), so distribution is via a binary tap (geoffjay/homebrew-tap) rather than
brew install --HEAD:
Automated on release. The homebrew job in release.yml renders the formula
from the release's checksums.txt and pushes it to Formula/nemo.rb in the tap.
It is gated on a HOMEBREW_TAP_TOKEN repository secret (a PAT with
contents:write on geoffjay/homebrew-tap); if the secret is absent the job
logs a notice and skips, so releases still succeed.
Manual regeneration (e.g. to seed or fix the formula):
# Renders to stdout from packaging/homebrew/nemo.rb.tpl using the
# checksums.txt attached to the v<version> release.
scripts/gen-homebrew-formula.sh v0.6.0 > Formula/nemo.rb
packaging/homebrew/nemo.rb.tpl is the source of truth; the generator only
fills in the version and the four tar.gz checksums. It never writes back over
the template, so it is safe to run repeatedly.
Debian / RPM packages¶
cargo-deb metadata ([package.metadata.deb]) builds the .deb: binary at
/usr/bin/nemo, examples under /usr/share/nemo/examples, and the GPUI runtime
libraries as Depends: so apt resolves them. cargo-generate-rpm metadata
([package.metadata.generate-rpm]) builds the .rpm, auto-detecting runtime
library requirements from the binary's ELF. Both are built per Linux target in
the release matrix.
cargo-binstall¶
[package.metadata.binstall] in crates/nemo/Cargo.toml maps the crate to the
release archives. Because nemo is not on crates.io, use the git form:
Known gaps / future work¶
- macOS signing & notarization. Artifacts are unsigned; users must clear the
quarantine flag (
xattr -dr com.apple.quarantine ...). Notarization needs an Apple Developer certificate in secrets and acodesign+notarytoolstep. - Linux AppImage.
.deband.rpmcover the two major package managers; an AppImage would additionally serve distros without either. Bundling GPUI's Vulkan/font libraries is the fiddly part and needs a clean-distro test. - Windows
.msi. Ships as a portable.ziponly. Acargo-wixinstaller and Authenticode signing (needs a cert) remain.