stackpick
v0.1.0
Published
Interactive CLI to install your dev stack (Node, pnpm, Git, VS Code, Cursor, Claude Code, Zed, Raycast…) with the right package manager for macOS, Windows & Linux.
Maintainers
Readme
stackpick
CLI interactif pour installer ton environnement de dev — choisis tes outils, stackpick s'occupe d'utiliser le bon gestionnaire de paquets selon ton OS (macOS, Windows, Linux) et la dernière version.
npx stackpickUn menu interactif s'affiche, regroupé par catégorie. Coche ce que tu veux, valide, c'est installé.
✨ Pourquoi
Réinstaller sa machine de dev, c'est une heure perdue à copier-coller des commandes brew install / winget install / curl … | sh. stackpick rassemble 49 outils avec, pour chacun, la meilleure méthode d'installation officielle vérifiée sur chaque plateforme, et te laisse choisir d'un clic.
- 🖱️ Sélection interactive par catégories (propulsée par @clack/prompts).
- 🧠 Détection de l'OS et de l'architecture (Intel / Apple Silicon, x64 / arm64).
- 📦 Hybride « gestionnaire d'abord » : Homebrew sur macOS, winget/Scoop sur Windows, apt/dnf/pacman sur Linux, avec repli automatique sur les scripts officiels ou le téléchargement direct.
- ⚡ Rapide : les outils déjà présents sont détectés et ignorés ; installations parallélisées quand c'est sûr.
- 🧪 Sans surprise :
--dry-runaffiche exactement les commandes qui seront lancées.
🚀 Installation & usage
Aucune installation requise :
npx stackpick # menu interactifOu en global :
npm install -g stackpick
stackpickOptions
| Option | Description |
|---|---|
| -a, --all | Installe tout le catalogue compatible avec ton OS |
| -o, --only <ids> | IDs séparés par des virgules (ex : node,git,vscode) |
| -c, --category <noms> | Filtre par catégories (ex : editeurs,ia) |
| -y, --yes | Pas de confirmation |
| --dry-run | Affiche les commandes sans rien installer |
| --force | Réinstalle même si déjà présent |
| --concurrency <n> | Nombre d'installations en parallèle |
| --no-detect | Ne pré-détecte pas les outils déjà installés |
| -l, --list | Affiche le catalogue puis quitte |
| -v, --version | Version |
Exemples
stackpick --only node,pnpm,git,vscode,claude-code # une stack précise
stackpick --category "Outils IA" --yes # toute une catégorie
stackpick --all --dry-run # voir ce qui serait installé
stackpick --list # lister le catalogue📦 Catalogue (49 outils)
✅ = installation supportée · — = pas de distribution officielle pour cet OS
Runtimes & gestionnaires de paquets
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| Node.js (node) | ✅ | ✅ | ✅ |
| pnpm (pnpm) | ✅ | ✅ | ✅ |
| Yarn (yarn) | ✅ | ✅ | ✅ |
| Bun (bun) | ✅ | ✅ | ✅ |
| Deno (deno) | ✅ | ✅ | ✅ |
| Git (git) | ✅ | ✅ | ✅ |
Langages & gestionnaires de versions
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| Python (CPython) (python) | ✅ | ✅ | ✅ |
| Go (Golang) (go) | ✅ | ✅ | ✅ |
| Rust (rustup) (rust) | ✅ | ✅ | ✅ |
| Java JDK (Temurin) (java) | ✅ | ✅ | ✅ |
| fnm (fnm) | ✅ | ✅ | ✅ |
| nvm (nvm) | ✅ | — | ✅ |
| pyenv (pyenv) | ✅ | ✅ | ✅ |
| Volta (volta) | ✅ | ✅ | ✅ |
Éditeurs & IDE
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| Visual Studio Code (vscode) | ✅ | ✅ | ✅ |
| Cursor (cursor) | ✅ | ✅ | ✅ |
| Zed (zed) | ✅ | ✅ | ✅ |
| Windsurf (windsurf) | ✅ | ✅ | ✅ |
| Sublime Text (sublime) | ✅ | ✅ | ✅ |
| Neovim (neovim) | ✅ | ✅ | ✅ |
| JetBrains Toolbox (jetbrains-toolbox) | ✅ | ✅ | ✅ |
Outils IA
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| OpenAI Codex CLI (codex) | ✅ | ✅ | ✅ |
| Claude Desktop (claude) | ✅ | ✅ | — |
| Claude Code CLI (claude-code) | ✅ | ✅ | ✅ |
| Aider (aider) | ✅ | ✅ | ✅ |
| Ollama (ollama) | ✅ | ✅ | ✅ |
| LM Studio (lm-studio) | ✅ | ✅ | ✅ |
| GitHub Copilot CLI (copilot-cli) | ✅ | ✅ | ✅ |
CLI essentiels
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| GitHub CLI (gh) | ✅ | ✅ | ✅ |
| jq (jq) | ✅ | ✅ | ✅ |
| ripgrep (ripgrep) | ✅ | ✅ | ✅ |
| fzf (fzf) | ✅ | ✅ | ✅ |
| Starship (starship) | ✅ | ✅ | ✅ |
| Oh My Zsh (oh-my-zsh) | ✅ | — | ✅ |
| Wget (wget) | ✅ | ✅ | ✅ |
Conteneurs, lanceurs & navigateur
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| Docker Desktop (docker) | ✅ | ✅ | ✅ |
| OrbStack (orbstack) | ✅ | — | — |
| Raycast (raycast) | ✅ | ✅ | — |
| Microsoft PowerToys (powertoys) | — | ✅ | — |
| Helium (helium) | ✅ | ✅ | ✅ |
Terminaux
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| Warp (warp) | ✅ | ✅ | ✅ |
| Ghostty (ghostty) | ✅ | — | ✅ |
| WezTerm (wezterm) | ✅ | ✅ | ✅ |
| Windows Terminal (windows-terminal) | — | ✅ | — |
Bases de données & API
| Outil | macOS | Windows | Linux |
|---|:--:|:--:|:--:|
| Postman (postman) | ✅ | ✅ | ✅ |
| Bruno (bruno) | ✅ | ✅ | ✅ |
| Insomnia (insomnia) | ✅ | ✅ | ✅ |
| TablePlus (tableplus) | ✅ | ✅ | ✅ |
| DBeaver Community (dbeaver) | ✅ | ✅ | ✅ |
⚙️ Comment ça marche
Pour chaque outil, le catalogue (src/catalog.json) décrit une stratégie d'installation par plateforme :
{
"id": "cursor",
"detect": "cursor --version || test -d /Applications/Cursor.app",
"macos": { "manager": "brew", "ref": "cursor", "cask": true },
"windows": { "manager": "winget", "ref": "Anysphere.Cursor" },
"linux": { "manager": "download", "ref": "https://www.cursor.com/download" }
}À l'exécution, stackpick :
- détecte ton OS/arch et les gestionnaires présents ;
- pour chaque outil sélectionné, lance
detectpour ignorer ce qui est déjà installé ; - exécute la stratégie principale (gestionnaire natif), avec repli automatique sur la stratégie secondaire (script officiel ou téléchargement) si le gestionnaire est absent ou échoue ;
- les ProductId du Microsoft Store (ex. Raycast) sont automatiquement routés vers
--source msstore.
Les installations qui requièrent
sudo(apt/dnf/pacman) ou une interaction GUI (.dmg, AppImage) sont gérées au mieux ; stackpick t'indique clairement ce qui reste à finaliser à la main.
🛠️ Développement
git clone https://github.com/Fazycks/stackpick.git
cd stackpick
npm install
npm run dev -- --list # exécuter en TS sans build (tsx)
npm run typecheck # tsc --noEmit
npm test # vitest
npm run build # bundle ESM via tsup -> dist/Stack : TypeScript · tsup · vitest · @clack/prompts · commander · execa.
Ajouter un outil
Ajoute une entrée dans src/catalog.json en suivant le type Tool de src/types.ts, puis npm test pour valider la structure. PRs bienvenues.
📄 Licence
MIT © Fazycks
