Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

devsetcopiercruftprojenchezmoicargo-generate
Starts a new projectyesyesyesyesnoyes
Takes the template’s later changesyesyesyesyesyesno
Keeps the project’s edits through themyesyesyesnopartlyno
Owns part of a file, the rest the project’syesnononoyesno
Several templates, each kept currentyesyesnopartlypartlyno
A template builds on anotheryesnonoyesnono
Optional parts, by feature or answeryesyespartlyyesyesyes
A drift check for CIyesnoyesyesyesno
Applies without running the template’s codeyespartlynonopartlypartly
Pins the template’s versionyesyesyesyespartlyyes

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 --continue installs the resolution, and --abort takes the run back. Updating and Merging
  • copier writes conflict markers into the file by default, or .rej files 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 .rej files. 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 merge opens 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.