v0.10.0 Código abierto · MIT

El archivo .env es
un incidente de seguridad
esperando a pasar.

Envilder lee tus secretos directamente de AWS o Azure hacia tu app. Sin archivos, sin SaaS, sin filtraciones.

$ npm install -g envilder
# 1. Un modelo de mapeo para cada entorno $ cat envilder.json { "DB_PASSWORD": "/app/prod/db-pass", "API_KEY": "/app/prod/api-key" }   # 2. Resuelve secretos con la CLI $ envilder --map=envilder.json --envfile=.env   Obtenido DB_PASSWORD → ···pass Obtenido API_KEY → ···key Archivo de entorno escrito en .env   $
AWS SSM
Azure Key Vault
GitHub Actions
npm

Sponsors

Por qué la gestión de secretos está rota

Cada equipo, cada etapa, cada runtime gestiona los secretos de forma diferente. Sin estándar. Sin consistencia. Sin confianza.

💀

Fragmentada entre herramientas

El entorno local usa archivos .env. CI/CD lee de integraciones con vaults. Producción tiene su propio método. Misma app, diferentes flujos de configuración.

📨

Secretos compartidos por canales inseguros

Claves API enviadas por Slack, archivos .env en repositorios, páginas wiki con credenciales en texto plano. Un incidente de seguridad esperando a ocurrir.

🐌

El desfase de configuración es inevitable

Sin una fuente única de verdad sobre qué secretos necesita una app. Dev, staging y producción se desincronizan. Los despliegues fallan. Nadie sabe qué config es la correcta.

▼ envilder lo soluciona ▼
🛡️

Un modelo, una fuente de verdad

Un único archivo de mapeo define qué secretos necesita tu app. Versionado en Git. Revisable en PRs. El mismo contrato en cada entorno.

Resolución consistente en todas partes

CLI para desarrollo local, GitHub Action para CI/CD, SDKs de runtime para el inicio de la app. Mismo mapeo, mismo comportamiento, mismo resultado.

🤖

Tu nube, sin intermediarios

AWS SSM, Azure Key Vault o GCP. Sin proxy SaaS. Los secretos se quedan en tu infraestructura. Control de acceso nativo IAM/RBAC.

Hecho para equipos reales

Un sistema de resolución de configuración diseñado para seguridad, consistencia y ejecución multi-runtime.

📋

Modelo de mapeo único

Un contrato JSON define todos los secretos. Versionado en Git, revisable en PRs, comparable entre entornos. El modelo es el producto.

🔌

SDKs de runtime

Carga secretos directamente en memoria al iniciar la app: Python, .NET, Node.js, Go, Java. Sin archivos .env en disco. Sin secretos residuales.

☁️

Multi-Proveedor

AWS SSM, Azure Key Vault y GCP Secret Manager (próximamente). Tu nube, tus reglas. Sin dependencia de proveedor.

⚙️

GitHub Action

Obtiene secretos en workflows CI/CD. Mismo mapeo, cero intervención manual. Integración directa.

🔄

Sincronización bidireccional

Obtiene secretos en archivos .env o sube valores .env a tu proveedor en la nube. Soporte completo de ida y vuelta vía CLI.

🔒

Acceso IAM y RBAC

Control de acceso nativo de la nube. Las políticas IAM de AWS o RBAC de Azure definen quién lee qué. Sin capa de auth extra.

📊

Totalmente auditable

Cada lectura y escritura queda registrada en AWS CloudTrail o Azure Monitor. Trazabilidad completa de quién accedió a qué y cuándo.

🧱

Cero infraestructura

Sin servidores, sin proxies, sin SaaS. Construido sobre servicios nativos de la nube que ya usas y pagas.

👤

Soporte de perfiles AWS

¿Configuración multi-cuenta? Usa --profile para cambiar entre perfiles AWS CLI. Perfecto para entornos multi-etapa.

Cómo funciona

Define. Resuelve. Despliega.

PASO 01

Define el modelo de mapeo

Un archivo JSON que mapea nombres de variables de entorno a rutas de secretos en la nube. Haz commit. Revísalo en PRs. Compara entre entornos. Un modelo para cada etapa y runtime.

envilder.json json
{
  "DB_PASSWORD": "/my-app/prod/db-password",
  "API_KEY":     "/my-app/prod/api-key",
  "SECRET_TOKEN": "/my-app/prod/secret-token"
}
PASO 02

Resuelve con la CLI

Un comando obtiene cada secreto de tu vault en la nube y los escribe en .env. Úsalo localmente o en scripts. Mismo mapeo, mismo comportamiento.

terminal bash
$ envilder --map=envilder.json --envfile=.env

 Obtenido DB_PASSWORD ···word
 Obtenido API_KEY ···key
 Obtenido SECRET_TOKEN ···oken
 Archivo de entorno escrito en .env
PASO 03

Carga en runtime con SDKs

Sáltate el archivo .env por completo. Carga secretos directamente en tu aplicación al iniciar con SDKs nativos: Python, .NET, Node.js y más.

settings.py python
from envilder import Envilder

# One-liner: load secrets into os.environ
Envilder.load("envilder.json")

# Or resolve as a dict without injecting
secrets = Envilder.from_map_file("envilder.json").resolve()
Program.cs csharp
using Envilder;

// Load into IConfiguration
builder.Configuration.AddEnvilder("envilder.json");

// Or one-liner: resolve + inject into Environment
Env.Load("envilder.json");
config.ts typescript
import { Envilder } from '@envilder/sdk';

// One-liner: resolve + inject into process.env
await Envilder.load('envilder.json');

// Or resolve as a Map without injecting
const secrets = await Envilder.fromMapFile('envilder.json').resolve();
PASO 04

Push desde dev al vault

¿Necesitas añadir o rotar un secreto? Sube valores desde tu entorno local al proveedor en la nube. Sin necesidad de consola.

terminal bash
$ envilder --push --envfile=.env --map=envilder.json

 Subido DB_PASSWORD /my-app/prod/db-password
 Subido API_KEY /my-app/prod/api-key
 Subido SECRET_TOKEN /my-app/prod/secret-token
PASO 05

Los secretos se quedan en tu vault

Sin intermediarios. Tu nube gestiona el almacenamiento, la rotación y el control de acceso. Envilder resuelve, nunca almacena.

Míralo en acción

Mira cómo Envilder simplifica la gestión de secretos en menos de 2 minutos.

Tu nube. Tu elección.

Envilder funciona con AWS SSM Parameter Store, Azure Key Vault y GCP Secret Manager (próximamente). Configura en línea o con flags CLI.

AWS SSM Parameter Store

envilder.json json
{
  "$config": {
    "provider": "aws",
    "profile": "prod-account"
  },
  "DB_PASSWORD": "/my-app/prod/db-password",
  "API_KEY": "/my-app/prod/api-key"
}
$ envilder --map=envilder.json --envfile=.env
  • ✔ Soporte de GetParameter con WithDecryption
  • ✔ Soporte de perfil AWS para multi-cuenta
  • ✔ Control de acceso basado en políticas IAM
  • ✔ Registro de auditoría CloudTrail

Azure Key Vault

envilder.json json
{
  "$config": {
    "provider": "azure",
    "vaultUrl": "https://my-vault.vault.azure.net"
  },
  "DB_PASSWORD": "my-app-prod-db-password",
  "API_KEY": "my-app-prod-api-key"
}
$ envilder --provider=azure --vault-url=https://my-vault.vault.azure.net --map=envilder.json --envfile=.env
  • ✔ Auto-normaliza nombres de secretos (barras → guiones)
  • ✔ Autenticación DefaultAzureCredential
  • ✔ Control de acceso Azure RBAC
  • ✔ Registro de auditoría Azure Monitor

GCP Secret Manager

Próximamente
envilder.json json
{
  "$config": {
    "provider": "gcp",
    "projectId": "my-project-id"
  },
  "DB_PASSWORD": "my-app-prod-db-password",
  "API_KEY": "my-app-prod-api-key"
}
$ envilder --provider=gcp --map=envilder.json --envfile=.env
  • ✔ Integración con Google Cloud Secret Manager
  • ✔ Application Default Credentials (ADC)
  • ✔ Control de acceso basado en IAM
  • ✔ Cloud Audit Logs

SDKs en tiempo de ejecución

Carga secretos directamente en tu aplicación al arrancar. Sin archivos .env, sin intermediarios. Solo tu vault en la nube y tu código.

.NET .NET

Disponible

Integración nativa con IConfiguration. Resuelve secretos al arrancar.

Instalar

dotnet add package Envilder

Inicio rápido

Program.cs csharp
using Envilder;

var builder = WebApplication.CreateBuilder(args);

// Load secrets into IConfiguration
builder.Configuration.AddEnvilder("envilder.json");

// Register EnvilderClient in DI
builder.Services.AddEnvilder("envilder.json");

var app = builder.Build();

// --- Or standalone (no ASP.NET) ---

// One-liner: resolve + inject into Environment
Env.Load("envilder.json");

// Fluent builder with provider override
Env.FromMapFile("envilder.json")
    .WithProvider(SecretProviderType.Azure)
    .WithVaultUrl("https://my-vault.vault.azure.net")
    .Inject();

Python Python

Disponible

Carga secretos con una línea. Compatible con AWS SSM y Azure Key Vault.

Instalar

pip install envilder

Inicio rápido

settings.py python
from envilder import Envilder, SecretProviderType

# One-liner: load secrets into os.environ
Envilder.load("envilder.json")

# Or resolve as a dict without injecting
secrets = Envilder.resolve_file("envilder.json")

# Fluent builder with provider override
secrets = (
    Envilder.from_map_file("envilder.json")
    .with_provider(SecretProviderType.AZURE)
    .with_vault_url("https://my-vault.vault.azure.net")
    .inject()
)

Node.js Node.js

Disponible

Carga secretos directamente en Node.js. Mismo map-file, cero dependencias del CLI.

Instalar

npm install @envilder/sdk

Inicio rápido

config.ts typescript
import { Envilder, SecretProviderType } from '@envilder/sdk';

// One-liner: resolve + inject into process.env
await Envilder.load('envilder.json');

// Or resolve as a Map without injecting
const secrets = await Envilder.resolveFile('envilder.json');

// Fluent builder with provider override
const override = await Envilder.fromMapFile('envilder.json')
  .withProvider(SecretProviderType.Azure)
  .withVaultUrl('https://my-vault.vault.azure.net')
  .inject();

Go Go

Planificado

Carga ligera de secretos para servicios Go.

🚧

Próximamente

Java Java

Planificado

Soporte para Spring Boot y Java standalone.

🚧

Próximamente

GitHub Action

Obtén secretos en el momento del despliegue. Añádelo a cualquier workflow en minutos.

☁️ AWS SSM

.github/workflows/deploy.yml yaml
- name: 🪙 Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v6
  with:
    role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
    aws-region: us-east-1

- name: 🔐 Pull Secrets from AWS SSM
  uses: macalbert/envilder/github-action@v0
  with:
    map-file: envilder.json
    env-file: .env

🔑 Azure Key Vault

.github/workflows/deploy.yml yaml
- name: 🔑 Azure Login
  uses: azure/login@v2
  with:
    client-id: ${{ secrets.AZURE_CLIENT_ID }}
    tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: 🔐 Pull Secrets from Azure Key Vault
  uses: macalbert/envilder/github-action@v0
  with:
    map-file: envilder.json
    env-file: .env
    provider: azure
    vault-url: ${{ secrets.AZURE_KEY_VAULT_URL }}

Inputs de la Action

Input Requerido Descripción
map-file Ruta al archivo JSON que mapea variables de entorno a rutas de secretos
env-file Ruta al archivo .env a generar
provider No Proveedor en la nube: aws o azure (por defecto: aws)
vault-url No URL de Azure Key Vault

Output: env-file-path – Ruta al archivo .env generado

Qué viene ahora

Envilder se desarrolla activamente. Aquí es adónde vamos.

Descargar secretos a .env

Mapea nombres de variables de entorno a rutas de secretos en la nube vía JSON y genera archivos .env automáticamente

Modo push (--push)

Sube valores .env o secretos individuales al proveedor en la nube

GitHub Action

Usa Envilder en workflows CI/CD de forma nativa

Multi-proveedor (AWS + Azure)

Soporte de AWS SSM Parameter Store y Azure Key Vault

📖

Web de documentación

Web de docs dedicada con guías, ejemplos y referencia API

Python SDK (envilder)

Librería para Django/FastAPI/pipelines de datos. Publicado en PyPI

.NET SDK (Envilder)

Librería para apps enterprise y Azure-native. Publicado en NuGet

Node.js SDK (@envilder/sdk)

Librería nativa de ejecución: carga secretos directamente en process.env desde un map-file. Publicado en npm

🐹

Go SDK (envilder)

Próximamente

Librería para apps cloud-native y herramientas Kubernetes. Se publicará como módulo Go

Java SDK (envilder)

Próximamente

Librería para Spring Boot y backends Android. Se publicará en Maven Central

☁️

GCP Secret Manager

Tercer proveedor cloud. Completa el tridente multi-nube

Modo exec (--exec)

Inyecta secretos en un proceso hijo sin escribir a disco

🔐

AWS Secrets Manager

Soporte de secretos JSON junto a SSM Parameter Store

✔️

Modo check/sync (--check)

Valida secretos en la nube vs .env local. Falla CI si están desincronizados

Empieza ahora

En funcionamiento en menos de un minuto.

Prerrequisitos

  • Node.js v20+
  • AWS CLI configurado (para AWS SSM)
  • Azure CLI configurado (para Azure Key Vault)
  • Permisos IAM: ssm:GetParameter / ssm:PutParameter

Instalar

pnpm pnpm add -g envilder
npm npm install -g envilder
npx npx envilder --help

Inicio rápido

  1. Crea un envilder.json que mapee variables de entorno a rutas de secretos
  2. Ejecuta envilder --map=envilder.json --envfile=.env
  3. Tu archivo .env está listo ✔
# Instalar globalmente $ npm install -g envilder   # Crear archivo de mapeo $ echo '{"API_KEY": "/app/api-key"}' > envilder.json   # Obtener secretos $ envilder --map=envilder.json --envfile=.env   ¡Hecho! Archivo .env generado.   # Subir un secreto $ envilder --push --key=API_KEY --value=sk_live_abc123 --secret-path=/app/api-key   Secreto subido correctamente.
# Instalar el SDK $ pip install envilder   # Cargar secretos al iniciar from envilder import Envilder   Envilder.load("envilder.json")   # Los secretos ya están en os.environ db_pass = os.environ["DB_PASSWORD"]