Comparison
Many tools start a project from a template; fewer keep it in step with the template afterwards. devset is built for the second part: a repository takes several small profiles, each owning whole files or only parts of them, and stays current with each release, keeping its own edits, with drift failing CI.
Each cell below links the page that shows it, in the tool’s own documentation, or, where the documentation says nothing, its source. They were read in September 2026, against copier 9.18, cruft 2.16, projen 0.103, chezmoi 2.72 and cargo-generate 0.25. A cell that is wrong, or out of date, is a bug: a pull request fixing it, with the page that shows it, is welcome.
| devset | copier | cruft | projen | chezmoi | cargo-generate | |
|---|---|---|---|---|---|---|
| Starts a new project | yes | yes | yes | yes | no | yes |
| Takes the template’s later changes | yes | yes | yes | yes | yes | no |
| Keeps the project’s edits through them | yes | yes | yes | no | partly | no |
| Owns part of a file, the rest the project’s | yes | no | no | no | yes | no |
| Several templates, each kept current | yes | yes | no | partly | partly | no |
| A template builds on another | yes | no | no | yes | no | no |
| Optional parts, by feature or answer | yes | yes | partly | yes | yes | yes |
| A drift check for CI | yes | no | yes | yes | yes | no |
| Applies without running the template’s code | yes | partly | no | no | partly | partly |
| Pins the template’s version | yes | yes | yes | yes | partly | yes |
Where a change meets an edit, the tools differ most:
- devset writes the conflict beside the file, in
.devset/conflicts/, and leaves the working file as it was, so a formatter or a build never meets conflict markers;devset apply --continueinstalls the resolution, and--aborttakes the run back. Updating and Merging - copier writes conflict markers into the file by default, or
.rejfiles beside it with--conflict rej. copier - cruft applies the template’s diff with
git apply -3, which writes markers into the file; outside a git repository it falls back to.rejfiles. cruft - projen has nothing to merge: it writes its files again from code, and a hand edit fails its anti-tamper check. projen
- chezmoi asks before overwriting a file changed since it wrote it, and
chezmoi mergeopens a three-way merge tool. chezmoi
What Each Is For
In their own words:
- copier: “a code lifecycle management tool.” (comparisons)
- cruft: “maintain all the necessary boilerplate for packaging and building projects separate from the code you intentionally write.” (key features)
- projen: “Define and maintain complex project configuration through code.” (README)
- chezmoi: “Manage your dotfiles across multiple diverse machines, securely.” (chezmoi.io)
- cargo-generate: “get up and running quickly with a new Rust project by leveraging a pre-existing git repository as a template.” (book)
When You Do Not Need devset
One repository, sharing nothing with another, has nothing for devset to keep in step: a template tool, or no tool, serves it. A project started once from a template and never updated from it is cargo-generate’s or copier’s. A home directory’s dotfiles are chezmoi’s. Configuration written as code, whole files generated and never edited, is projen’s. devset earns its place when several repositories share configuration that each also edits.