kip
kip push .env devuelve un link que expira en una hora y se borra tras una lectura. Sin cuenta para enviar ni para recibir, self-hosted con un compose, y un binario estático de 8,7 MB para Linux, macOS y Windows.
El servidor que guarda tu .env no puede leerlo. Ni aunque quiera.
La clave de descifrado viaja detrás del # de la URL. Los navegadores no envían el fragment en la petición HTTP, y el CLI tampoco. Una base de datos robada entrega ciphertext y nada más.
Un push, un link, una lectura
Pulsa los pasos o deja que avance. Cada paso ilumina la pieza de la que habla.
Lo que ve quien envía. La línea del link se construye en el CLI, después de que el servidor haya devuelto el id.
Dos almacenes, un dominio, cero frameworks
Lo que hay detrás del link cuando se despliega de verdad. El servidor Go no lleva framework web; los secretos viven en Redis y los teams en SQLite.
Sin Redis, el servidor cae a un almacén en memoria para desarrollo. Sin proxy, docker-compose.yml publica el puerto 8080 en el host para probarlo en local.
El .env de staging cruza Slack sin quedarse en Slack
Un caso inventado con tiempos pequeños, para ver qué pasa en cada tramo. Los nombres son de ejemplo.
kip push .env.staging. El CLI genera la clave, cifra, sube el blob y recibe el id. Imprime el link con la clave detrás del #. El archivo en claro no ha salido de su disco.STRIPE_SECRET_KEY=sk_live… nunca pasó por Slack./api/v1/secret/h4l1…. El servidor entrega el ciphertext, descuenta la lectura y, al llegar a cero, borra el registro. El navegador descifra con la clave del fragment y muestra el archivo con un botón para descargarlo.kip revoke <link> elimina el secreto en el servidor. El link muere antes de la primera lectura.Cuatro veces en que la solución obvia estaba mal
Cada reto sigue el mismo patrón: lo que cualquiera haría primero, por qué no sirve, lo que se hizo y el número que lo demuestra. El detalle técnico queda plegado.
El núcleo aguantaba una revisión seria: crypto correcta, arquitectura limpia, tests reales. El README, no: documentaba un tier de "AI Security Scan", comandos como
diff e inbox y una página de precios con planes que no existían. Todo se recortó a lo real y el resto se movió a un Roadmap explícito antes de hacer público el repositorio.Un solo filtro: ¿esto le pide al receptor una cuenta, una instalación o un paso más?
Si la respuesta era sí, sobraba. kip vive entre "pegarlo en Slack" y "desplegar Vault", y cada pieza del stack se midió contra esa posición.
Profundizar
Se instala con install.sh, que detecta SO y arquitectura y descarga el archivo de la release, o con go install github.com/kipenv/kip/cmd/kip@latest. El middleware es propio: logger, CORS y un rate limiter por IP de token bucket, 30 peticiones por minuto por defecto.
Profundizar
Los teams funcionan como lobbies: uno crea, comparte el invite code, los demás se unen. Sin registro, sin roles, sin panel. La API ya implementa compartir a nivel de team, inbox, audit log y un env "oficial" pineado por proyecto, con tests. El CLI todavía no expone esos endpoints; es el primer punto del roadmap.
CGO_ENABLED=0 sobre mattn/go-sqlite3: compilaba y crasheaba al abrir la base de datos. Hoy GoReleaser publica solo el CLI.SubtleCrypto y nada más. Astro deja la landing como HTML y Vue entra solo donde hay que descifrar.Profundizar
Se apunta el CLI al servidor propio con kip config set --server o se corre en local con el compose de desarrollo. Cuando exista una instancia pública será una opción, no el default.
.env, MIT. Para equipos que quieren que el secreto desaparezca sin levantar infraestructura.Cinco decisiones que hoy tomaría al revés
Recap
# y el protocolo HTTP no la envía. El servidor guarda ciphertext; una base de datos robada no sirve de nada.