--- title: Atuin created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, file-transfer-and-sync, shell, history, rust] confidence: high contested: false sources: [https://selfh.st/apps/?tag=file-transfer-and-sync] --- # Atuin 🐢 > Historique de shell synchronisé, chiffré, full-text searchable (Rust). | Métadonnée | Valeur | | :--- | :--- | | **Site web** | https://atuin.sh | | **GitHub** | https://github.com/atuinsh/atuin | | **License** | MIT | | **Langage** | Rust | | **Étoiles** | 24000+ | | **Dernière MAJ** | 2025 | | **Catégorie** | [[cat-file-transfer-and-sync]] | ## Description Atuin remplace le traditionnel `~/.bash_history` par une base **SQLite** locale, liée à un serveur central optionnel qui synchronise l'historique entre toutes les machines d'un même utilisateur. La fonction première est de retrouver une commande exécutée il y a six mois grâce à une recherche fuzzy ultra-rapide (`Ctrl+R`) avec filtres par répertoire, hôte, durée d'exécution, code de retour. Chaque entrée est stockée avec son **contexte complet** : timestamp UTC, répertoire de travail, hostname, durée, exit code, commande. Atuin supporte **bash, zsh, fish, nushell** et conserve la compatibilité avec l'historique natif (import initial automatique). Les alias `atuin search`, `atuin stats`, `atuin list` permettent d'explorer ses habitudes de travail et de dégager des statistiques utiles. Le serveur de sync officiel est **atuin.sh** (gratuit, clé d'API) mais il est aussi possible d'auto-héberger son instance via le binaire `atuin server` (PostgreSQL requis). Le chiffrement bout-en-bout est systématique : le serveur ne voit que du **chiffrement e2e** des commandes sensibles. ## Installation ### Docker Compose (serveur) ```yaml services: atuin: image: ghcr.io/atuinsh/atuin:latest container_name: atuin command: server start environment: - ATUIN_HOST=0.0.0.0 - ATUIN_PORT=8888 - ATUIN_OPEN_REGISTRATION=false - ATUIN_DB_URI=postgres://atuin:***@db:5432/atuin depends_on: - db ports: - "8888:8888" restart: unless-stopped db: image: postgres:16-alpine environment: - POSTGRES_USER=atuin - POSTGRES_PASSWORD=changeme - POSTGRES_DB=atuin volumes: - ./pgdata:/var/lib/postgresql/data restart: unless-stopped ``` ### Client (Linux / macOS) ```bash curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh | sh atuin register -u https://atuin.example.com -e moi@example.com -n $USER atuin import auto atuin login -u https://atuin.example.com ``` ## Configuration 1. Ajouter le hook à son shell (Bash, Zsh, Fish) : ```bash eval "$(atuin init bash)" # ou zsh/fish ``` 2. Pour Zsh, ajouter aussi `bindkey '^R' atuin-search` dans `.zshrc`. 3. Configurer le serveur de sync dans `~/.config/atuin/config.toml` : ```toml sync_address = "https://atuin.example.com" ``` 4. Exclure des secrets automatiquement via les filtres : `atuin search --before "1 month ago"`. 5. Sync manuelle : `atuin sync`. ## Alternatives - **Open source** : [[app-syncthing]] (fichiers), fzf + history (basique), McFly (ML sur l'historique), zsh-autosuggestions (suggestions), broot (navigation). - **Propriétaire** : Fig, Warp (commercial shell), fish_history (sans sync). ## Sécurité - Chiffrement bout-en-bout des entrées sync (clé dérivée du mot de passe utilisateur). - Serveur ne peut pas lire le contenu des commandes. - Tokens d'API personnels (revocables). - Open registration désactivable en self-host. - Stockage local SQLite : vérifier les permissions du fichier (`chmod 600`). ## Ressources - Documentation : https://docs.atuin.sh - Démo : https://atuin.sh/demo - Code : https://github.com/atuinsh/atuin - Discord : https://discord.gg/FQ8DaM7 ## Pages Liées - [[cat-file-transfer-and-sync]] — Catégorie parente - [[app-syncthing]] — Sync P2P fichiers - [[recettes-docker-compose]] — Modèles de stacks