DevLogTechnical writing
Tools

atuin: Your Shell History, Searchable and Synced on Every Machine

November 06, 2026

If you've spent a week in the terminal, you know the ritual. Ctrl+R, type a fragment, and hope reverse search surfaces the deploy command from last Tuesday. When it works it feels like magic. When it doesn't — duplicates, truncated entries, no record of whether the command even succeeded — you wonder why we still live like this.

Atuin fixes that. It's a free, MIT-licensed tool written in Rust that swaps your plain-text history file for a SQLite database — and then keeps building on top. Created by Ellie Huxtable in October 2020, the project has passed 30,000 GitHub stars, with 300+ contributors, and the project site reports more than 600 million commands synced through it.

Search that remembers context

The first thing you notice is the search screen. Atuin rebinds Ctrl+R (and optionally the up arrow) to a full-screen history UI. Results filter as you type; press Enter to run a command, Tab to edit it first, or Alt+1 through Alt+9 to jump straight to a result.

The real upgrade is what atuin stores. Every entry keeps its exit code, working directory, hostname, session, and duration — not just the bare text of the command. That context turns search into interrogation. The bundled CLI makes it explicit:

atuin search --exit 0 --after "yesterday 3pm" make

That one line asks: all successful make invocations since 3pm yesterday. You can narrow a search to the current session or directory, or search everything globally. There's even a stats command, if you're brave enough to face your most-typed command (hello, git status).

History that follows you

The feature that sold me is sync. Atuin can mirror your history across machines with end-to-end encryption: data is encrypted client-side, so the server — hosted or self-hosted — never sees plaintext. The sync server is open source, and the docs walk you through running your own if you'd rather not use the hosted service.

Getting started is genuinely quick. Install with a one-liner script, or via your package manager (winget works on Windows). Then:

atuin register -u yourname -e you@example.com
atuin import auto
atuin sync

atuin import auto pulls in your existing bash, zsh, and fish history in one go — your original history file is kept intact, not replaced. Restart your shell, and Ctrl+R is a different animal.

Where it runs

Bash, zsh, and fish get first-class support, with nushell, xonsh, and PowerShell close behind. Prebuilt binaries cover Linux, macOS, and Windows (WSL2 included). The project sits at version 18.x and shows no signs of slowing down; a desktop companion is also in the works.

It slots in neatly next to the rest of the modern terminal toolkit: zoxide for directories, fzf for general fuzzy search, and atuin for the one thing both of them ignore — the commands you've already run. Install it, import your history, and find out what your shell has been keeping from you. If you live in a terminal, it's a ten-minute upgrade you'll feel for years. If you've spent a week in the terminal, you know the ritual. Ctrl+R, type a fragment, and hope reverse search surfaces the deploy command from last Tuesday. When it works it feels like magic. When it doesn't — duplicates, truncated entries, no record of whether the command even succeeded — you wonder why we still live like this. Plain-text history files are a blunt instrument: they drop repeated commands, truncate when they hit their size limit, and can't tell you anything about an entry beyond its position in the file. The feature that sold me is sync. Atuin can mirror your history across machines with end-to-end encryption: data is encrypted client-side, so the server — hosted or self-hosted — never sees plaintext. The sync server is open source, and the docs walk you through running your own if you'd rather not use the hosted service. Either way, it doubles as a backup: if a machine dies, your command history doesn't die with it.

← More Tools