Any repo that ships releases
No formula to write and no maintainer to wait for. Point ketch at
owner/repo and it infers the rest — the asset matching your
architecture, the binaries inside, what to call them.
ketch installs command-line tools and macOS apps directly from GitHub
releases. No taps, no formulae, no build step — it downloads what the
project already ships, verifies it, and puts it on your PATH.
curl -fsSL https://raw.githubusercontent.com/listepo/ketch/main/install.sh | bash
No formula to write and no maintainer to wait for. Point ketch at
owner/repo and it infers the rest — the asset matching your
architecture, the binaries inside, what to call them.
Published SHA-256 checksums are checked against what actually landed on
disk. require_checksums refuses anything that publishes
none, and ketch's own updates never accept trust-on-first-use.
A release that ships an .app bundle gets placed in
/Applications, quarantine cleared when the signature checks
out — and removed cleanly when you uninstall it.
Versioned payloads in ~/.ketch/store, links in
~/.ketch/bin, one state.json. Nothing is
written anywhere else. Uninstalling leaves nothing behind.
GitLab, Gitea, an internal artifact server: a plugin is one executable that answers in JSON. No recompile, no ketch release. The protocol is one page.
One folder per package, one ketch.toml inside. No index to
keep in step, no lockstep releases —
send a pull request.
ketch install <pkg>... # install; --pre for prereleases, @version to pin one
ketch list # what is installed
ketch outdated # what has a newer release
ketch upgrade # bring everything unpinned up to date
ketch info <pkg> # details, including --assets and why each scored
ketch search <query> # the registry and GitHub
ketch changelog <pkg> # what changed: the shipped file, or the release notes
ketch history [<pkg>] # every version you have had, newest first
ketch stats # how many installs, and how long they take
ketch update # refresh the package registry
ketch pin / unpin <pkg> # hold a version, or let go
ketch uninstall <pkg>... # remove it
ketch lock / sync # pin every tool to a release, and reproduce it
ketch path install # put ~/.ketch/bin on PATH in bash, zsh and fish
ketch doctor --fix # check the environment, and repair what it can
ketch self update # upgrade ketch itself
ketch self uninstall # remove ketch, its packages, its PATH block, its caskNames resolve through four tiers — your own manifests, the fetched registry,
the registry compiled into the binary, then inference from
owner/repo. The last one is what makes an uncurated repository
installable with no manifest at all.
Writing a manifest →
curl -fsSL https://raw.githubusercontent.com/listepo/ketch/main/install.sh | bash
Then add ~/.ketch/bin to your PATH.
ketch doctor will tell you if it is not.