mrkeyoor.com_
Wed 09 Sept 13:32 UTC
Dev Toolsevaluationupdated 09 Sept 2026

chezmoi review

chezmoi is a command-line dotfile manager that keeps one desired configuration across Linux, macOS, Windows, BSD, and other machines. It stores a source copy in Git, renders machine-specific files with templates, previews differences, and applies the minimum changes needed to the home directory.

trackingstars / 7d
Verdict

Our detected chezmoi workflow installed 34 packages in 19 seconds, built in 1 second, and reported 0 known vulnerabilities, but it exposed no test target. chezmoi is the best fit here for experienced command-line users whose dotfiles vary by machine and may pull secrets at apply time. Choose a simpler symlink manager if templates, source attributes, scripts, and external archives would turn a small configuration into a second software project.

We ran it

Lab card: what happened when we ran chezmoiScreenshot of chezmoi (www.chezmoi.io)
Install✓ · 19s34 packages · 38 MB
Build✓ · 1s
Testsn/ano test script
Known vulns0(pip-audit)
Repo1015 files~48,435 lines of source · 5.3 MB · 7 CI workflows

Answers from our run

Does chezmoi build from source?

Dependencies installed in 19 seconds (34 packages), and the build succeeded in 1 seconds. We cloned commit e570ee6 into a clean Debian container with 3 CPUs and no project-specific setup.

Does chezmoi have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does chezmoi have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use chezmoi?

Users expecting automatic two-way synchronization: issue 4361 says deletions and renames in the home directory cannot be detected and synchronized automatically.

What are the alternatives to chezmoi?

yadm, Dotbot, rcm. Our detected chezmoi workflow installed 34 packages in 19 seconds, built in 1 second, and reported 0 known vulnerabilities, but it exposed no test target.

Setup4/5Many binary install routes; advanced templates take real study
Docs5/5Excellent quick start, command reference, guides, and comparisons
Community5/521,538 stars with current releases and focused issue activity
Maturity5/5Version 2.72.1, signed releases, and broad platform packages

Who it’s for

Developers who use several operating systems or machines and want one dotfiles repository.
People who need per-machine templates rather than one identical symlink tree everywhere.
Users who want secrets pulled from a password manager when files are rendered.
Careful operators who prefer diff and dry-run output before home-directory changes.
Bootstrap authors who want scripts, external archives, and packages described with their dotfiles.

Who it’s NOT for

Users expecting automatic two-way synchronization: issue 4361 says deletions and renames in the home directory cannot be detected and synchronized automatically.
People who want a graphical settings manager: the daily workflow is a CLI, a source directory, templates, and Git.
Anyone unwilling to learn chezmoi's filename attributes and Go template syntax: advanced cross-machine rules depend on both.
Users who plan to commit raw passwords or tokens: safe public repositories require password-manager functions, encryption, or private configuration.
Contributors who use ChatGPT, Claude, Copilot, or another LLM for patches: the contribution guide says any LLM-assisted contribution earns an immediate ban.
Windows users whose setup depends on KeePassXC with a YubiKey challenge response: issue 4935 reports that integration as unsupported on Windows.

Setup reality

Our sandbox's detected Python workflow installed 34 packages in 19 seconds and used 38 MB. Its available build succeeded in 1 second. There was no test script or target, so tests were skipped. Pip-audit reported 0 known vulnerabilities in those installed Python packages.

Normal use is simpler than that repository workflow: install a prebuilt chezmoi binary or an OS package, run chezmoi init, and use a Git remote to share state. Public repositories need no credential; private ones use SSH or credentials managed by local Git. Password-manager integrations need their own client and sign-in.

Building the Go program from source requires Go 1.25 or later. The 1,015-file checkout had no Dockerfile, so source and runner setup stays with the user. Templates can execute password-manager lookups, scripts, and external downloads during apply; inspect chezmoi diff and use dry-run before trusting a new repository.

chezmoi keeps desired state separate from the home directory

chezmoi stores a source representation of managed files under ~/.local/share/chezmoi. The home directory remains the destination. chezmoi add brings a file into source state, chezmoi diff shows what would change, and chezmoi apply makes the destination match. This extra layer is why it can do more than a directory of symlinks. It is also the concept new users must understand before an edit lands where they expect.

commit e570ee6 was a 1,015-file checkout with about 48,435 lines of source and a 5.3 MB footprint before installation. The project is primarily Go, ships as a single binary, and documents package-manager or prebuilt downloads for Linux, macOS, Windows, FreeBSD, OpenBSD, Termux, and more. A new machine can initialize and apply a hosted dotfiles repository in one command, though reviewing the diff first is the safer habit.

Go templates make one repository behave differently per machine

Files ending in .tmpl use Go's text/template syntax plus helper functions. The template data includes operating system, hostname, user configuration, environment variables, files, and password-manager results. That is enough to choose different settings for work and personal machines or render platform-specific paths. Shared templates can reduce repetition. Debugging them still feels like programming, especially once conditionals, data files, and source-name attributes interact.

The source format encodes behavior in names and special files. Attributes can make entries private, executable, encrypted, exact, or removable. External definitions can download files, archives, or Git repositories, verify checksums, and apply include or exclude patterns. The measured checkout's 48,435 source lines hint at how much behavior sits behind the friendly quick start. Someone managing only .vimrc and .gitconfig may be happier with yadm, Dotbot, or plain Git.

What happened when we ran it

We cloned commit e570ee6 and followed the workflow our sandbox detected as Python. Installation succeeded in 19 seconds, adding 34 packages and occupying 38 MB. The available build completed in 1 second. No test script or target was present for that detected workflow, so the lab skipped tests. Pip-audit found 0 known vulnerabilities in the Python packages installed during the run.

That result needs a boundary because GitHub identifies chezmoi's primary language as Go. The measured workflow passed its build, but the lab block does not say that it compiled or tested the Go CLI. It provides no Go test count. Our scan found 7 CI workflow files, no Dockerfile, and no tests directory. The missing directory does not prove an absence of Go tests, which are often kept beside package code.

The install and 1-second build show that the detected repository path was light enough for a fresh 3-CPU, 8 GB container. They do not measure applying a real dotfiles repository, calling a password manager, fetching external archives, or running user scripts. Those operations depend on the user's configuration and network. A trial should use a temporary home directory and -n -v before touching a daily account.

Prebuilt binaries avoid the repository's Python and Go toolchains

Most users do not need the source checkout. The installation guide lists native package commands, release archives, and an official shell installer. Source builds require Go 1.25 or later. Releases include signed checksum files and a documented cosign verification path, which is preferable when the binary will later rewrite shell, editor, SSH, or Git configuration. People who dislike piping a downloaded script into a shell can use their package manager or verify a release archive.

A hosted Git repository is the usual transport across machines. Public repositories need no login for cloning. Private repositories rely on SSH or credentials handled by local Git; chezmoi says it does not store those credentials. The 19-second lab install did not authenticate to a remote or exercise private repository setup. Automatic add, commit, and push can be enabled, but keeping those operations explicit is easier to reason about while learning.

Password managers keep raw secrets out of the source repository

Template functions can retrieve values from tools such as 1Password, Bitwarden, KeePassXC, and cloud secret stores when a destination file is rendered. Whole-file encryption is another option. This makes a public dotfiles repository possible without publishing the final token value. It does not make secret handling automatic: the relevant client must be installed, authenticated, and available on every machine where apply needs that value.

Pip-audit found 0 known vulnerabilities among the 34 Python packages in our run, but that result does not assess a user's password-manager client, downloaded externals, or scripts. External entries can pin SHA256, SHA384, or SHA512 checksums, and users should do so for fixed artifacts. A dotfiles repository can execute setup logic with the account's permissions. Reading someone else's repository before init --apply is basic self-defense.

Deletions and renames are not automatic two-way sync

Open issue 4361 describes the recurring gap plainly: chezmoi cannot automatically infer that a home-directory deletion or rename should be synchronized across source and other machines. Existing commands and remove_ attributes provide the pieces, but the reported workflows require explicit forget, destroy, remove, rename, or add steps. Users coming from Dropbox-style synchronization must adjust their mental model. Source state is authoritative when apply runs.

There are narrower platform edges too. Issue 4935 reports KeePassXC YubiKey challenge-response working on Linux but returning unsupported on Windows. Issue 5133 reports a missing PowerShell native-completion parameter. GitHub showed 58 open issues and pull requests when fetched, with a last push on September 7, 2026. Release 2.72.1 arrived August 30, so the current issue activity sits beside a current release rather than a dormant tag.

The project rejects every LLM-assisted contribution

The contribution guide says using ChatGPT, Claude, Gemini, Copilot, Llama, or another LLM for any contribution leads to an immediate ban without recourse. That policy does not affect ordinary use of the binary, but it directly affects who can submit documentation, tests, or code. Teams that require AI-assisted development should treat chezmoi as an upstream dependency they consume, not a project to which their normal workflow can contribute.

Alternatives

ProjectWhat it isPick it when
yadmA Git-based dotfile manager with alternates, templates, encryption, and bootstrap support.pick this instead when you want a workflow closer to a bare Git repository and fewer source-name conventions.
DotbotA small Python tool that installs dotfiles from a declarative configuration.pick this instead when a simple bootstrap file and symlink-oriented setup cover the machines you use.
rcmA set of Unix tools for maintaining and installing named dotfile sets.pick this instead when a traditional shell workflow is enough and Windows support is unnecessary.
Bare Git repositoryA dotfiles approach using Git itself with the home directory as the working tree.pick this instead when every file can stay identical and you want no dotfile-specific tool.

What people are saying

  1. [velocity-scout] twpayne/chezmoi

Sources

  1. chezmoi repository and README
  2. chezmoi quick start
  3. chezmoi installation guide
  4. chezmoi setup guide
  5. chezmoi templating guide
  6. chezmoi password manager integration
  7. chezmoi 2.72.1 release
  8. Deletion and rename synchronization issue 4361

More dev tools reviews

iced · Files · linux · tokio · lerna · system-design-notes · the whole board →