Building a CLI with go-tool-base, part 1: scaffold and your first command
Install gtb, scaffold a releasable Go project, understand the generated and owned file split, then add your first command and run it.


Install gtb, scaffold a releasable Go project, understand the generated and owned file split, then add your first command and run it.

Doing local Git from Rust with gix rather than shelling out to the git binary or linking libgit2, and why that avoids a lot of cross-compilation pain.

An accidental major version bump was the last straw after months of unreliability. Why a Go framework moved off GitHub, and what moved with it.

Hot-reloading configuration: watch the file, re-read it, swap it in atomically and notify observers, without restarting a long-running service.

Self-update integrity for a CLI: verify the downloaded binary against the release checksums file, and decide whether to fail open or closed.

Porting a Go framework to Rust separates design from idiom. Which decisions survived the move, which were habits, and how to tell them apart.

A sibling to go-tool-base rather than a port, filling the gap between excellent Rust crates and a coherent way to assemble them.

Making OS-keychain support provably absent from a Go binary for regulated or air-gapped builds, using a registry and a blank import.

Credential storage for a Go CLI: an env-var reference by default, an opt-in OS keychain, and plaintext only as a last resort and banned in CI.

A user-settable AI base URL decides where your API key gets sent. Validating it to reject userinfo, non-HTTPS schemes and redirects.
