What Atuin Does
- Rich history — cwd, exit code, duration, session, hostname
- Search UI — Ctrl+R opens fuzzy picker with filters
- End-to-end encrypted sync — across machines
- Stats — top commands, avg duration, failure rate
- Filter by — directory, session, exit code
- Replaces Ctrl+R — native shell history integration
- Import — bash, zsh, fish, nushell, resh
Architecture
Local SQLite database at ~/.local/share/atuin/history.db. Shell hook captures each command pre/post execution. Optional sync server stores encrypted blobs (client has the key, server cannot read plaintext).
Self-Hosting
Optional sync server is open source:
docker run -d -p 8888:8888 -v atuin-data:/config ghcr.io/atuinsh/atuin server start
# Or via systemd: atuin server startClient config points to your server with sync_address in ~/.config/atuin/config.toml.
Key Features
- Full context per command
- E2E encrypted sync
- Fuzzy interactive picker
- Directory-scoped history
- Session filtering
- Import from other history tools
- Stats and insights
- Self-hostable server
Comparison
| Tool | Storage | Sync | Context |
|---|---|---|---|
| Atuin | SQLite | E2E encrypted | Full |
| McFly | SQLite | No | Limited |
| HSTR | Native | No | None |
| fzf history | Flat file | No | None |
| shell history | Flat file | No | None |
FAQ
Q: What about privacy? A: Atuin stores data locally by default. When sync is enabled, data is encrypted with a client key before upload, so the server never sees plaintext. Completely self-sovereign.
Q: Does it affect shell startup speed? A: The Rust implementation is fast, and hooks only fire on command execution — startup impact is imperceptible.
Q: Can I exclude certain commands?
A: Yes. Configure the history_filter regex array (for example, commands containing passwords) to avoid recording them.
Sources & Credits
- Docs: https://atuin.sh
- GitHub: https://github.com/atuinsh/atuin
- License: MIT