---
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
