
Compartir secretos seguros y efímeros para desarrolladores.
Compartir secretos seguros y efímeros para desarrolladores.
Deja de pegar secretos en Slack. enseal hace que la vía segura sea más rápida que la insegura — comparte archivos .env y secretos a través de canales cifrados de un solo uso con un solo comando y sin configuración.```bash
$ enseal share .env Share code: 7-guitarist-revenge Secrets: 14 variables (staging) Expires: on first receive
$ enseal receive 7-guitarist-revenge ok: 14 secrets written to .env
## Instalación
### Desde crates.io```bash
cargo install enseal
git clone https://github.com/FlerAlex/enseal.git cd enseal cargo build --release
### Binarios precompilados
Descárgalos desde [GitHub Releases](https://github.com/FlerAlex/enseal/releases) para Linux (x86_64, aarch64), macOS (Intel, Apple Silicon) y Windows.
## Inicio rápido
### Modo anónimo (sin configuración)
Comparte secretos usando un código de un solo uso. Sin llaves, sin cuentas — funciona de inmediato.```bash
# terminal 1 (sender)
enseal share .env
Share code: 7-guitarist-revenge
Secrets: 14 variables
Expires: on first receive
# terminal 2 (recipient) — enter the code
enseal receive 7-guitarist-revenge
ok: 14 secrets written to .env
También funciona con secretos individuales:```bash
echo "my-api-token" | enseal share --label "API key" Share code: 4-orbital-hammock
enseal receive 4-orbital-hammock my-api-token
Ambos terminales deben estar abiertos al mismo tiempo — el emisor espera hasta que el receptor se conecte.
### Modo de identidad (basado en claves, sin códigos)
Para equipos con confianza de claves establecida. Cifrar a un nombre, sin necesidad de coordinación.```bash
# one-time setup
enseal keys init
enseal keys export > my-key.pub # share this with teammates
enseal keys import teammate-key.pub # import theirs
# sender encrypts to recipient by name
enseal share .env --to sarah
# or push through the public relay (no codes at all)
enseal share .env --to sarah --relay wss://relay.enseal.dev
# or produce an encrypted file (no network)
enseal share .env --to sarah --output ./drop/
enseal inject 7-guitarist-revenge -- npm start
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up
enseal inject ./staging.env.age -- python manage.py runserver
Los secretos existen solo en la memoria del proceso hijo. Cuando este finaliza, desaparecen.
## Características
### Tres modos de compartir
**Modo anónimo** (predeterminado) — basado en wormhole, sin configuración. Solo necesitas un código legible por humanos. La autenticación mutua SPAKE2 previene ataques MITM.```bash
enseal share .env # generates wormhole code
enseal receive 7-guitarist-revenge # uses code
Con --relay, el modo anónimo omite wormhole y utiliza el transporte de retransmisión enseal en su lugar. Ambos lados deben usar el mismo relay:```bash
enseal share .env --relay ws://relay.internal:4443 # generates channel code
enseal receive 3421-amber-frost --relay ws://relay.internal:4443
**Async upload (`--upload`)** — solo para el remitente. Cifra localmente y publica en [burnurl.dev](https://burnurl.dev), devolviendo una URL autodestructiva que el destinatario abre en un navegador. No se requiere CLI en el lado del destinatario.```bash
enseal share .env --upload
# Secret URL: https://burnurl.dev/s/a3f9c2e1...
# Expires: 2026-03-08 19:42:00 UTC (24h)
# Reads: 1 (self-destructs on first open)
El destinatario abre la URL en cualquier navegador — no necesita instalar enseal. Agregue --passphrase para cifrar del lado del cliente antes de la subida (el servidor solo ve texto cifrado):```bash
enseal share .env --upload --passphrase # prompts for passphrase
enseal share .env --upload --ttl 4 # 4-hour TTL (max 24)
El acceso a la API requiere un plan Pro o Team en burnurl.dev. Configure `BURNURL_API_KEY` con su clave. Sobrescriba la URL base para instancias autoalojadas: `BURNURL_URL=https://burnurl.internal`.
**Modo de identidad** — cifrado de clave pública para compañeros de equipo conocidos. Cifre a un nombre.```bash
enseal keys init # one-time setup
enseal share .env --to sarah # encrypt to sarah's public key
Identity mode admite tres opciones de transporte:```bash
enseal share .env --to sarah
enseal share .env --to sarah --relay wss://relay.enseal.dev
enseal share .env --to sarah --output ./drop/
### Entrada Flexible
enseal acepta secretos de múltiples fuentes:```bash
# .env file (default)
enseal share .env
enseal share staging.env
# environment profile
enseal share --env staging # resolves to .env.staging
# pipe from stdin
echo "sk_live_abc123" | enseal share
cat secrets.env | enseal share
pass show stripe/key | enseal share --to sarah
# inline (careful — visible in shell history)
enseal share --secret "API_KEY=sk_live_abc123"
# wrap raw string as KEY=VALUE
echo "sk_live_abc123" | enseal share --as STRIPE_KEY
${VAR} las referencias se resuelven antes del envío, por lo que los destinatarios reciben valores completamente expandidos:```env
DB_HOST=postgres.internal
DB_PORT=5432
DATABASE_URL=postgres://user:pass@${DB_HOST}:${DB_PORT}/myapp
Admite la sintaxis de valor predeterminado `${VAR:-default}`. Las referencias circulares y hacia adelante se detectan y se rechazan. Use `--no-interpolate` para enviar la sintaxis literal `${VAR}`.
### Filtrado
Controla qué variables se envían:```bash
# exclude public/non-secret vars
enseal share .env --exclude "^PUBLIC_|^NEXT_PUBLIC_"
# send only matching vars
enseal share .env --include "^DB_|^API_"
# skip .env parsing entirely (send raw file)
enseal share .env --no-filter
La salida se adapta a lo enviado:```bash
enseal receive CODE ok: 14 secrets written to .env
enseal receive CODE --output staging.env
enseal receive CODE sk_live_abc123
enseal receive CODE --clipboard ok: copied to clipboard
enseal receive CODE --no-write
enseal receive ./staging.env.age ok: signature verified, file decrypted ok: 14 secrets written to .env
### Inject
Recibir secretos e inyectarlos directamente como variables de entorno en un proceso hijo. Los secretos nunca tocan el sistema de archivos.```bash
# anonymous mode: inject via wormhole code
enseal inject 7-guitarist-revenge -- npm start
# identity mode: listen for incoming transfer on relay
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up