Your dotfiles, the same everywhere.
Edit a config file on any of your Macs or Linux machines, and within minutes every other machine has it. When two machines change the same file, dotsync keeps both versions and asks you which to keep.
curl -fsSL https://raw.githubusercontent.com/pungoyal/dotsync/main/install.sh | sh Verifies the checksum and signed build provenance. Other ways to install
git config --global alias.st status
dotsync sync
sent ~/.gitconfig
dotsync: 1 sent — pushed 51c7e02on its next scheduled sync, the desktop installs it
git config --global alias.st
statusThree commands, then you forget about it
Connect each machine to a private git repository, choose your files once from any machine, and go back to editing them as usual.
dotsync init git@github.com:you/dotfiles.git # clone, first sync, start the background agent
dotsync add ~/.gitconfig ~/.config/fish ~/.config/nvim # once, from any machine
dotsync doctor # check git access, the agent and every fileOne rule decides what happens to every file
For each file, every machine remembers the version it last agreed on with the others. Comparing against that version shows who changed the file, so there’s always exactly one right move.
| Unchanged on other machines | Changed on another machine | |
|---|---|---|
| Unchanged here | Unchanged here and elsewhereNothing to doEvery machine already has this version. | Changed only on another machineInstalled hereThis machine's copy is backed up first. |
| Changed here | Changed only hereSent everywherePushed, then installed by every other machine. | Changed here and on another machineConflictNothing is touched. You pick a version with one command. |
See deletions, first syncs and every edge case, with an interactive explorer →
Careful by design
Most dotfile managers are deployment tools: you edit a source copy, then apply it everywhere. dotsync is a synchronizer: you edit the real file, and it takes care of the rest.
Both ways, automatically
Edit the real file on any machine. A background job on each machine syncs every five minutes by default. Adding and removing files works from any machine too.
The background agentBacked up before it’s replaced
Every local file dotsync replaces or deletes is copied aside first, and every synced version stays in git history.
Safety guaranteesConflicts, never guesses
When two machines change the same file, dotsync keeps both versions untouched and asks you. It never merges and never picks a winner.
Resolve conflictsSecrets stay on the machine
Private keys, cloud credentials and tokens pasted into a config file are held back before they reach the repository.
Keep secrets outOffline for a month? Fine.
Changes wait while the remote is unreachable. A machine that comes back catches up, and still spots conflicts.
How sync worksNothing new to run
One static binary, git, and a private repository on any git host. No server to run, no service to sign up for, no daemon.
Design decisions
Always know where you stand
dotsync status shows every managed file, what’s about to change on this machine, and anything that needs you.
dotsync status
dotsync on laptop: git@github.com:you/dotfiles.git (main @ 1c049fe)
last sync: 2026-09-21T11:16:09+05:30 (ok)
automatic sync: launchd agent loaded
SOURCE TARGET STATUS DESCRIPTION
fish/config.fish ~/.config/fish/config.fish ok Fish shell configuration
gitconfig ~/.gitconfig CONFLICT Git identity and aliases
nvim ~/.config/nvim/ 1 incoming Neovim
- ~/.config/nvim/init.lua: download
conflicts (neither version has been changed):
~/.gitconfig since 2026-09-21T11:16:09+05:30
inspect: dotsync diff <path> settle: dotsync resolve <path> --keep local|remote
(to merge by hand, edit the local file, then --keep local)Is it the right tool for you?
A good fit if you
- use two or more Macs or Linux machines
- want your configuration to simply be the same on all of them
- would rather never run a command to keep them in sync
Look elsewhere if you need
- templates, where one file renders differently per machine. chezmoi is excellent at that; dotsync has per-OS entries and per-machine exclusions instead
- Windows support
- instant sync. dotsync syncs every few minutes, by design