# invia un file — password generata automaticamente, stampa link + password $ 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 # scarica — chiede la password in modo interattivo $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
La CLI gestisce crittografia, upload, download e decrittografia. Il server non vede mai la tua password né i dati in chiaro.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# scarica per la tua piattaforma dalla pagina delle release $ 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
# genera password automaticamente, TTL predefinito 7d $ ttl send report.xlsx
Quando non viene fornita una password nel terminale, la CLI chiede:
No password provided. Generate one? [Y/n]:
Premi Invio o digita y per generare automaticamente.
$ ttl send -p mySecretPass -t 1h document.pdf
# il file viene eliminato permanentemente dopo il primo download $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # scade in 5 minuti $ ttl send -t 30m meeting-link.txt # scade in 30 minuti $ ttl send -t 6h backup.tar.gz # scade in 6 ore $ ttl send -t 1d daily-report.pdf # scade in 1 giorno $ ttl send -t 3d project-archive.zip # scade in 3 giorni $ ttl send -t 5d design-assets.zip # scade in 5 giorni $ ttl send report.xlsx # scade in 7 giorni (predefinito)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
La password non viene mostrata nel terminale. Il nome del file originale viene preservato.
# puoi usare solo il token di 10 caratteri al posto dell'URL completo $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ ttl get -o ~/Downloads aBcDeFgHiJ
Per impostazione predefinita, i file vengono salvati nella directory corrente. Usa -o / --output per specificare una directory diversa.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Puoi anche scaricare e decrittografare i file nel browser visitando il link direttamente. L'interfaccia web utilizza la stessa libreria di crittografia e chiede la password. Non è necessaria l'installazione di software.
La password è il seme della chiave di crittografia. Non lascia mai il tuo dispositivo e non viene mai inviata al server. Ci sono cinque modi per fornirla:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
Genera una password crittograficamente casuale di 8 caratteri da [0-9A-Za-z]. Disponibile solo durante send in un terminale.
$ 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 password non viene mostrata. Durante send, prima scegli se generarla automaticamente. Durante get, il prompt viene mostrato direttamente.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password è visibile nell'output di ps aux e potrebbe essere salvata nella cronologia della shell (~/.bash_history). Evita l'uso in ambienti condivisi e negli script. Usa invece --password-stdin o --password-file.--password-stdin# pipe da echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # pipe da gestore di password $ pass show ttl/key | ttl send --password-stdin data.zip # pipe da variabile d'ambiente $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Legge la prima riga da stdin. Utile negli script, nelle pipeline CI/CD e nell'automazione. Se stdin non è un terminale e non è stata fornita alcuna fonte di password, il CLI termina con un errore (tranne con --json, che genera automaticamente una password).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Legge la prima riga del file (il ritorno a capo finale viene rimosso). Compatibile con i secret Docker (/run/secrets/), file dell'agente Vault e pattern simili.
ttl.passwordSe non viene fornita una password esplicita, la CLI cerca un file ttl.password accanto al binario, poi ~/.ttl/password. La prima riga viene usata come password.
-p / --password, --password-stdin e --password-file non possono essere combinati. Il file ttl.password rilevato automaticamente viene controllato solo quando nessuno di questi è fornito. Lunghezza minima: 8 caratteri.| Flag | Descrizione | Predefinito |
|---|---|---|
-p, --password P | Password di crittografia | interattivo |
--password-stdin | Legge la password dallo stdin | |
--password-file F | Legge la password da file | |
-t, --ttl DUR | Tempo di vita | 7d |
-b, --burn | Brucia dopo la lettura (download singolo) | disattivato |
--timeout DUR | Timeout del trasferimento | automatico |
--server URL | URL del server | https://ttl.space |
-h3, --http3 | Prova HTTP/3 (QUIC), fallback su TCP | disattivato |
--json | Output JSON su stdout (per script e agenti IA) | disattivato |
| Flag | Descrizione | Predefinito |
|---|---|---|
-p, --password P | Password di decrittografia | interattivo |
--password-stdin | Legge la password dallo stdin | |
--password-file F | Legge la password da file | |
-o, --output DIR | Directory di output | directory corrente |
--timeout DUR | Timeout del trasferimento | automatico |
-h3, --http3 | Prova HTTP/3 (QUIC), fallback su TCP | disattivato |
--json | Output JSON su stdout (per script e agenti IA) | disattivato |
Gratuito: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit aggiunge: 14d 15d 28d 30d
Predefinito: automatico — stimato dalla dimensione del file assumendo 1 Mbps + 2 minuti di margine (minimo 5 minuti). Sovrascrivere 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 # il link funziona una sola volta, scade in 5 minuti
# invio — password generata automaticamente in modalità JSON $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"} # download $ ttl --json get -p aB3kL9mX xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # gli errori restituiscono ok:false {"ok":false,"error":"Link not found"}
In modalità --json, tutto l'output è JSON strutturato su stdout. Se non viene fornita una password durante l'invio, ne viene generata una automaticamente e inclusa nella risposta. Il codice di uscita è 0 in caso di successo, 1 in caso di errore.
Orbit sblocca file più grandi (10 GB), conservazione più lunga (30 giorni) e gestione dei file (elenco ed eliminazione).
La chiave API viene rilevata automaticamente: variabile d'ambiente TTL_API_KEY, ttl.key accanto al binario o ~/.ttl/key. Usa ttl activate per salvare la chiave o scrivila manualmente in una di queste posizioni.
# attivare la chiave $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # verificare piano e utilizzo $ 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 # inviare con TTL esteso $ ttl send -t 30d large-backup.tar.gz # elencare i caricamenti recenti $ 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 # eliminare un file $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # rimuovere la chiave salvata $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get o la modalità --json. Gli endpoint seguenti sono per la gestione dei file 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}]}
Restituisce tutti i file caricati con questa chiave. Richiede il piano Orbit.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Restituisce 204 No Content in caso di successo. Richiede il piano Orbit. Il file deve appartenere a questa chiave.
| Stato | Significato |
|---|---|
401 | Chiave API non valida o scaduta |
403 | Funzione richiede piano Orbit |
404 | File non trovato o non appartenente a questa chiave |
429 | Limite richieste superato |
| Restrizione | Gratuito | Orbit |
|---|---|---|
| Dim. max file | 2 GB | 10 GB |
| TTL max | 7 giorni | 30 giorni |
| Caricamenti al giorno | 10 | 50 |
| Quota archiviazione | — | 250 GB |
| Elenco e eliminazione | — | ✓ |
| Lungh. min password | 8 caratteri | |
| Richieste per IP | 30 ogni 10 secondi | |
| Connessioni per IP | 10 simultanee | |
I file vengono crittografati sul tuo dispositivo prima dell'upload. Il server conserva solo il testo cifrato e non può decrittografare i tuoi file.
| Componente | Algoritmo / Valore |
|---|---|
| Derivazione chiave | Argon2id (time=3, memory=64 MB, parallelism=1) |
| Cifrario | XChaCha20-Poly1305 AEAD |
Qualsiasi modifica al testo cifrato causa il fallimento della decrittografia. Il server verifica che chi scarica conosca la password corretta prima di rilasciare il testo cifrato, utilizzando un token unidirezionale derivato dalla chiave di crittografia.