A calmer home
for the files that
configure everything.

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.

macOS · Linux
~ curl -fsSL https://dotstate.serkan.dev/install.sh | bash
At a glance
~8 MB
a single Rust binary · zero runtime dependencies
The interface

Quiet, by design.

A restrained TUI with mouse support, keyboard shortcuts, and eleven themes — from this soft light palette to Tokyo Night, Gruvbox, and Catppuccin.

dotstate · v0.3.4 · ~/.config/dotstate
D O T S T A T E
Manage your dotfiles with ease. Sync to any git host, organize by profiles, and keep your configuration files safe.
Menu
Manage Files your dotfiles
Sync with Remote commit, pull, push
Manage Profiles work, personal, server
Manage Packages brew, cargo, npm
Setup git repository github or bring your own
Settings themes, keymaps
What does this do?

Manage Your Dotfiles

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

Sync with Remote

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.

Manage Profiles

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.

Manage Packages

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.

Setup git repository

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.

Settings

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.

Status
Synced Files8
Profiles5 · active: Personal
Repositorydotstate-storage

Profiles

Separate sets of files for work, personal, servers, or any context you care about.

Inheritance

A child profile extends a parent and only overrides what's different. Changes flow down.

Packages

Track CLI tools per profile. Works with brew, cargo, npm, pip, or any custom script.

Safe by design

Automatic backups before every operation. No shell injection. Validated paths.

SECTION 01

Four steps, then it's quiet.

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 →
STEP 01

Install

One line in your terminal. A single binary lands in your path; nothing else changes.

STEP 02

Connect a repo

Let dotstate create one on GitHub, or point it at any existing git repository you already own.

STEP 03

Adopt dotfiles

Pick files from your home directory in the TUI. Originals are backed up before anything moves.

STEP 04

Sync & switch

One command to push and pull. Switch profiles to reshape your environment on the fly.

SECTION 02

The command line,
for when the TUI isn't enough.

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 →

Files

dotstate
Open the interactive TUI
dotstate list
List every synced file in the active profile
dotstate add ~/.myconfig
Adopt a file into the active profile
dotstate activate
Re-create symlinks (useful after cloning on a new machine)
dotstate deactivate
Restore original files and remove symlinks

Sync

dotstate sync
Commit, pull, and push in one step
dotstate sync -m "message"
Sync with a custom commit message
dotstate upgrade
Check for, and optionally install, updates

Packages

dotstate packages list
Show tracked packages and their installation state
dotstate packages add -n ripgrep -m brew -b rg
Track a new package for this profile
dotstate packages check
Check what's missing on this machine
dotstate packages install
Install every missing package

Shell

dotstate completions zsh
Emit zsh completions (also: bash, fish)
dotstate help
Full command reference