asdf remplace nvm, pyenv, rbenv et tous les gestionnaires de versions
spécifiques par un seul outil. Avec une commande unique (asdf install), vous
installez Node.js, Python, Go, Terraform, kubectl et plus de 700 outils. Le
fichier .tool-versions à la racine de chaque projet garantit que toute
l'équipe utilise exactement les mêmes versions. Fini les "ça marche sur ma
machine".
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre le fonctionnement d'asdf (plugins, shims, résolution de versions)
- Installer asdf sur Linux et macOS
- Gérer vos outils : installer, définir des versions globales et locales
- Synchroniser une équipe avec le fichier
.tool-versions - Migrer depuis nvm, pyenv ou rbenv
- Optimiser votre workflow avec les bonnes pratiques
Fonctionnement de asdf
Section intitulée « Fonctionnement de asdf »asdf ne sait rien faire seul : chaque outil géré passe par un plugin, un
petit dépôt de scripts shell qui sait lister, télécharger et compiler les
versions de cet outil. Une fois la version installée, asdf place dans le PATH
un shim, un script intermédiaire qui intercepte l'appel à node ou
terraform et le redirige vers le binaire de la version active. Cette
indirection explique deux choses : pourquoi which node renvoie toujours un
chemin dans ~/.asdf/shims/, et pourquoi il faut parfois regénérer les shims
après une installation.
asdf repose sur trois concepts clés :
| Concept | Description | Exemple |
|---|---|---|
| Plugin | Extension pour gérer un outil spécifique | asdf-nodejs, asdf-python |
| Shim | Wrapper qui redirige vers la bonne version | ~/.asdf/shims/node |
| Version | Instance installée d'un outil | nodejs 22.13.1 |
Comment asdf choisit la version ? (ordre de priorité)
- Variable d'environnement
ASDF_<TOOL>_VERSION - Fichier
.tool-versionsdans le répertoire courant - Fichier
.tool-versionsdans les répertoires parents (remontée) - Fichier
~/.tool-versions(version globale)
Où sont stockés les outils ?
~/.asdf/├── installs/ # Versions installées│ ├── nodejs/│ │ └── 22.13.1/│ └── python/│ └── 3.12.8/├── plugins/ # Plugins installés├── shims/ # Wrappers (à ajouter au PATH)└── .tool-versions # Versions globalesInstallation de asdf
Section intitulée « Installation de asdf »L'installation se déroule en deux temps : poser le binaire asdf, puis
modifier la configuration du shell pour que le répertoire des shims arrive
en tête du PATH. La seconde étape n'est pas facultative : sans elle, asdf
s'installe correctement mais aucune de vos commandes ne passe par lui. Sur
Linux, asdf se récupère sous forme de binaire précompilé, il n'y a ni dépôt
Git à cloner ni script à sourcer.
-
Télécharger le binaire
Fenêtre de terminal wget https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gztar -xvzf asdf-v0.18.0-linux-amd64.tar.gz -C ${HOME}/.local/binchmod +x ${HOME}/.local/bin/asdf -
Configurer le shell (Bash)
Fenêtre de terminal echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.bashrcecho '. <(asdf completion bash)' >> ~/.bashrcsource ~/.bashrc -
Configurer le shell (Zsh)
Fenêtre de terminal echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.zshrcmkdir -p "${ASDF_DATA_DIR:-$HOME/.asdf}/completions"asdf completion zsh > "${ASDF_DATA_DIR:-$HOME/.asdf}/completions/_asdf"Ajoutez cette ligne avant
autoload -Uz compinit && compinit:Fenêtre de terminal fpath=(${ASDF_DATA_DIR:-$HOME/.asdf}/completions $fpath) -
Vérifier l'installation
Fenêtre de terminal asdf --versionRésultat attendu :
asdf version v0.18.0
-
Installer avec Homebrew
Fenêtre de terminal brew install asdf -
Configurer le shell (Zsh - défaut macOS)
Fenêtre de terminal echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrcsource ~/.zshrc -
Vérifier l'installation
Fenêtre de terminal asdf --version
Commandes essentielles
Section intitulée « Commandes essentielles »Toutes les commandes suivent la même forme : un verbe (plugin, install,
list, set, current) suivi du nom de l'outil. Retenez surtout la
distinction entre install, qui télécharge une version sur le disque, et
set, qui désigne celle qui doit être active. Installer sans définir ne
change rien à ce que votre shell exécute.
Gérer les plugins
Section intitulée « Gérer les plugins »Un plugin ne s'ajoute qu'une fois par machine ; il est ensuite partagé par tous vos projets.
# Lister les plugins disponibles (700+)asdf plugin list all | head -20
# Ajouter un pluginasdf plugin add nodejsasdf plugin add pythonasdf plugin add golangasdf plugin add terraform
# Lister les plugins installésasdf plugin list
# Mettre à jour un pluginasdf plugin update nodejs
# Mettre à jour tous les pluginsasdf plugin update --all
# Supprimer un pluginasdf plugin remove nodejsInstaller des versions
Section intitulée « Installer des versions »Lancé sans argument, asdf install lit le .tool-versions du répertoire
courant et installe d'un coup tout ce que le projet réclame.
# Lister les versions disponiblesasdf list all nodejs | tail -10
# Installer une version spécifiqueasdf install nodejs 22.13.1asdf install python 3.12.8
# Installer la dernière version stableasdf install nodejs latest
# Lister les versions installéesasdf list nodejsDéfinir les versions actives
Section intitulée « Définir les versions actives »asdf set écrit dans le .tool-versions du répertoire courant, tandis que
--home écrit dans ~/.tool-versions ; ces deux fichiers sont du texte brut,
lisible et modifiable à la main.
# Version globale (pour tout le système)asdf set --home nodejs 22.13.1
# Version locale (pour le projet courant)cd mon-projetasdf set nodejs 20.18.0
# Vérifier la version activeasdf current nodejs
# Vérifier toutes les versions activesasdf currentDésinstaller
Section intitulée « Désinstaller »Désinstaller une version libère la place occupée sous ~/.asdf/installs/ ;
retirer le plugin supprime au passage toutes les versions de l'outil, sans
confirmation ni retour possible.
# Désinstaller une versionasdf uninstall nodejs 20.18.0
# Supprimer un plugin (et toutes ses versions)asdf plugin remove nodejsSynchroniser une équipe avec .tool-versions
Section intitulée « Synchroniser une équipe avec .tool-versions »Le fichier .tool-versions est la clé pour garantir des environnements
identiques. Placez-le à la racine de votre projet et committez-le.
nodejs 22.13.1python 3.12.8terraform 1.9.8kubectl 1.31.4Workflow équipe :
-
Cloner le projet
Fenêtre de terminal git clone https://github.com/mon-org/mon-projet.gitcd mon-projet -
Installer les plugins nécessaires
Fenêtre de terminal # Script d'installation automatiquefor plugin in $(cut -d' ' -f1 .tool-versions); doasdf plugin add "$plugin" 2>/dev/null || truedone -
Installer toutes les versions
Fenêtre de terminal asdf installCette commande lit
.tool-versionset installe toutes les versions manquantes. -
Vérifier
Fenêtre de terminal asdf current
Astuces et bonnes pratiques
Section intitulée « Astuces et bonnes pratiques »Ces recettes ne font pas partie d'asdf : ce sont des scripts et des alias à poser dans votre configuration de shell. Elles répondent aux besoins qui apparaissent une fois asdf adopté sur plusieurs projets : maintenir les outils à jour, comprendre pourquoi telle version est active, et rejouer sa configuration sur une machine neuve.
Mettre à jour tous vos outils en une commande
Section intitulée « Mettre à jour tous vos outils en une commande »Cette boucle installe la dernière version de chaque plugin puis la déclare
comme version globale ; elle ne touche pas aux .tool-versions de vos
projets.
for tool in $(asdf plugin list); do latest=$(asdf latest "$tool" 2>/dev/null) if [[ -n "$latest" ]]; then asdf install "$tool" "$latest" \ && asdf set --home "$tool" "$latest" \ && echo "✅ $tool → $latest" fidoneVérifier les mises à jour disponibles
Section intitulée « Vérifier les mises à jour disponibles »asdf latest --all compare la dernière version publiée de chaque plugin à ce
qui est présent sur la machine, sans rien installer.
asdf latest --allRésultat :
golang 1.23.5 installedhelm 3.17.1 missingk9s 0.32.7 missingnodejs 23.7.0 missingpython 3.13.2 missingCréer un alias pour les commandes fréquentes
Section intitulée « Créer un alias pour les commandes fréquentes »Ajoutez à votre .bashrc ou .zshrc :
# Installer la dernière version d'un outilalias asdf-latest='asdf install $1 latest && asdf set --home $1 latest'
# Nettoyer les anciennes versionsasdf-cleanup() { for plugin in $(asdf plugin list); do versions=$(asdf list "$plugin" 2>/dev/null | wc -l) if [[ $versions -gt 1 ]]; then echo "🧹 $plugin a $versions versions installées" fi done}Sauvegarder votre configuration globale
Section intitulée « Sauvegarder votre configuration globale »Le fichier ~/.tool-versions est du texte brut : le copier dans vos dotfiles
suffit à reconstituer l'outillage complet ailleurs.
# Exporter vos versions globalescp ~/.tool-versions ~/dotfiles/.tool-versions
# Sur une nouvelle machinecp ~/dotfiles/.tool-versions ~/.tool-versionsfor plugin in $(cut -d' ' -f1 ~/.tool-versions); do asdf plugin add "$plugin"doneasdf installDéboguer les problèmes de version
Section intitulée « Déboguer les problèmes de version »asdf current indique non seulement la version retenue mais aussi le fichier
qui l'a décidée, ce qui résout la majorité des cas où la mauvaise version est
active.
# Voir quelle version est utilisée et pourquoiasdf current nodejs# → nodejs 22.13.1 /home/user/projet/.tool-versions
# Voir où est installé un outilasdf where nodejs 22.13.1# → /home/user/.asdf/installs/nodejs/22.13.1
# Vérifier le shimwhich node# → /home/user/.asdf/shims/nodeMigrer depuis d'autres gestionnaires
Section intitulée « Migrer depuis d'autres gestionnaires »La migration se fait outil par outil, sans période de bascule risquée. Le
principe reste identique : relever la version actuellement utilisée, la
réinstaller sous asdf, puis retirer l'ancien gestionnaire du shell. Tant que
les lignes de nvm ou pyenv subsistent dans votre .bashrc, elles
placent leur propre répertoire avant les shims dans le PATH et
court-circuitent asdf.
Depuis nvm (Node.js)
Section intitulée « Depuis nvm (Node.js) »nvm réécrit le PATH à chaque changement de version : supprimer ses lignes du
fichier de configuration du shell compte autant que supprimer ~/.nvm.
# 1. Exporter la version actuellenode_version=$(node --version | sed 's/v//')
# 2. Installer le plugin asdfasdf plugin add nodejs
# 3. Installer la même versionasdf install nodejs "$node_version"asdf set --home nodejs "$node_version"
# 4. Désinstaller nvmrm -rf ~/.nvm# Supprimer les lignes nvm de ~/.bashrc ou ~/.zshrcDepuis pyenv (Python)
Section intitulée « Depuis pyenv (Python) »Comme pyenv, asdf compile Python localement ; les dépendances de compilation listées dans la section dépannage restent donc indispensables.
# 1. Exporter la version actuellepython_version=$(python --version | cut -d' ' -f2)
# 2. Installer le plugin asdfasdf plugin add python
# 3. Installer la même versionasdf install python "$python_version"asdf set --home python "$python_version"
# 4. Désinstaller pyenvrm -rf ~/.pyenv# Supprimer les lignes pyenv de ~/.bashrc ou ~/.zshrcPlugins populaires DevOps
Section intitulée « Plugins populaires DevOps »Voici les plugins que l'on croise le plus souvent dans une configuration DevOps. Ils s'ajoutent tous de la même façon et sont référencés par le dépôt d'index asdf-plugins, qui ne fait que pointer vers le dépôt Git réel de chaque plugin. Vérifiez cette origine avant d'ajouter un plugin : son code s'exécutera sur votre machine avec vos droits.
| Plugin | Commande d'installation | Usage |
|---|---|---|
| nodejs | asdf plugin add nodejs | Runtime JavaScript |
| python | asdf plugin add python | Scripting, ML, automation |
| golang | asdf plugin add golang | CLI tools, microservices |
| terraform | asdf plugin add terraform | Infrastructure as Code |
| kubectl | asdf plugin add kubectl | Gestion Kubernetes |
| helm | asdf plugin add helm | Charts Kubernetes |
| awscli | asdf plugin add awscli | CLI Amazon Web Services |
| gcloud | asdf plugin add gcloud | CLI Google Cloud |
Dépannage
Section intitulée « Dépannage »La plupart des incidents avec asdf viennent du PATH ou d'un plugin périmé,
rarement d'asdf lui-même. Le premier réflexe consiste à vérifier que
~/.asdf/shims figure bien dans le PATH et qu'il y arrive avant les
répertoires système comme /usr/bin.
Le shim ne trouve pas la bonne version
Section intitulée « Le shim ne trouve pas la bonne version »asdf reshim recrée les scripts intermédiaires ; l'opération est nécessaire
après l'installation d'un paquet qui pose ses propres exécutables, par exemple
un npm install -g.
# Régénérer les shimsasdf reshim
# Vérifier que les shims sont dans le PATHecho $PATH | tr ':' '\n' | grep asdfErreur "No version set for command"
Section intitulée « Erreur "No version set for command" »Ce message signale qu'aucun .tool-versions applicable ne mentionne l'outil :
définissez une version globale, qui servira de valeur de repli.
# Définir une version globale par défautasdf set --home nodejs latestPlugin qui ne se met pas à jour
Section intitulée « Plugin qui ne se met pas à jour »Un plugin est un dépôt Git : quand sa mise à jour échoue, le retirer puis le rajouter le reclone proprement, sans toucher aux versions déjà installées.
# Erreur courante avec nodejs# /home/bob/.asdf/plugins/nodejs/bin/../lib/utils.sh: line 27: HOME: unbound variable
# Solution : mettre à jour le plugin manuellementasdf plugin remove nodejsasdf plugin add nodejsProblème de dépendances (Python, Ruby)
Section intitulée « Problème de dépendances (Python, Ruby) »Certains plugins nécessitent des dépendances système :
# Pour Python (compilation)sudo apt install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev libffi-dev
# Pour Rubysudo apt install autoconf bison build-essential libssl-dev \ libyaml-dev libreadline-dev zlib1g-dev libncurses5-devÀ retenir
Section intitulée « À retenir »| Concept | Commande / Fichier |
|---|---|
| Ajouter un plugin | asdf plugin add <nom> |
| Installer une version | asdf install <nom> <version> |
| Version globale | asdf set --home <nom> <version> |
| Version locale (projet) | asdf set <nom> <version> |
| Fichier de config | .tool-versions |
| Voir la version active | asdf current |
Points clés :
- Un seul outil pour gérer tous vos runtimes et outils CLI
- Le fichier
.tool-versionssynchronise toute l'équipe - Priorité : local > parent > global
- Ne pas utiliser en CI/CD pour des raisons de sécurité
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »Les sources officielles à consulter pour approfondir et suivre les évolutions d'asdf.