superstack is the command line interface to Superstack: sign in, claim
devices, push Lua code, and stream logs from your fleet. It is a
single static binary talking to the Superstack server's JSON API. The server is
a separate project; this repo is the CLI only. It is laid out as follows:
├── .envrc # Loads the Nix dev shell via direnv
├── .github/dependabot.yml # Weekly action and module update PRs
├── .github/workflows # CI on pull requests, release on v* tags
├── .gitignore
├── .goreleaser.yaml # Build matrix and every publishing target
├── CLAUDE.md # Coding principles and architectural overview
├── flake.lock # Pins nixpkgs
├── flake.nix # The superstack package, and the dev shell
├── go.mod
├── internal
│ └── commands # One file per command, plus the shared server client
├── LICENSE
├── main.go # Entry point, version constant, and the command table
├── main_test.go
└── README.mdEach option needs a published release.
-
Homebrew:
brew install --cask siliconwitchery/tap/superstack
-
Scoop:
scoop bucket add siliconwitchery https://github.com/siliconwitchery/scoop-bucket scoop install superstack
-
Arch Linux:
yay -S superstack-bin
-
Nix. Not in nixpkgs yet.
nix profile install github:siliconwitchery/superstack-cli
-
Any platform. Download an archive from the releases page, unpack it, and move
superstackonto yourPATH.
-
Install Go 1.25 or newer.
-
Clone the repository:
git clone git@github.com:siliconwitchery/superstack-cli.git ~/projects/superstack-cli cd ~/projects/superstack-cli
-
Build and run:
CGO_ENABLED=0 go build -o superstack . ./superstack
Nix users: nix develop enters the dev shell, and with
direnv hooked into your shell, direnv allow run once
in the checkout loads it automatically from then on.
Do everything below once.
-
Create public repositories
siliconwitchery/homebrew-tapandsiliconwitchery/scoop-bucket, each with a README. -
Add a fine-grained token (Settings > Developer settings > Personal access tokens) as the Actions secret
TAP_GITHUB_TOKEN:- Resource owner:
siliconwitchery - Repository access:
homebrew-tapandscoop-bucket - Permissions: Contents, read and write
- Resource owner:
-
Register at aur.archlinux.org, then:
cd "$(mktemp -d)" ssh-keygen -t ed25519 -N "" -f aur_key cat aur_key.pub # paste into SSH Public Key in your AUR account settings cat aur_key # add as the Actions secret AUR_KEY rm aur_key aur_key.pub
-
Add one ruleset (Settings > Rules > Rulesets) targeting the default branch: require a pull request with 0 approvals, require the
buildstatus check, allowed merge method squash only, block force pushes, restrict deletions. Add a second targetingv*tags: block force pushes, restrict deletions. -
Enable Automatically delete head branches (Settings > General).
-
Create
devfresh frommain:git fetch origin git switch -C dev origin/main
-
Change
versioninmain.go, run the checks, commit, and push:CGO_ENABLED=0 go vet ./... CGO_ENABLED=0 go test ./... git diff --check git add main.go git commit -m "Version <version>" git push -u origin dev
-
Open the
devpull request, review it, and merge it with squash. -
Return to
main, remove the stale branch, and tag the commit that merging created:git switch main git pull --ff-only git branch -D dev tag="v$(sed -n 's/^const version = "\(.*\)"$/\1/p' main.go)" git tag "$tag" && git push origin "$tag"
-
Write the release notes into the empty release body on GitHub, following the shape in CLAUDE.md.
A tag carrying a prerelease suffix, v0.0.2-rc1, publishes a GitHub prerelease
and skips every package manager. Tags cannot be moved or deleted.