Atuin vs fzf
fzf is a fuzzy finder that can search almost anything, including your shell history. Atuin is a full replacement for that history. It records every command to a database and can sync it across machines. The only place the two really compete is the ctrl-r binding.
| Atuin | fzf | |
|---|---|---|
| Built for | Shell history, and nothing else | Fuzzy finding anything. History is one of many uses |
| History storage | ✓SQLite database, no size limit, imports your existing history | —Reads your shell's plain-text history file, with its truncation and dedup limits |
| Context recorded | ✓Exit code, directory, duration, hostname, session, and time | —Only what the shell keeps: the command, maybe a timestamp |
| Sync across machines | ✓Optional; end-to-end encrypted, hosted or self-hosted | —None |
| Backup | ✓History survives reinstalls and lost laptops |
—None;
history -c clears it
permanently
|
| Filter modes | ✓Global, host, session, directory, and workspace. Cycle with ctrl-r | —One flat list per machine |
| Fuzzy matching | ✓Fuzzy, prefix, and full-text search modes | ✓Yes, it's fzf's core feature |
| Files, processes, git… | —No, history only | ✓Yes, pipe anything into it |
| Stats & insights |
✓
atuin stats shows your
most-used commands and more
|
—None |
| Open source | ✓MIT licensed, written in Rust | ✓MIT licensed, written in Go |
A database beats a text file
fzf searches whatever your shell wrote to its history file. Atuin records commands in its own database, along with the directory, exit code, and a few other things, so you can query your history properly instead of grepping a text file.
-
01
Search by what happened
Atuin stores the exit code, directory, duration, and hostname of every command. Filter for commands that succeeded, or search only the history of the project you're in.
-
02
History that follows you
Sync is end-to-end encrypted and works with the hosted server or your own. Set up a new machine, log in, and your history is already there.
-
03
Nothing falls off the end
There's no HISTSIZE limit and no truncation, and a shell crash doesn't lose history. Search is indexed, so it stays fast as the database grows.
Prefer your own infra? The sync server is open source — self-host it.
You don't have to choose
Atuin binds ctrl-r, plus the up arrow if you want it. Everything else stays with fzf: ctrl-t for files, alt-c for directories, **<tab> completion, and whatever scripts are built around it. Running both is a common setup.
Try it in two minutes
Install, run setup, then import your existing history. The whole thing takes about two minutes.
-
01
Install Atuin
$curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh -
02
Run setup
$atuin setup -
03
Import your history
$atuin import auto
Want more detail? Read the docs.
Frequently asked questions
Can I use Atuin and fzf together?
Yes, this is a common setup. Atuin takes ctrl-r for history search and fzf keeps everything else: files, directories, completion, pipelines. They don't conflict.
Does Atuin do fuzzy search like fzf?
Yes. Fuzzy is the default search mode, so the muscle memory you built with fzf carries over. There are also prefix and full-text modes when you want something stricter.
What happens to my existing shell history?
Run atuin import auto and Atuin reads your
existing bash, zsh, or fish history into its database. New
commands get recorded with full context from then on.
Do I have to sync my history?
No, sync is optional. Atuin works offline as a purely local history database. If you turn sync on, history is encrypted on your machine before upload, and the server can be self-hosted.
Is Atuin as fast as fzf?
Yes. Search hits an indexed SQLite database and stays instant even with years of history in it. Atuin is written in Rust.
Will Atuin break my existing shell setup?
No. It binds ctrl-r and, optionally, the up arrow; both are configurable. The rest of your bash, zsh, or fish config is left alone.