Atuin: 29,794 GitHub Stars — 셸 히스토리 동기화 완벽 설정 가이드 2026
Atuin은 셸 히스토리를 SQLite 데이터베이스로 교체하고, 명령어 컨텍스트(종료 코드, 작업 디렉토리, 실행 시간)를 기록하며, E2E 암호화로 여러 머신 간 히스토리를 동기화한다. Bash, Zsh, Fish, Nushell 지원. 설치, 자체 호스팅, 설정 및 Atuin vs mcfly vs fzf vs Hstr 비교 포함.
- MIT
- 업데이트 2026-05-19
apiVersion: v1 kind: Service metadata: name: atuin-service spec: selector: app: atuin ports: - port: 8888 targetPort: 8888
## Benchmarks / Real-World Use Cases
### Performance Characteristics
Atuin's Rust implementation and SQLite backend provide consistent performance across large history datasets. These numbers were measured on an AMD Ryzen 5 5600X with NVMe storage and 32GB RAM:
| Metric | Value | Notes |
|--------|-------|-------|
| History query (100K entries) | ~15ms | fuzzy search, cold cache |
| History query (500K entries) | ~45ms | fuzzy search, warm cache |
| History query (1M entries) | ~85ms | fuzzy search, warm cache |
| Sync initial upload (50K cmds) | ~30s | depends on bandwidth |
| Incremental sync | ~1-3s | typical daily delta |
| Binary size | ~12MB | single static binary |
| Memory footprint | ~15MB | resident while idle |
| SQLite DB size | ~150MB per 100K commands | with full metadata |
| Shell startup overhead | ~5-10ms | one-time per shell session |
### Production Use Cases
1. **Multi-Device Development**: A developer with a work laptop, personal desktop, and cloud VM keeps all shell history in sync. Running `docker compose up` on one machine is searchable from another.
2. **Team Knowledge Preservation**: A DevOps team self-hosts Atuin to maintain a searchable audit trail of infrastructure commands across rotating on-call engineers.
3. **Remote Environment Recovery**: Developers using ephemeral cloud workstations (Gitpod, Coder) sync history so workspace teardown does not erase command context.
### Stats Command Output
```b
a
s
h
$ atuin stats
[▮▮▮▮▮▮▮▮▮▮] 9,607 fg
[▮▮▮▮▮▮▮▮▮ ] 9,458 vim
[▮▮▮ ] 3,144 ag
[▮▮▮ ] 3,095 git status
[▮▮ ] 2,248 git diff
[▮ ] 1,787 curl
[▮ ] 1,571 jq
[▮ ] 1,357 rg
[▮ ] 1,348 cd
[▮ ] 1,322 git log
Total commands: 62,849
Unique commands: 26,908
Migrating from Other History Tools #
If you are switching from mcfly, Hstr, or plain shell history, the migration path is straightforward:
a
s
h
# Step 1: Install Atuin (your existing history stays untouched)
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
# Step 2: Import existing history into Atuin's database
atuin import auto
# Step 3: Initialize shell integration
eval "$(atuin init zsh)" # or bash/fish
# Step 4: Verify — both systems coexist during transition
atuin stats
history | wc -l # native history still works
# Step 5: After a week of testing, disable native history in rc file:
# echo 'unset HISTFILE' >> ~/.zshrc
Atuin does not delete or interfere with your existing ~/.bash_history or ~/.zsh_history file. The original history remains intact as a fallback.
Advanced Usage / Production Hardening #
History Privacy Filters #
Prevent sensitive commands from entering the database:
o
m
l
# ~/.config/atuin/config.toml
[settings]
history_filter = [
# AWS credentials
"^aws configure",
"^export AWS_SECRET_ACCESS_KEY",
# Generic secrets
"^export.*SECRET",
"^export.*PASSWORD",
"^export.*TOKEN",
"^echo.*password",
# SSH keys
"^ssh-add",
"^ssh-keygen",
# Database connection strings
"^psql.*://.*:",
"^mysql.*-p",
]
Backing Up Your History #
a
s
h
# SQLite backup (safe, no lock issues)
sqlite3 ~/.local/share/atuin/history.db ".backup '/backup/atuin-$(date +%Y%m%d).db'"
# Or copy with WAL checkpoint
cp ~/.local/share/atuin/history.db ~/backups/atuin-backup.db
# Automated daily backup via cron
0 2 * * * sqlite3 ~/.local/share/atuin/history.db ".backup '/backups/atuin/atuin-$(date +\%Y\%m\%d).db'" && find /backups/atuin -mtime +30 -delete
Monitoring Sync Health #
a
s
h
# Check last sync time
atuin sync --force # force a sync and show status
# View sync info
atuin info
# Atuin v18.16.1
# Sync interval: 5m
# Sync address: https://api.atuin.sh
# Last sync: 2026-05-20T08:15:32Z
# History count: 47,231
# Check for issues
atuin doctor
Theming the TUI #
o
m
l
# ~/.config/atuin/config.toml
[theme]
# Use terminal's default colors
use_default_colors = true
# Or specify explicit colors
base = "#1e1e2e"
layer1 = "#313244"
text = "#cdd6f4"
accent = "#89b4fa"
Multi-Machine Key Migration #
When setting up a new machine, transfer your encryption key securely:
a
s
h
# On old machine — copy key to clipboard (or secure transfer)
cat ~/.local/share/atuin/key
# On new machine — after install and login
mkdir -p ~/.local/share/atuin
echo "YOUR_KEY_HERE" > ~/.local/share/atuin/key
chmod 600 ~/.local/share/atuin/key
# Verify sync works
atuin sync
atuin stats
Comparison with Alternatives #
| Feature | Atuin | mcfly | fzf + history | Hstr |
|---|---|---|---|---|
| Database | SQLite | SQLite | Plain text file | Plain text file |
| Cross-machine sync | Yes (E2EE) | No | No | No |
| Search UI | Built-in TUI | Built-in TUI | fzf integration | Built-in TUI |
| Context logging | cwd, exit, duration, host | cwd, exit | None | None |
| Statistics | atuin stats |
No | No | No |
| Shell support | bash, zsh, fish, nu, xonsh | bash, zsh, fish | Any shell | bash, zsh |
| Encryption | PASETO V4 | None | None | None |
| Self-hosted server | Yes (Docker/K8s) | N/A | N/A | N/A |
| AI integration | Yes (optional) | No | No | No |
| History import | bash, zsh, fish, nu | bash, zsh, fish | N/A | bash, zsh |
| GitHub Stars | 29,794 | 6,800 | 67,000 (fzf) | 3,900 |
| Binary size | ~12MB | ~4MB | ~4MB (fzf only) | ~2MB |
When to Choose Each Tool #
- Atuin: You want encrypted sync across machines, rich context metadata, and a full-featured search UI. Best for developers working on 2+ machines who value history analytics.
- mcfly: You want a lightweight, fully local tool with intelligent contextual ranking. Best for single-machine users who want zero network dependencies.
- fzf + history: You already use fzf for files and want a minimal history solution. Best for users who want one tool for everything fuzzy.
- Hstr: You want a simple, lightweight history TUI without database overhead. Best for minimalists on bash/zsh.
Limitations / Honest Assessment #
Atuin is not the right tool for every scenario:
-
No Executor Tracking: Atuin records the command but not whether it was typed manually, executed by a script, or generated by an AI coding assistant. All sources look identical in the database.
-
Local Database is Unencrypted: The SQLite database at
~/.local/share/atuin/is stored in plaintext for performance. History sync is encrypted, but local storage is not. Use filesystem encryption (LUKS, FileVault) for protection. -
Bash Integration Can Be Fragile: Bash’s
preexechooks rely on DEBUG traps that can conflict with other tools (pyenv, nodenv, certain PROMPT_COMMAND setups). Zsh and Fish integrations are more reliable. -
Sync Requires Account: Even self-hosted sync requires user registration. There is no anonymous or “just sync to S3” mode.
-
Up-Arrow Binding Surprises New Users: Atuin replaces the up-arrow key by default, which can confuse users who just want to cycle recent commands. Set
filter_mode_shell_up_key = "session"or disable the binding entirely. -
PowerShell Support is Tier 2: While functional, PowerShell integration receives less testing and may lag behind Unix shell features.
Frequently Asked Questions #
How do I disable the up-arrow binding? #
Add filter_mode_shell_up_key = "global" or show_preview = false in your config. To completely disable Atuin on up-arrow, add export ATUIN_NOBIND=1 before the init line and manually bind only Ctrl+R:
a
s
h
# ~/.bashrc
export ATUIN_NOBIND=1
eval "$(atuin init bash)"
bind '"\C-r": "\C-aatuin search\C-j"'
Can I use Atuin without any sync? #
Yes. Atuin works fully as a local tool. Simply skip registration and ignore all sync commands. Your history stores in local SQLite and all search features work offline.
How is my data encrypted? #
All sync data is encrypted client-side with PASETO V4 (XChaCha20-Poly1305 + Blake2b) before leaving your machine. The sync server (whether self-hosted or atuin.sh) only sees encrypted blobs — it cannot decrypt or read your commands. Your local SQLite database is not encrypted for search performance.
What happens if I lose my encryption key? #
Your encryption key is required to decrypt synced history. If lost, you cannot recover previously synced data. The key is displayed during initial setup with atuin key — back it up in a password manager. Local history remains accessible regardless.
Can two users share a history database? #
Not directly. Atuin’s sync model is designed for one user across multiple devices. For team shared history, each user maintains their own database and sync account. Self-hosted servers support multiple independent accounts.
Does Atuin slow down my shell? #
No measurable impact. The Rust binary adds ~5-10ms to shell startup (one-time), and command capture happens asynchronously via shell hooks. The SQLite WAL mode ensures writes do not block the shell prompt.
How do I delete a command from history? #
a
s
h
# Delete by search pattern
atuin search --delete "sensitive-command"
# Or use the TUI — find the command, then press Alt+Delete
Conclusion #
Atuin turns shell history from a flat text file into a structured, searchable, and portable database. With 29,794 GitHub stars, end-to-end encrypted sync, and support for every major shell, it is a practical upgrade for any developer who lives in the terminal.
Next steps:
- Run
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | shto install - Import existing history with
atuin import auto - Register for sync or configure a self-hosted server
- Join the Telegram developer community for tips and troubleshooting
Recommended Hosting & Infrastructure #
Before you deploy any of the tools above into production, you’ll need solid infrastructure. Two options dibi8 actually uses and recommends:
- DigitalOcean — $200 free credit for 60 days across 14+ global regions. The default option for indie devs running open-source AI tools.
- HTStack — Hong Kong VPS with low-latency access from mainland China. This is the same IDC that hosts dibi8.com — battle-tested in production.
Affiliate links — they don’t cost you extra and they help keep dibi8.com running.
Sources & Further Reading #
- Atuin GitHub Repository
- Atuin Official Documentation
- Atuin Self-Hosting Guide
- Atuin Configuration Reference
- PASETO V4 Specification
- Ellie Huxtable — Atuin Creator Blog
- mcfly GitHub Repository
- fzf GitHub Repository
- Hstr GitHub Repository
💬 댓글 토론