Sync shell history across every machine
Run a command on your laptop and it's in ctrl-r on your desktop moments later. Atuin records every command to a local database and syncs it, end-to-end encrypted, between all of your machines — bash, zsh, or fish, on macOS, Linux, and Windows.
$curl --proto '=https' --tlsv1.2
-LsSf https://setup.atuin.sh | sh
One history, everywhere
Atuin stores your history in a local SQLite database and syncs encrypted records through a server — the hosted one or your own. Every machine keeps a full copy, so search is instant and nothing depends on the network.
-
01
End-to-end encrypted
History is encrypted on your machine before it's uploaded, with a key that never leaves your devices. The server only ever stores ciphertext.
-
02
Local-first, offline-friendly
Each machine keeps the full database, so ctrl-r never waits on the network. Work offline, and changes sync when you reconnect.
-
03
A backup, for free
Sync doubles as an off-machine backup. Reinstall your OS or lose a laptop, log back in, and years of history come back with it.
Prefer your own infra? The sync server is open source — self-host it.
Why not just sync the history file?
People have tried keeping ~/.bash_history in Dropbox, git, rsync, and NFS mounts. It mostly ends in clobbered files and missing commands. Atuin was built for this problem instead.
| Atuin sync | DIY file sync | |
|---|---|---|
| Merging | ✓Append-only records merge cleanly, from any number of machines at once | —Last write wins; two open shells can clobber each other's history |
| Privacy | ✓End-to-end encrypted before anything leaves your machine | —Plaintext commands sitting in a cloud folder or git repo |
| Context | ✓Exit code, directory, duration, and hostname travel with every command | —Just the raw command text, maybe a timestamp |
| History limits | ✓No cap and no truncation; the full history lives on every machine | —HISTSIZE truncation still applies on each machine |
| Adding a machine |
✓One
atuin account login
and everything is there
|
—Recreate symlinks, hooks, and cron jobs by hand |
Day one with your whole history
A fresh laptop usually means starting from an empty history. With Atuin, you log in once and every command you've ever run is in ctrl-r before your dotfiles finish cloning. Filters keep it manageable: search everything, or narrow to just this host, session, or directory.
Syncing in two minutes
Install Atuin, run setup on your first machine, then log in everywhere else. Your existing bash, zsh, or fish history is imported along the way.
-
01
Install Atuin
$curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh -
02
Register and sync
$atuin setup -
03
Log in on your other machines
$atuin account login
Want more detail? Read the docs.
Frequently asked questions
How do I sync shell history between two machines?
Install Atuin on both machines. Run
atuin setup on the first: it imports your
existing history, registers your account, and turns on
sync. On the second machine, run
atuin account login. Both machines share one
encrypted history from then on.
Can the sync server read my shell history?
No. History is encrypted on your machine before it's uploaded, with a key that never leaves your devices. The server, hosted or self-hosted, only ever stores ciphertext.
Does sync work across different shells and operating systems?
Yes. Atuin works with bash, zsh, fish, and more, on macOS, Linux, and Windows. A command typed in zsh on a Mac shows up in bash on a Linux server.
What happens when I'm offline?
Everything keeps working. Commands are recorded to the local database and search stays instant, with no network round-trip. Changes sync automatically the next time you're online.
Is syncing shell history free?
Yes. Atuin is open source, and you can use the hosted sync service or self-host the sync server on your own infrastructure.
How much history can I sync?
There's no cap and no truncation. History lives in an indexed SQLite database on each machine, so search stays instant even with years of commands from many machines.