Blog
Go functional options enforce required fields at runtime, if at all. A Rust typestate builder refuses to compile when you forget one.
A flaky self-update test: separate processes still shared a computed cache path and raced on disk. Process isolation is not filesystem isolation.
Rust has no init or pre-main phase, so self-registering commands need another mechanism. Using a distributed slice to get the same shape.
Self-update integrity for a CLI: verify the downloaded binary against the release checksums file, and decide whether to fail open or closed.
A Rust gotcha: non_exhaustive promises an enum can grow, but returning a fixed-size array bakes today count into the type. Both cannot be true.
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.
A primer on the six Rust concepts you need to follow the rest: ownership and borrowing, traits, enums and match, Result and the question mark.
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.