# enviar un archivo — contraseña generada automáticamente, imprime enlace + contraseña $ ttl send secret.pdf No password provided. Generate one? [Y/n]: Generated password: aB3kL9mX ·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB) IMPORTANT! Save your password — required to download and decrypt the file. Password: aB3kL9mX https://ttl.space/aBcDeFgHiJ # descargar — solicita la contraseña de forma interactiva $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
El CLI se encarga del cifrado, la subida, la descarga y el descifrado. El servidor nunca ve tu contraseña ni tus datos en texto plano.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# descargar para tu plataforma desde las versiones publicadas $ curl -Lo ttl.tar.gz \ https://github.com/tweenietomatoes/ttl/releases/latest/download/ttl_linux_amd64.tar.gz $ tar xzf ttl.tar.gz && sudo mv ttl /usr/local/bin/
$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest
$ git clone https://github.com/tweenietomatoes/ttl $ cd ttl && go build -o ttl ./cmd/ttl/ $ sudo mv ttl /usr/local/bin/
$ ttl version ttl v1.3.0
# generar contraseña automáticamente, TTL predeterminado de 7d $ ttl send report.xlsx
Cuando no se proporciona contraseña en una terminal, el CLI pregunta:
No password provided. Generate one? [Y/n]:
Pulsa Enter o escribe y para generar automáticamente.
$ ttl send -p mySecretPass -t 1h document.pdf
# el archivo se elimina permanentemente después de la primera descarga $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # expira en 5 minutos $ ttl send -t 30m meeting-link.txt # expira en 30 minutos $ ttl send -t 6h backup.tar.gz # expira en 6 horas $ ttl send -t 1d daily-report.pdf # expira en 1 día $ ttl send -t 3d project-archive.zip # expira en 3 días $ ttl send -t 5d design-assets.zip # expira en 5 días $ ttl send report.xlsx # expira en 7 días (predeterminado)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
La contraseña no se muestra en la terminal. El nombre de archivo original se conserva.
# puedes usar solo el token de 10 caracteres en lugar de la URL completa $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ ttl get -o ~/Downloads aBcDeFgHiJ
Por defecto, los archivos se guardan en el directorio actual. Usa -o / --output para especificar otro directorio.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
También puede descargar y descifrar archivos en su navegador visitando el enlace directamente. La interfaz web usa la misma biblioteca de cifrado y solicita su contraseña. No se requiere instalación de software.
La contraseña es la semilla de la clave de cifrado. Nunca sale de tu dispositivo y nunca se envía al servidor. Hay cinco formas de proporcionarla:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
Genera una contraseña criptográficamente aleatoria de 8 caracteres del conjunto [0-9A-Za-z]. Solo disponible durante send en una terminal.
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
La contraseña no se muestra. Durante send, primero se ofrece la generación automática. Durante get, se solicita directamente.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password es visible en la salida de ps aux y puede guardarse en el historial del shell (~/.bash_history). Evita su uso en entornos compartidos y scripts. Usa --password-stdin o --password-file en su lugar.--password-stdin# pipe desde echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # pipe desde gestor de contraseñas $ pass show ttl/key | ttl send --password-stdin data.zip # pipe desde variable de entorno $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Lee la primera línea de stdin. Útil en scripts, pipelines de CI/CD y automatización. Cuando stdin no es una terminal y no se proporciona una fuente de contraseña, el CLI termina con un error (excepto con --json, que genera automáticamente una contraseña).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Lee la primera línea del archivo (el salto de línea final se elimina). Compatible con Docker secrets (/run/secrets/), archivos de Vault agent y patrones similares.
ttl.passwordSi no se proporciona una contraseña explícita, el CLI busca un archivo ttl.password junto al binario y luego ~/.ttl/password. Se usa la primera línea como contraseña.
-p / --password, --password-stdin y --password-file no se pueden combinar. El archivo ttl.password detectado automáticamente solo se verifica cuando no se proporciona ninguno de estos. Longitud mínima: 8 caracteres.| Flag | Descripción | Predeterminado |
|---|---|---|
-p, --password P | Contraseña de cifrado | interactivo |
--password-stdin | Leer contraseña de stdin | |
--password-file F | Leer contraseña de archivo | |
-t, --ttl DUR | Tiempo de vida | 7d |
-b, --burn | Destruir tras lectura (descarga única) | desactivado |
--timeout DUR | Tiempo de espera de transferencia | automático |
--server URL | URL del servidor | https://ttl.space |
-h3, --http3 | Intentar HTTP/3 (QUIC), volver a TCP | desactivado |
--json | Salida JSON en stdout (para scripts y agentes de IA) | desactivado |
| Flag | Descripción | Predeterminado |
|---|---|---|
-p, --password P | Contraseña de descifrado | interactivo |
--password-stdin | Leer contraseña de stdin | |
--password-file F | Leer contraseña de archivo | |
-o, --output DIR | Directorio de salida | directorio actual |
--timeout DUR | Tiempo de espera de transferencia | automático |
-h3, --http3 | Intentar HTTP/3 (QUIC), volver a TCP | desactivado |
--json | Salida JSON en stdout (para scripts y agentes de IA) | desactivado |
Gratis: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit añade: 14d 15d 28d 30d
Predeterminado: automático — estimado a partir del tamaño del archivo asumiendo 1 Mbps + 2 minutos de margen (mínimo 5 minutos). Se puede anular con --timeout 10m o --timeout 1h.
#!/bin/bash tar czf /tmp/backup.tar.gz /data echo "$BACKUP_KEY" | ttl send --password-stdin -t 6h /tmp/backup.tar.gz rm /tmp/backup.tar.gz
$ ttl send -p mypass123 file.pdf | pbcopy
$ ttl send -p mypass123 file.pdf | xclip -sel clip
$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env # el enlace funciona exactamente una vez, expira en 5 minutos
# envío — contraseña autogenerada en modo JSON $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"} # descarga $ ttl --json get -p aB3kL9mX xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # los errores devuelven ok:false {"ok":false,"error":"Link not found"}
En modo --json, toda la salida es JSON estructurado en stdout. Si no se proporciona contraseña durante el envío, se genera una automáticamente y se incluye en la respuesta. El código de salida es 0 en éxito y 1 en error.
Orbit desbloquea archivos más grandes (10 GB), mayor retención (30 días) y gestión de archivos (listar y eliminar).
La clave API se detecta automáticamente: variable de entorno TTL_API_KEY, ttl.key junto al binario o ~/.ttl/key. Use ttl activate para guardar la clave o escríbala manualmente en cualquiera de estas ubicaciones.
# activar su clave $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # verificar plan y uso $ ttl plan Plan: orbit Max file size: 10.0 GB Max TTL: 30 days Uploads per day: Unlimited Usage: Uploads today: 3 Active storage: 1.2 GB / 250.0 GB # enviar con TTL extendido $ ttl send -t 30d large-backup.tar.gz # listar subidas recientes $ ttl list xK9mQ2vLpA 4.2 MB 2026-03-16 10:30 → 2026-04-15 10:30 [active] https://ttl.space/xK9mQ2vLpA rT7bNw3KpF 912.0 KB 2026-03-15 14:20 → 2026-03-17 14:20 [active (burn)] https://ttl.space/rT7bNw3KpF # eliminar un archivo $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # eliminar la clave guardada $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get o el modo --json. Los endpoints a continuación son para la gestión de archivos Orbit.$ curl https://ttl.space/v1/files -H "X-API-Key: ttl_orbit_..." {"files":[{"token":"xK9mQ2vLpA","link":"https://ttl.space/xK9mQ2vLpA","size_bytes":1048576,"created_at":1711800600,"expires_at":1714392600,"burn":false,"expired":false}]}
Devuelve todos los archivos subidos con esta clave. Requiere plan Orbit.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Devuelve 204 No Content en caso de éxito. Requiere plan Orbit. El archivo debe pertenecer a esta clave.
| Estado | Significado |
|---|---|
401 | Clave API inválida o expirada |
403 | Función requiere plan Orbit |
404 | Archivo no encontrado o no pertenece a esta clave |
429 | Límite de solicitudes excedido |
| Restricción | Gratis | Orbit |
|---|---|---|
| Tamaño máx. | 2 GB | 10 GB |
| TTL máx. | 7 días | 30 días |
| Subidas por día | 10 | 50 |
| Cuota de almacenamiento | — | 250 GB |
| Listar y eliminar | — | ✓ |
| Longitud mín. contraseña | 8 caracteres | |
| Solicitudes por IP | 30 por 10 segundos | |
| Conexiones por IP | 10 simultáneas | |
Los archivos se cifran en tu dispositivo antes de subirlos. El servidor solo almacena texto cifrado y no puede descifrar tus archivos.
| Componente | Algoritmo / Valor |
|---|---|
| Derivación de clave | Argon2id (time=3, memory=64 MB, parallelism=1) |
| Cifrador | XChaCha20-Poly1305 AEAD |
Cualquier modificación del texto cifrado provoca que el descifrado falle. El servidor verifica que quien descarga conoce la contraseña correcta antes de entregar el texto cifrado, usando un token unidireccional derivado de la clave de cifrado.