Repository navigation
π godspeed 0.3.0
π godspeed 0.3.0 - every kind of program, and packages that travel without a network
The developer CLI for GodspeedOS, released alongside
GodspeedOS v0.29.0 "Signed, Sealed, Delivered". That OS release brings TLS 1.3, its own package manager,
and a supervisor that installs what you publish. This CLI is the other half: you can now build all four
kinds of Godspeed program, and ship any of them as one file to a machine that is never online.
godspeed new utility hello # π§ a program that does one job and ends with a status
godspeed new app notes # πΌοΈ one that owns the screen and keyboard while it runs
godspeed new driver mydev # π one that drives a device, named by its PCI class
godspeed fetch godspeed/hello --offline # πΎ hello-0.3.0.gsp, installable with no network
godspeed inspect hello-0.3.0.gsp # π checked offline; nothing keptπ Guide and examples: https://godspeedhq.github.io/godspeed-cli/
Updating from 0.2.0:
godspeed self update.
β¨ What's new
π§© Four kinds of program, not one
A GodspeedOS 0.29.0 machine installs four kinds of package, and godspeed new makes every one. Each has a
template, a project kind and its own package format:
| Kind | Whose life | New in 0.3.0 |
|---|---|---|
| βοΈ service | the system's: started at boot, restarted if it dies | may declare handover, so godspeed upgrade replaces it live |
| π§ utility | its own: runs when typed, ends with a status, pipes like a built-in | β new |
| πΌοΈ app | the operator's: owns the console while it runs | β new |
| π driver | its device's: given one device by PCI class, registers only | β new |
godspeed check refuses handover on anything but a service. Only a service is ever replaced while it runs.
πΎ Packages that travel as one file
- π¦
godspeed fetch <pkg> --offlinewrites<name>-<version>.gsp(.gspfor GodspeedOS
Package). It holds every document the fetch read and checked: the roots, the timestamp, the snapshot,
the namespaces, the package's index, its manifest, signature and contract, and its binaries (all of them,
or--archone). Copy it to a USB stick and rungodspeed install hello-0.3.0.gspon a machine with no
network. The machine checks it with the same code as a download. - π
godspeed package --localmakes a.gspof your own, unpublished package, signed with your key.
A machine installs it only once its operator trusts that key directly (godspeed trust addon the machine). - π
godspeed inspectchecks a.gspoffline, or a release on the registry, and keeps nothing. - π·οΈ You never name the file: the flag says what it is for, and the name comes from the manifest. Nobody
names a.debwhen they make one.
π‘οΈ Stronger, and in step with the OS
- π Package names follow the machine:
publisher/nameat most 128 bytes, the OS's new limit. - π The snapshot streams. It is verified from its digest and read a line at a time, so a client never has
to hold the whole registry in memory. - π§° The platform kit is read from the release's
godspeed-platform.toml, checked against its
SHA256SUMS. GodspeedOS v0.29.0 is the first release to publish one, and this CLI uses it: a project made
with no checkout fetched the 0.29.0 kit from the release the hour it was published. - π§ͺ Building against a checkout (
--os) accepts a stdlib tag at or before its release, so a checkout
ahead of its last release builds again. - π£οΈ
godspeed install,updateand the other native verbs now say where they run: at the Godspeed
machine'sgsh>prompt. The CLI no longer says the package manager is not built, because it is. - π€« Template manifests are
Cargo.toml.template, so a git dependency on this repository builds quietly.
π§ͺ Tested
cargo fmt,clippy -D warnings, and the whole test suite.- Every template generated, built and tested against a checkout of GodspeedOS v0.29.0 (4/4), which CI now
proves on every change. - Every example checked and built for all four architectures, and a library's tests run, against v0.29.0.
- A new service built with no OS checkout at all, from the published v0.29.0 platform file.
π§ Still waiting on GodspeedOS
godspeed run and godspeed test for a service: the OS has no public way to start an outside program inside
its test image yet, so the CLI says so instead of pretending. Installing on a machine is the OS's own
godspeed install, at its prompt.
π» Builds
π§ Linux x86_64 and Arm64 (static, any distribution) Β· π macOS Apple silicon and Intel Β· πͺ Windows x64 and Arm64.
Built against GodspeedOS v0.29.0.
β¬οΈ Install
Install on Linux or macOS:
curl --proto '=https' --tlsv1.2 -sSf https://github.com/godspeedhq/godspeed-cli/releases/latest/download/install.sh | sh
Install on Windows (PowerShell):
irm https://github.com/godspeedhq/godspeed-cli/releases/latest/download/install.ps1 | iex
The installers check each binary against SHA256SUMS before running it. A checksum shows the file is
the one this release lists; releases are not signed yet.