dotstate is a dotfile manager for people who'd rather stop thinking about dotfiles. It keeps your shell, editor, and terminal configs synced across every machine — through profiles, inheritance, and one command to sync.
A restrained TUI with mouse support, keyboard shortcuts, and eleven themes — from this soft light palette to Tokyo Night, Gruvbox, and Catppuccin.
Keep your configuration files (like .zshrc, .vimrc, .gitconfig) synchronized across all your machines.
When you select a file, it's copied to your repository and a symlink is created in its place. Your files stay safely backed up and version controlled.
Add custom files via the file browser, or use the CLI: dotstate add ~/.myconfig
Commit, pull, and push your dotfiles to your remote repository — all in a single step.
A clear log shows what changed and what was pushed. Conflicts are surfaced immediately, never silently merged.
Create, switch, or inherit profiles. Children override parents; common files are shared across every profile automatically.
Switch with Enter. Old symlinks are removed; new ones are created. If activation fails, the previous profile is restored.
Track CLI tools per profile. Works with Homebrew, Cargo, npm, pip, and custom installation scripts.
Check what's missing on this machine, then install everything that's not yet installed.
Let dotstate create a GitHub repository for you, or bring your own on GitLab, Bitbucket, or any git host.
Repository setup is a one-time thing. After this, you won't need to think about it again.
Pick a theme from eleven built-ins. Configure your keymap — Standard, Vim, or Emacs presets — or override individual keys.
Toggle update checks, backup behavior, and more. Every setting is stored in ~/.config/dotstate/config.toml.
Separate sets of files for work, personal, servers, or any context you care about.
A child profile extends a parent and only overrides what's different. Changes flow down.
Track CLI tools per profile. Works with brew, cargo, npm, pip, or any custom script.
Automatic backups before every operation. No shell injection. Validated paths.
Setup is a single evening — sometimes less. Afterwards, dotstate sits in the background and only asks for your attention when you want it to.
Read the full install guide →One line in your terminal. A single binary lands in your path; nothing else changes.
Let dotstate create one on GitHub, or point it at any existing git repository you already own.
Pick files from your home directory in the TUI. Originals are backed up before anything moves.
One command to push and pull. Switch profiles to reshape your environment on the fly.
Everything the interactive TUI can do, dotstate can do as a script. Good for CI, bootstrapping a new machine, or staying on the home row.
Learn about profiles & inheritance →dotstate dotstate list dotstate add ~/.myconfig dotstate activate dotstate deactivate dotstate sync dotstate sync -m "message" dotstate upgrade dotstate packages list dotstate packages add -n ripgrep -m brew -b rg dotstate packages check dotstate packages install dotstate completions zsh dotstate help