Atuin v18 - Command inspector, Xonsh support, Vim keys, and Sync v2

Release notes for Atuin v18

Atuin supercharges your productivity by enabling you to rapidly retrieve any command you’ve ran, at any time, from anywhere. It stores your shell history in a database, recording additional command context and syncing it (e2e encrypted) across devices.

Announcing a new release of Atuin! v18 is out now

I've included the full changelog below, but here are some highlights

💻
Please note that this is a major version. If you are self hosting Atuin, you must upgrade your server to v18 in order to sync >=v18 clients

Community

Thank you so much to everyone who contributed to this release!

Command inspector

I've been talking about this for a long time, but now it's here! The command inspector allows you to switch tab and view more information about a command.

Press ctrl-o with a history item highlighted, and you'll see something like this

The interactive command inspector

You can see what was ran before/after a command, as well as some in-depth information and charts. Pressing ctrl-d allows you to delete the command via the UI, which is something users have been wanting for a long while now.

The inspector is likely to change in future releases - exploring a command on a per-session basis, or digging deeper into an individual session is certainly on the cards. If you have any feedback, please share it on the forum!

Vim keys

Something else that's been much-wished-for! Atuin now supports Vim keybindings. Support is currently minimal and limited to motion, but will be extended in the future.

We automatically detect if the user has Vim mode in their shell (as well as which mode they're in), and remap the keys accordingly. If you'd like to change this in your config, set keymap_mode

Sync v2/record sync

A new sync has been in the works for a long, long time now. We're just about ready to release it - in v18, it's opt-in. This will become the default in future releases.

Record sync is much faster and more efficient than the old version. We store your data encrypted on disk, so when it comes to sync time, it's easily pushed up to the server. There's far too much to explain it here, but if you'd like to opt in, please add this to the end of your config file (~/.config/atuin/config.toml)

[sync]
records = true

Then run atuin sync. If prompted, run atuin history init-store

If you've previously had issues getting Atuin to sync, please try this! It's generally much more resilient to edge cases, and has maintenance commands for correcting encryption key issues.

💡
All machines must run the same version of sync - so if you enable record sync on one machine, but not another, they will not sync with each other.

Xonsh support

v18 includes support for Xonsh! We don't yet have an importer, but that will be released soon.

Self hosting

This release includes some database migrations. You do not need to run them manually, but please be aware of this when applying upgrades. We recommend you have sufficient backups in place.

As mentioned above, clients running v18 will not sync with a server running <v18. Please stay up to date!

Forum

We now have a community forum. This is the best place to get help and support with Atuin! We also prefer to recieve feature requests there, which will be opened as GitHub issues when accepted.

❤️
If you'd like to support Atuin, please consider sponsoring on GitHub

Growth

January was the first month that Atuin has had full time work. We had a whole bunch of attention, on Hacker News, on Twitter/Mastodon, all over.

This lead to a bunch of new users, new contributors, GitHub stars, etc!

GitHub star growth

Some graphs from the Atuin sync server:

User growth
Daily active user growth

Full changelog

Bug Fixes

  • Prevent input to be interpreted as options for zsh autosuggestions (#1506)
  • Avoid unexpected atuin history start for keybindings (#1509)
  • Prevent input to be interpreted as options for blesh auto-complete (#1511)
  • Work around custom IFS (#1514)
  • Fix and improve the keybinding to up (#1515)
  • Fix incorrect timing of child shells (#1510)
  • Disable musl deb building (#1525)
  • Work around bash < 4 and introduce initialization guards (#1533)
  • Set umask 077 (#1554)
  • Disables unix specific stuff for windows (#1557)
  • Fix invisible tab title (#1560)
  • Shorten text, use ctrl-o for inspector (#1561)
  • Integration on older fishes (#1563)
  • Save sync time when it starts, not ends (#1573)
  • Print literal control characters to non terminals (#1586)
  • Escape control characters in command preview (#1588)
  • Use existing db querying for history list (#1589)
  • Add acquire timeout to sqlite database connection (#1590)
  • Update repo url in CONTRIBUTING.md (#1594)
  • Dedupe was removing history (#1610)
  • Only escape control characters when writing to terminal (#1593)
  • Strip control chars generated by \[\] in PS1 with bash-preexec (#1620)
  • Check for format errors when printing history (#1623)
  • Skip padding time if it will overflow the allowed prefix length (#1630)
  • Never overwrite the key (#1657)
  • Erase the prompt last line before Bash renders it
  • Erase the previous prompt before overwriting
  • Support termcap names for tput (#1670)
  • Set durability for sqlite to recommended settings (#1667)
  • Correct download list for incremental builds (#1672)
  • Add Settings::utc() for utc settings (#1677)

Documentation

  • Add repology badge (#1494)
  • Add forum link to contributing (#1498)
  • Refer to image with multi-arch support (#1513)
  • Remove activity graph
  • Fix Destination file already exists in Nushell (#1530)
  • Clarify enter/tab usage (#1538)
  • Improve style (#1537)
  • Remove old docusaurus (#1581)
  • Mention environment variables for custom paths (#1614)
  • Create pull_request_template.md (#1632)
  • Update CONTRIBUTING.md (#1633)

Features

  • Enable enhanced keyboard mode (#1505)
  • Rework record sync for improved reliability (#1478)
  • Include atuin login in secret patterns (#1518)
  • Add redraw (#1519)
  • Make it clear what you are registering for (#1523)
  • Support high-resolution timing even without ble.sh (#1534)
  • Add extended help (#1540)
  • Add interactive command inspector (#1296)
  • Vim mode (#1553)
  • Add better error handling for sync (#1572)
  • Add history rebuild (#1575)
  • Introduce keymap-dependent vim-mode (#1570)
  • Make deleting from the UI work with record store sync (#1580)
  • Add metrics counter for records downloaded (#1584)
  • Make cursor style configurable (#1595)
  • Make store init idempotent (#1609)
  • Don't stop with invalid key (#1612)
  • Add registered and deleted metrics (#1622)
  • When in vim-normal mode apply an alternative highlighting to the selected line (#1574)
  • [breaking] Bind the Atuin search to "/" in vi-normal mode (#1629)
  • Update widget names (#1631)
  • Make history list format configurable (#1638)
  • Add change-password command & support on server (#1615)
  • Automatically init history store when record sync is enabled (#1634)
  • Add store push (#1649)
  • Reencrypt/rekey local store (#1662)
  • Add prefers_reduced_motion flag (#1645)
  • Add verify command to local store
  • Add store purge command
  • Failure to decrypt history = failure to sync
  • Add store push --force
  • Add store pull
  • Disable auto record store init (#1671)
  • Add progress bars to sync and store init (#1684)

Miscellaneous Tasks

  • Remove the teapot response (#1496)
  • Schema cleanup (#1522)
  • Update funding (#1543)
  • Make clipboard dep optional as a feature (#1558)
  • Add feature to allow always disable check update (#1628)
  • Use resolver 2, update editions + cargo (#1635)
  • Disable nix tests (#1646)
  • Set ATUIN_ variables for development in devshell (#1653)
  • Use github m1 for release builds (#1658)
  • Re-enable test cache, add separate check step (#1663)
  • Run rust build/test/check on 3 platforms (#1675)

Refactor

  • Use enum instead of magic numbers (#1499)
  • String -> HistoryId (#1512)
  • Refactor and localize HISTORY => __atuin_output (#1535)
  • Refactor vim mode (#1559)
  • Refactor handling of key inputs (#1606)

Styling

  • Use consistent coding style (#1528)

Testing

  • Add multi-user integration tests (#1648)

Stats

  • Misc improvements (#1613)

New Contributors

A special thank you to everyone who contributed for the first time as part of this release!

If you'd like to leave a comment, check out the release post