A Rust shell history search that replaces Ctrl-R with a context-aware, neural-network-ranked full-screen search.
atuinsh/atuin
A shell history replacement that stores commands in SQLite with context like exit code and duration, with optional end-to-end encrypted sync across machines.
- Stars
- 32,226
- Forks
- 1,028
- Open issues
- 416
- Last commit
- yesterday
What is it?
Atuin replaces the default shell history with a SQLite database and records extra context for each command, including exit code, working directory, hostname, session, and duration. It rebinds keys such as ctrl-r and up to a full-screen search interface, where results can be filtered to the current session, directory, or globally.
History can optionally be synced between machines through an Atuin server. Sync is encrypted end to end, so the server only handles encrypted data. Users can run their own server or skip sync entirely and keep history local.
The tool supports zsh, bash, fish, nushell, xonsh, and PowerShell. It also includes a command-line search mode, for example filtering successful runs of a command by time range, and can compute statistics such as most-used commands.
Key features
- 01Full-screen history search bound to ctrl-r and up by default
- 02Stores history in SQLite and records exit code, cwd, hostname, and duration
- 03End-to-end encrypted sync across machines via a self-hosted or hosted server
- 04Filter searches by session, directory, or globally
- 05Command-line search with filters such as exit code and time range
- 06Imports existing shell history without replacing the original file
Use cases
- Finding a previously run command by its exit status or time of day
- Keeping shell history consistent across a laptop, desktop, and servers
- Searching history within the current project directory
- Syncing history across machines while keeping data private through encryption
Quick start
- 1
Run the official install script from the README
- 2
Register an account on the Atuin Cloud sync server
atuin register -u <USERNAME> -e <EMAIL> - 3
Import your existing shell history
atuin import auto - 4
Sync your history, then restart your shell
atuin sync
Things to know
- The quickstart signs you up for the Atuin Cloud sync server, though self-hosting and offline setup are also documented.
- Bash support relies on bash-preexec, which has known limitations.
In collections
Topics
FAQ
- What is atuin?
- A shell history replacement that stores commands in SQLite with context like exit code and duration, with optional end-to-end encrypted sync across machines. Atuin replaces the default shell history with a SQLite database and records extra context for each command, including exit code, working directory, hostname, session, and duration. It rebinds keys such as ctrl-r and up to a full-screen search interface, where results can be filtered to the current session, directory, or globally.
- Is atuin free to use? What license does it have?
- atuin is open source under the MIT license. Check the license terms before using it in commercial products.
- Is atuin still maintained?
- Actively maintained. The last commit to atuin was on Nov 6, 2026.
- What can I use atuin for?
- Finding a previously run command by its exit status or time of day Keeping shell history consistent across a laptop, desktop, and servers Searching history within the current project directory Syncing history across machines while keeping data private through encryption
- How do I install atuin?
- Run the official install script from the README Register an account on the Atuin Cloud sync server: atuin register -u <USERNAME> -e <EMAIL> Import your existing shell history: atuin import auto Sync your history, then restart your shell: atuin sync
- Where can I get atuin?
- The source code and installation instructions are on GitHub: https://github.com/atuinsh/atuin
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A cross-platform prompt theme engine that renders customizable shell prompts for PowerShell, bash, zsh, fish, and more.
A shell directory jumper that learns the directories you visit and lets you cd into them with a few fuzzy-typed characters.
A minimal, customizable cross-shell prompt written in Rust that shows relevant project and environment info.
A general-purpose command-line fuzzy finder that filters any list of input and turns shell scripts into interactive terminal selectors.
A POSIX-compliant bash script for installing and switching between multiple Node.js versions per user and per shell.