Atuin: SQLite-backed shell history with encrypted sync
Making your shell magical. Additionally, it provides optional and _fully encrypted_ synchronisation of your history between machines, via an Atuin server.
At a glance
- What is it?
- Atuin replaces your shell history with a SQLite database, adds context like exit codes and durations, and offers optional end-to-end encrypted sync across machines. This review covers its mechanism, setup, and where it falls short.
- Who is it for?
- Adopt Atuin if you want a searchable, context-rich shell history across multiple terminals and machines, and you accept the overhead of a Rust binary and a sync server. Skip it if you prefer minimal tooling or if your shell is not in the supported list (zsh, bash, fish, nushell, xonsh, PowerShell).
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- atuinsh/atuin32,354 ★ · +1,455
| Repository | 2026-07-29 | 2026-11-14 |
|---|---|---|
| atuinsh/atuin | 30.9k | 32.4k |
1,455 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What Atuin actually replaces
The project is written in Rust. But the real shift is architectural: history becomes queryable data, not a linear file. That opens the door to features like statistics on most-used commands. If you have ever grepped `.bash_history` and wished for structured fields, Atuin is aimed directly at you.
The mechanism: SQLite, hooks, and a search UI
The sync feature is optional. You can use Atuin without any server, purely as a local history replacement. If you enable sync, the README claims "fully encrypted" synchronization. The encryption is end-to-end, meaning the server operator cannot read the data. The README says: "As all history sync is encrypted, I couldn't access your data even if I wanted to." That is a strong claim, but the details of key management are not in the README. You would need to read the sync documentation to understand how keys are derived and stored. The architecture is client-server: you either use the hosted server at atuin.sh or run your own instance.
Getting it running: quickstart commands and config
The install method is a curl pipe to sh, which some users will reject on security grounds. The README does not offer alternative install methods, though it links an installation guide. The latest release is v18.24.4, published 2026-10-30, so the project is actively maintained. The command structure is simple: `atuin search`, `atuin import`, `atuin sync`. The search command takes flags like `--exit` and `--after`, which are documented in the README example. That is the extent of the command surface visible in the README.
A genuine limitation: bash-preexec and shell coverage
Another limitation is the reliance on a sync server. Even with end-to-end encryption, you are adding a network dependency. If the server is down, does `atuin sync` block or fail gracefully? The README does not say. For a local-only user, that is irrelevant, but for a sync user, it is a question. The encryption claim is strong, but the README does not discuss key recovery. That is a potential failure mode for the forgetful user.
The wrong tool: when Atuin is overkill
The sync feature, while encrypted, may be a liability for users who are required to keep history on-premises. Even with encryption, sending history to a third-party server might violate policy. The README does not offer a local-only sync option, though it says "or just don't use sync at all." That is a binary choice: either you sync via an Atuin server or you do not sync. The README describes sync only through an Atuin server.
Alternatives: the difference in approach
For sync, the alternative is to use a dotfiles manager like GNU Stow or a git repository to sync your `.bash_history` file. That approach is not encrypted by default, and it does not merge conflicts well. Atuin's sync is designed for merging history across machines, which is a different problem. If you only need to share history between two machines, a git repo might be simpler, but it lacks the encryption and conflict resolution. The choice depends on whether you value structured search over simplicity.
Maintenance and upgrade cost
The fact that the tool is written in Rust means it is compiled to a single binary, which is easier to deploy than a Python or Node app. The bash-preexec dependency is a third-party piece that the README says has limitations. That is a maintenance risk. Overall, the upgrade cost is moderate: you need to monitor releases and test your shell integration after each update.
Editorial conclusion
Adopt Atuin if you want a searchable, context-rich shell history across multiple terminals and machines, and you accept the overhead of a Rust binary and a sync server. Skip it if you prefer minimal tooling or if your shell is not in the supported list (zsh, bash, fish, nushell, xonsh, PowerShell). Before adopting, verify the sync encryption model: the README claims end-to-end encryption, but you should confirm the key management details in the docs, especially for self-hosted servers. Also test the bash-preexec integration, since the README notes limitations. Start with `atuin import auto` and `atuin sync` to see if the workflow fits.
Frequently asked questions
What is Atuin?
A shell history tool that stores your commands in a SQLite database and attaches context such as exit code, cwd, hostname, session and duration to each entry. It offers a full screen search UI bound to ctrl-r and up, and can optionally sync that history between machines, fully encrypted.
Is Atuin safe?
The project states that all history sync is encrypted end to end, and that your old history file is not replaced. If you use the author's hosted server, the author says they could not read your data. You can also self host the server or skip sync entirely.
Is Atuin free?
The repository is MIT licensed and the source is on GitHub. There is a hosted sync service at Atuin Cloud that you sign up for during the quickstart, but the project also documents self hosting the server and running without sync at all.
What is Atuin written in?
Rust. The Cargo workspace pulls in every directory under crates/ as a member, excluding ui/backend, and the workspace package sets a rust-version floor of 1.95.0. At version 18.24.4 the workspace contains crates such as atuin-client, atuin-daemon, atuin-history and atuin-server.
how to install atuin
The quickstart pipes the setup script into sh over TLS, then registers an account, imports existing history and syncs. The installer is a single command: curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh. You restart your shell afterwards so the plugin hooks load.
how to use atuin
Press the rebound ctrl-r or up key to open the full screen search UI, filter by session, directory or globally, hit enter to execute or tab to edit. Outside the UI, the query interface accepts filters such as atuin search --exit 0 --after "yesterday 3pm" make to find only successful make commands from that afternoon.
Official sources
Was this useful?