superstack is the command line interface to Superstack: sign in, claim
devices, push Lua code, and stream events and 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 need no Go install: 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:
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, block force pushes, restrict deletions. Add a second targetingv*tags: block force pushes, restrict deletions.
-
Bump
versioninmain.go, then open and merge a pull request:git checkout -b version-0.1.0 git commit -am "Version 0.1.0" git push -u origin version-0.1.0 -
Merging creates a new commit, and the tag has to point at that one:
git checkout main && git pull grep '^const version' main.go git tag v0.1.0 git push origin v0.1.0
-
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.