What Atuin actually does
Atuin's documentation says it replaces your shell history with a SQLite database. For each command it also records context: the directory it ran in, how long it took, whether it succeeded, and which machine and session it came from. Sync is optional. You can use Atuin's hosted server, host your own, or stay entirely local.
Search opens with Ctrl+R or the Up arrow. Enter runs the selected command, and Tab drops it onto the command line for editing. Alt plus a number is also documented as a quick-pick shortcut. If you already have a history file, atuin import auto brings it in. Imported legacy entries won't carry the context Atuin records for new commands.
Setup, step by step
- Install. The documented quickstart is the one-liner the article quotes:
curl --proto '=https' --tlsv1.2 -LsSf [! /bin/sh](https://setup.atuin.sh) | sh. It pipes a downloaded script into a shell, so read it first if you're cautious. On Windows, the release page also offers an x64 zip and a PowerShell installer script. - Restart your shell. Atuin hooks in through shell initialization, so the integration doesn't load until you do.
- Register. Run
atuin register -u <USERNAME> -e <EMAIL>, thenatuin sync. - Save your key. Registration generates an encryption key that you can display with
atuin key. Atuin's guide says this key is needed to log in on other machines and must never be shared. The guide also says history is fully end-to-end encrypted. The guide warns that Atuin can't recover a lost key and suggests a password manager. - Link another PC. Install Atuin there, run
atuin login -u <USERNAME>, and enter your password and key. - Force a full sync if data looks missing.
atuin syncruns a manual sync.atuin sync -ftriggers a full sync, which may take longer.
How often does it sync? The docs disagree
The XDA article says sync defaults to every five minutes. Atuin's own documentation gives two answers:
- The setup guide says Atuin will sync your history once per hour by default.
- The versioned configuration reference for 18.23 lists a sync_frequency default of 5m. That same page says the value can be a duration like 10s, 20m, 1h or 1d, and that a setting of 0 syncs after every command.
The configuration reference is the more specific source, and it matches the author's experience. The guide's hourly figure may simply be stale. I couldn't confirm which one reflects the current behavior. If timing matters to you, set sync_frequency explicitly in your config rather than trusting any default.
The cross-shell gotcha
This was the author's biggest stumbling block, and it deserves attention. A command can sync successfully and still not show up in your Ctrl+R search.
By default, interactive search filters by the shell you're currently in. The [search] section's shells setting controls this. Its default of "auto" shows commands from the current shell. Setting shells = "all" shows everything. An array of shell names limits results to just those shells.
Mixed environments are where this bites. Take a Bash laptop and a fish desktop, or a Linux box and a Windows PowerShell machine. History syncs, but the search UI shows only the current shell's commands. Running atuin history list shows the full set. The author's fix is shells = "all". That isn't automatically right for everyone. Bash one-liners are of little use at a PowerShell prompt, so you might choose per-machine settings, or list specific shells in the array.
Windows and PowerShell support
Atuin's support matrix draws a useful distinction between operating-system support and shell-feature support:
| Item | Status |
|---|---|
| bash, zsh, fish | Tier 1, actively supported by the Atuin team |
| nushell, xonsh, PowerShell | Tier 2, community-supported, best effort |
| Windows x86_64 | Tier 1 OS target with a prebuilt binary and tested CI |
| WSL 2 x86_64 | Tier 1, with tested CI |
PowerShell has history search, but the matrix marks the inline popup as unsupported. It also shows no pty-proxy for PowerShell, and the Windows row notes no syntax highlighting or pty-proxy. The XDA piece says the history side "works perfectly" in PowerShell, but it also reports having to change the script execution policy first. Expect that friction on a locked-down Windows machine. If you manage fleets, check policy before rolling it out.
WSL 2 is listed as a Tier 1 target, so a developer who splits time between PowerShell and a WSL bash session can run Atuin in both. That is where the shells setting matters most.
Where's the config file?
The article gives ~/.atuin/config.toml for Linux. The answer depends on the Atuin version:
- The 18.23 documentation says the config lives at ~/.config/atuin/config.toml.
- Newer main-branch documentation describes
~/.atuinas the default, withATUIN_HOMEandATUIN_CONFIG_DIRas overrides. It says older installs keep using the old locations if nothing is found in~/.atuin.
If you can't find the file, check both locations, or run atuin doctor for diagnostics. Don't assume one path fits every install.
Privacy: encrypted sync isn't a license to paste secrets
Atuin states that synced history is end-to-end encrypted, so the server operator can't read it. Those are the project's own claims, not an independent audit. Your history also carries context beyond command text, such as working directories, hostnames and exit codes. That is my inference from the fields Atuin records, not a documented risk.
Atuin offers several controls to keep sensitive material out:
- A leading space keeps a single command out of history, where the shell supports the "ignorespace" convention. There is a documented Bash caveat. With bash-preexec rather than ble.sh, the command won't appear in Atuin but may still appear in Bash's own history.
history_filtertakes regular expressions to exclude matching commands, such as anything with--password.cwd_filterexcludes everything run in matching directories.atuin history pruneremoves entries recorded before you added a filter.
By default, Atuin also skips commands containing credentials it recognizes, such as AWS and GitHub keys, but its own documentation calls this best-effort. Treat filters as a safety net, not permission to type secrets into a terminal.
Troubleshooting checklist
- History appears in one terminal but not another. An IDE terminal may start a non-interactive shell that never loads your shell config, so Atuin's hooks don't install. Configure the IDE to start an interactive shell and run
atuin doctor. - Synced but invisible. Check the
shellssetting first. - Missing records. Run
atuin sync -f. - PowerShell refuses to load the integration. Review your execution policy, as the author had to.
Bottom line
Atuin earns its reputation. Searchable, context-rich history that follows you between machines is useful for anyone who bounces between a Windows PC, WSL and Linux boxes. Go in with realistic expectations. PowerShell is a best-effort citizen with fewer features than bash, zsh or fish. The default search filter hides other shells' commands. Your encryption key is the one thing you can't afford to lose. Whether sync runs every five minutes or every hour depends on which part of the documentation you believe, so set it yourself and stop guessing.
The XDA article calls the tool "free". Atuin's docs confirm the software is published openly and that a hosted sync server exists. I didn't verify the hosted service's current pricing or limits.
References
- This free tool syncs your terminal history between PCs, and it belongs on every developer's machine XDA · 2026-10-25T18:00:20+00:00
- sync.md github.com
- index.md github.com