{"id":42553130,"url":"https://github.com/claylo/claylo-rs","last_synced_at":"2026-02-28T08:36:55.158Z","repository":{"id":334142190,"uuid":"1137099569","full_name":"claylo/claylo-rs","owner":"claylo","description":"Production-ready Rust CLI scaffolding. Opinionated defaults. Updates that don't abandon you.","archived":false,"fork":false,"pushed_at":"2026-02-05T03:16:26.000Z","size":475,"stargazers_count":0,"open_issues_count":24,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-05T04:53:25.526Z","etag":null,"topics":["copier-template","rust","rust-cli","rust-template"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/claylo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"lovelesslabs","buy_me_a_coffee":"claylo"}},"created_at":"2026-01-18T22:49:41.000Z","updated_at":"2026-02-05T03:16:28.000Z","dependencies_parsed_at":"2026-02-04T20:03:59.888Z","dependency_job_id":null,"html_url":"https://github.com/claylo/claylo-rs","commit_stats":null,"previous_names":["claylo/claylo-rs"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/claylo/claylo-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claylo%2Fclaylo-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claylo%2Fclaylo-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claylo%2Fclaylo-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claylo%2Fclaylo-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/claylo","download_url":"https://codeload.github.com/claylo/claylo-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claylo%2Fclaylo-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29558101,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T20:52:40.164Z","status":"ssl_error","status_checked_at":"2026-02-17T20:48:10.325Z","response_time":100,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["copier-template","rust","rust-cli","rust-template"],"created_at":"2026-01-28T19:23:01.644Z","updated_at":"2026-02-28T08:36:55.147Z","avatar_url":"https://github.com/claylo.png","language":"Jinja","funding_links":["https://github.com/sponsors/lovelesslabs","https://buymeacoffee.com/claylo"],"categories":[],"sub_categories":[],"readme":"# claylo-rs\n\nProduction-ready Rust CLI scaffolding.\nOpinionated defaults.\nUpdates that don't abandon you.\n\n[![Should I use this template flowchart](docs/diagrams/should-i-2x.png)](docs/diagrams/should-i-3x.png)\n\n## Install\n\n```bash\nbrew install claylo/brew/claylo-rs\n```\n\nHomebrew will install [copier](https://copier.readthedocs.io/) alongside the `claylo-rs` wrapper, or you can `uv tool install copier` or `pipx install copier`.\nIf you're not a Python fan, don't worry — it stays out of your generated project.\n\n\n## Quick Start\n\n```bash\n# Sensible defaults: CLI + config + logging + workspace layout\nclaylo-rs new ./my-tool --owner myorg --copyright \"Your Name\"\n\n# Full send: benchmarks, OpenTelemetry, the works\nclaylo-rs new ./my-tool --preset full +otel\n\n# Minimal: just the binary (we've all been there)\nclaylo-rs new ./my-tool --preset minimal\n```\n\nYou now have a Rust workspace with:\n\n- A CLI binary that handles `--verbose` and `--quiet`\n- JSONL logging that doesn't pollute stdout (safe for pipes and MCP servers)\n- Config file discovery that checks all the right places\n- A `.justfile` so you never type `cargo nextest run --all-features` again\n\nSix months later, the template adds MCP server scaffolding.\nYou run:\n\n```bash\nclaylo-rs update . +mcp\n```\n\nThree-way merge. Your code stays. New features land. No copy-paste-pray.\n\n\n## Presets\n\nPick a starting point. Override anything with `+flag` or `-flag`.\n\n| Preset | The Vibe |\n|--------|----------|\n| **minimal** | Just the binary. No config, no logging, no training wheels. For when you know exactly what you're doing, or want to find out the hard way. |\n| **standard** | The \"you'll thank yourself later\" tier. CLI + core library + config discovery + JSONL logging + xtask automation. Most projects land here. |\n| **full** | Everything. Benchmarks, editor configs, markdown linting, environment files. For projects that will outlive your current job. |\n\n```bash\n# Standard with OpenTelemetry tracing\nclaylo-rs new ./my-tool --preset standard +otel\n\n# Full but skip the benchmarks\nclaylo-rs new ./my-tool --preset full -bench\n\n# Minimal but add config support\nclaylo-rs new ./my-tool --preset minimal +config\n```\n\nSee [docs/reference.md](docs/reference.md) for the full flag list.\n\n\n## What You Get\n\n```\nmy-tool/\n├── crates/\n│   ├── my-tool/           # CLI binary\n│   │   ├── src/\n│   │   │   ├── main.rs    # Entry point, args, logging init\n│   │   │   └── commands/  # Subcommand handlers\n│   │   └── tests/\n│   └── my-tool-core/      # Library crate (your actual logic)\n├── xtask/                 # Build automation (man pages, completions)\n├── docs/                  # Starlight content source\n├── site/                  # Astro Starlight documentation site\n├── .claude/               # Claude Code skills, rules, commands\n├── .justfile              # Task runner recipes\n├── Cargo.toml             # Workspace manifest\n└── deny.toml              # cargo-deny config\n```\n\n**Separate binary and library** — Your CLI is a thin wrapper.\nThe logic lives in `-core` where it's testable without spawning processes.\n\n**xtask instead of build scripts** — `cargo xtask install` generates man pages and shell completions.\nNo Makefile, no external tools.\n\n**Logging that respects stdout** — JSONL goes to files.\nStdout stays clean for pipes, MCP servers, and tools that need structured output.\n\n**Config discovery built in** — Checks `./my-tool.toml`, `~/.config/my-tool/config.toml`, and environment variables.\nHierarchical, overridable, boring in the best way.\n\nThe structure follows [ADR-0001](docs/decisions/0001-workspace-structure-with-separate-core-library.md) if you want the reasoning.\n\n\n## Works with Claude Code\n\nThe generated project includes `.claude/` with skills, and commands tuned for Rust development.\n\n\"Add a new subcommand\" → There's a skill for that.\n\"Set up config file support\" → Already documented.\n\"Why is clippy yelling at me\" → The rules explain the lint choices.\n\nYou're not starting from scratch. Neither is your AI.\n\n```bash\n# Skip if you have your own global Claude setup\nclaylo-rs new ./my-tool -claude_skills -claude_rules\n```\n\n\n## This Isn't One-and-Done\n\nYeoman generates and ghosts you.\n`cargo-generate` copies and walks away.\n\nCopier tracks what it generated.\nWhen the template improves, your project can too:\n\n```bash\n# Six months later\nclaylo-rs update .\n```\n\nThree-way merge.\nYour changes stay.\nTemplate updates land.\nNo archaeology required.\n\nSee [docs/updating.md](docs/updating.md) for the full workflow.\n\n\n## \"What about release automation?\"\n\nThe CI/CD matrix, cargo-dist config, changelog generation, and \"publish to crates.io on tag\" workflow are all included.\n\nSee [docs/releases.md](docs/releases.md) for the full details.\n\nNot your style? The release system is easy to turn off — just delete the workflows you don't want.\n\n---\n\n**Reference:** [docs/reference.md](docs/reference.md) — All flags, all options.\n\n**Presets deep dive:** [docs/presets.md](docs/presets.md) — What each preset enables.\n\n**Updating projects:** [docs/updating.md](docs/updating.md) — The update workflow, bulk updates.\n\n**Template development:** [docs/development.md](docs/development.md) — For contributors.\n\n\n## License\n\nDual-licensed under MIT and Apache-2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaylo%2Fclaylo-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclaylo%2Fclaylo-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaylo%2Fclaylo-rs/lists"}