claylo-rs v1.0.0-beta.1
What’s New
First beta. The template is feature-complete after four alpha iterations of dogfooding, bug-fixing, and progressive testing. 38 feature flags, 3 presets, 64 tests passing.
Documentation site — The has_site flag generates a full Astro Starlight docs site sourced from your project’s docs/ directory. Includes LLMs.txt endpoints, three deploy targets (GitHub Pages, Cloudflare via Actions, Cloudflare direct), and viewport prefetching.
XDG + doctor command — Generated CLIs get cross-platform config/cache/data path resolution via the directories crate, plus a doctor subcommand that reports config file status, XDG paths, and relevant environment variables.
Interactive prompts and progress — Two new optional feature flags: has_inquire for interactive prompts (Confirm, Select, Text) and has_indicatif for progress bars and spinners.
Project-specific env vars — Each generated project gets its own prefix derived from its name (e.g., MY_TOOL_LOG_DIR), so multiple template-generated projects on the same system don’t collide.
CLI improvements — --config / -c global flag, --version-only for scripting, arg_required_else_help, and env var documentation in --help.
Rename tool — scripts/rename.sh handles kebab-case, snake_case, and PascalCase simultaneously. Uses perl to avoid BSD/GNU sed incompatibility.
Edition-aware resolver — Edition 2024 projects get resolver = "3", older editions get resolver = "2".
Getting Started
brew install claylo/tap/claylo-rs
claylo-rs new ./my-cli
Or with copier directly:
copier copy gh:claylo/claylo-rs my-project
How We Built This
The alpha-to-beta push was about taking a template that technically worked and making it feel like a real tool. The biggest chunk of work was the docs site — Clay wanted Starlight because it’s fast and has built-in search, but wiring Astro 5.x into a Copier template with Jinja2 was tricky. Every { in an Astro component needed escaping or wrapping in raw blocks, and there were hundreds of them. We solved it by moving most of the Astro config into non-templated files and only templating the pieces that actually need project-specific values.
The doctor command was Clay’s idea from using other CLI tools that have one. The implementation was straightforward — the directories crate does the heavy lifting for XDG paths, and we just format the output. The interactive prompt integration (inquire) made the doctor command nicer: it can offer to create a default config file if one doesn’t exist.
Project-specific env vars seem obvious in retrospect but came from a real collision. Clay had two template-generated projects on the same machine both fighting over APP_LOG_DIR. The fix was a build script that derives the prefix from the crate name at compile time.
Six PRs merged, 64 tests passing, zero known issues. Ready for real-world feedback.