Concepts

Four ideas carry the whole system. Get these down and every command reads like plain English.

Repository

Any git remote. star never requires a forge — it runs git against whatever URL you give it. A repository becomes useful to you the moment it is configured (star repo add), and its clone lives in a local cache that is safe to delete at any time.

Namespace

A repository’s identity in your config: the last two path components of its remote.

https://git.jingus.dev/jingus/starters   →   jingus/starters

Namespaces qualify templates — jingus/starters#rust-cli — so two repositories can both offer a rust-cli without colliding. If a remote’s tail is awkward or ambiguous, override it:

star repo add https://github.com/acme/mono --name acme/templates

Namespaces are validated: no #, no .., not absolute.

Template

Any directory inside a repository that contains a star.toml whose first line is not #star-ignore. That’s the entire registration mechanism — there is no manifest of manifests to keep in sync. A repository is a template collection precisely because any directory can opt in, and an empty star.toml is a perfectly valid zero-config template (the name falls back to the directory name).

When you scaffold, the template’s tree is materialized into your target — the star.toml itself is never copied, at any depth.

See the star.toml reference for every field.

Pin

The commit a configured repository is locked to. All scaffolding reads the pinned tree, which makes star use reproducible until you choose otherwise. Pins move only when you say so:

star repo update jingus/starters   # abc1234 → def5678

Ad-hoc URL references (star use https://…#name) are the exception: they resolve remote HEAD and are never pinned.

How the pieces fit

You say star does
star repo add <remote> clone into the cache, record remote + HEAD commit as the pin
star use <name> search every configured repo’s discovered templates
star use ns#name look in exactly one repository, at its pin
star use https://…#name ad-hoc: clone at remote HEAD, no config entry, no pin
star repo update re-resolve remote HEAD, fetch, rewrite the pin(s)