
envsec v1.0.0-rc.2
Outil CLI sécurisé pour gérer les secrets d'environnement en utilisant les magasins d'identifiants natifs du système d'exploitation (macOS Keychain, Linux Secret Service, Windows Credential Manager)
envsec
Gestion sécurisée des secrets d'environnement à l'aide des magasins d'identifiants natifs du système d'exploitation.
Démo

Fonctionnalités
- Stockez les secrets dans le magasin d'identifiants natif de votre système d'exploitation (pas dans des fichiers en texte clair)
- Multiplateforme : macOS, Linux, Windows
- Organisez les secrets par contexte (par ex.
myapp.dev,stripe-api.prod,work.staging) - Suivez les métadonnées des secrets (noms de clés, horodatages) via SQLite
- Recherchez des contextes et des secrets avec des motifs glob
- Exécutez des commandes avec interpolation de secrets
- Enregistrez et réexécutez des commandes avec
cmd(rechercher, lister, exécuter, supprimer) - Exportez les secrets vers des fichiers
.env(avec suivi de génération viaaudit) - Exportez les secrets en tant que variables d'environnement du shell (
eval $(envsec env)) - Chargez les secrets depuis des fichiers
.env(avec détection de conflits) - Partagez des secrets chiffrés avec GPG pour les membres de l'équipe
- Interface terminal interactive (
envsec tui) pour gérer les secrets sans mémoriser les commandes
Paquets
Ceci est un monorepo contenant les paquets suivants :
| Paquet | Description | npm |
|---|---|---|
envsec | Outil CLI pour gérer les secrets | |
@envsec/sdk | SDK Node.js / Bun pour charger les secrets par programmation | |
@envsec/core | Moteur principal — adaptateurs de magasin d'identifiants du système d'exploitation + base de données de métadonnées | |
@envsec/tui | Interface terminal interactive pour la gestion des secrets |
Démarrage rapide du SDK
Pour un accès programmatique aux secrets depuis Node.js ou Bun, utilisez @envsec/sdk :
npm install @envsec/sdk
import { loadSecrets } from "@envsec/sdk";
// Load and inject into process.env
await loadSecrets({ context: "myapp.dev", inject: true });
// Or use the client for full control
import { EnvsecClient } from "@envsec/sdk";
const client = await EnvsecClient.create({ context: "myapp.dev" });
const apiKey = await client.get("api.key");
await client.close();
Consultez la documentation complète du SDK pour toutes les API, la prise en charge multi-contexte et les options.
Prérequis
- Node.js >= 22
macOS
Aucune dépendance supplémentaire. Utilise le Keychain intégré via l'outil CLI security.
Linux
Nécessite libsecret-tools (qui fournit la commande secret-tool), qui communique avec GNOME Keyring, KDE Wallet ou tout fournisseur de l'API Secret Service via D-Bus.
# Debian / Ubuntu
sudo apt install libsecret-tools
# Fedora
sudo dnf install libsecret
# Arch
sudo pacman -S libsecret
Une session D-Bus en cours d'exécution et un démon de trousseau de clés (par exemple gnome-keyring-daemon) doivent être actifs. La plupart des environnements de bureau gèrent cela automatiquement.
Windows
Aucune dépendance supplémentaire. Utilise le Gestionnaire d'informations d'identification Windows intégré via cmdkey et PowerShell.
Installation
Homebrew (macOS / Linux)
brew tap davidnussio/homebrew-tap
brew install envsec
npm
npm install -g envsec
npx (sans installation)
npx envsec
mise
mise use -g npm:envsec
Utilisation
La plupart des commandes nécessitent un contexte spécifié avec --context (ou -c). Un contexte est une étiquette libre pour regrouper les secrets — par exemple myapp.dev, stripe-api.prod, work.staging.
Options globales
Ces options sont disponibles sur toutes les commandes :
--context,-c— Nom du contexte (par exemplemyapp.dev,stripe-api.prod). Lit également la variable d'environnementENVSEC_CONTEXT--debug,-d— Activer la journalisation de débogage--json— Sortie au format JSON pour le scripting--db— Chemin vers le fichier de base de données SQLite (par défaut :~/.envsec/store.sqlite). Lit également la variable d'environnementENVSEC_DB
Chemin de base de données personnalisé
Par défaut, les métadonnées sont stockées dans ~/.envsec/store.sqlite. Vous pouvez remplacer cela avec --db ou la variable d'environnement ENVSEC_DB :
# Use a project-local database
envsec --db ./local-store.sqlite -c myapp.dev list
# Or via environment variable
export ENVSEC_DB=/shared/team/envsec.sqlite
envsec -c myapp.dev list
Le flag --db est prioritaire sur ENVSEC_DB. Les cas d'utilisation incluent des bases de données par projet, des bases de données partagées en équipe sur des lecteurs réseau, et des CI/CD avec stockage éphémère.
Ajouter un secret
Stockez un secret dans le magasin d'identifiants du système d'exploitation.
<key>— Nom de la clé du secret (par ex.api.key,db.password)--value,-v— Valeur à stocker (omettre pour une invite interactive masquée)--expires,-e— Durée d'expiration (par ex.30m,2h,7d,4w,3mo,1y)
# Store a value inline
envsec -c myapp.dev add api.key --value "sk-abc123"
# Or use the short alias
envsec -c myapp.dev add api.key -v "sk-abc123"
# Omit --value for an interactive masked prompt
envsec -c myapp.dev add api.key
# Set an expiry duration with --expires (-e)
envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d
# Supported duration units: m (minutes), h (hours), d (days), w (weeks), mo (months), y (years)
# Combinable: 1y6mo, 2w3d, 1d12h
envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo
Obtenir un secret
Récupérer une valeur secrète depuis le magasin d'identifiants du système d'exploitation.
<key>— Nom de la clé secrète à récupérer--quiet,-q— Afficher uniquement la valeur brute (sans avertissements ni sortie supplémentaire)--json— Sortie au format JSON (inclut context, key, value, expires_at)
envsec -c myapp.dev get api.key
# Print only the raw value (no warnings or extra output)
envsec -c myapp.dev get api.key --quiet
envsec -c myapp.dev get api.key -q
Supprimer un secret
Supprime un secret du magasin d'informations d'identification du système d'exploitation.
<key>— Nom de la clé du secret à supprimer (facultatif si--allest utilisé)--yes,-y— Ignorer l'invite de confirmation--all— Supprimer tous les secrets dans le contexte
envsec -c myapp.dev delete api.key
# or use the alias
envsec -c myapp.dev del api.key
Renommer un secret
Renommer une clé de secret dans le même contexte. La valeur et les métadonnées d'expiration sont préservées.
<old-key>— Nom actuel de la clé de secret<new-key>— Nouveau nom de la clé de secret--force,-f— Écraser la cible si elle existe déjà
# Rename a key
envsec -c myapp.dev rename old.key new.key
# Overwrite target if it already exists
envsec -c myapp.dev rename old.key existing.key --force
Lister tous les secrets dans un contexte
Lister toutes les clés de secrets et les métadonnées dans un contexte.
--json— Sortie au format JSON