How it works

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.

your laptop · 14:02 recording · synced
~/src/api $ cargo sqlx migrate run ~/src/api $ kubectl rollout status deploy/api deployment "api" successfully rolled out
ctrl-r on your desktop · 14:03 synced · encrypted · 78,594 cmds
<tab> edit · <enter> run · exit 0 · ~/src/api 2s  1m ago  laptop  cargo sqlx migrate run > 12s  now    laptop  kubectl rollout status deploy/api [ GLOBAL ] rollout

Prefer your own infra? The sync server is open source — self-host it.

The old way

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
New machine

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.

Getting started

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.

  1. 01 Install Atuin
    $curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
  2. 02 Register and sync
    $atuin setup
  3. 03 Log in on your other machines
    $atuin account login

Want more detail? Read the docs.

FAQ

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.