Guida all'uso

← Home

Avvio rapido

# 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.

Installazione

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl
$ scoop install ttl

Binario precompilato

# 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

$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest

Da sorgente

$ git clone https://github.com/tweenietomatoes/ttl
$ cd ttl && go build -o ttl ./cmd/ttl/
$ sudo mv ttl /usr/local/bin/

Verifica

$ ttl version
ttl v1.3.0

Invio di file

Invio base

# 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.

Password personalizzata

$ ttl send -p mySecretPass -t 1h document.pdf

Brucia dopo la lettura

# il file viene eliminato permanentemente dopo il primo download
$ ttl send -b photo.jpg

TTL personalizzato

$ 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)

Download dei file

Interattivo (terminale)

$ 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.

Solo token

# 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)

Directory di output

$ ttl get -o ~/Downloads aBcDeFgHiJ

Per impostazione predefinita, i file vengono salvati nella directory corrente. Usa -o / --output per specificare una directory diversa.

Con flag password

$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ

Browser

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.

Gestione della password

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:

1. Generazione automatica (solo invio)

$ 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.

2. Prompt interattivo

$ 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.

3. Flag: -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.

4. Stdin: --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).

5. File: --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.

6. File rilevato automaticamente: ttl.password

Se 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.

È possibile utilizzare una sola fonte esplicita di password alla volta. -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.

Riferimento opzioni

Flag di invio

FlagDescrizionePredefinito
-p, --password PPassword di crittografiainterattivo
--password-stdinLegge la password dallo stdin
--password-file FLegge la password da file
-t, --ttl DURTempo di vita7d
-b, --burnBrucia dopo la lettura (download singolo)disattivato
--timeout DURTimeout del trasferimentoautomatico
--server URLURL del serverhttps://ttl.space
-h3, --http3Prova HTTP/3 (QUIC), fallback su TCPdisattivato
--jsonOutput JSON su stdout (per script e agenti IA)disattivato

Flag di download

FlagDescrizionePredefinito
-p, --password PPassword di decrittografiainterattivo
--password-stdinLegge la password dallo stdin
--password-file FLegge la password da file
-o, --output DIRDirectory di outputdirectory corrente
--timeout DURTimeout del trasferimentoautomatico
-h3, --http3Prova HTTP/3 (QUIC), fallback su TCPdisattivato
--jsonOutput JSON su stdout (per script e agenti IA)disattivato

Valori TTL

Gratuito: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d

Orbit aggiunge: 14d 15d 28d 30d

Timeout

Predefinito: automatico — stimato dalla dimensione del file assumendo 1 Mbps + 2 minuti di margine (minimo 5 minuti). Sovrascrivere con --timeout 10m o --timeout 1h.

Esempi

Script: backup e upload

#!/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

Copia il link negli appunti (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Copia il link negli appunti (Linux)

$ ttl send -p mypass123 file.pdf | xclip -sel clip

Brucia: segreto monouso

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# il link funziona una sola volta, scade in 5 minuti

Modalità JSON (script & agenti IA)

# 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.

Piano Orbit

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

HTTP API

Il caricamento e il download richiedono la pipeline di crittografia della CLI (Argon2id + XChaCha20-Poly1305 + AEAD a blocchi). Per gli script, usa ttl send / ttl get o la modalità --json. Gli endpoint seguenti sono per la gestione dei file Orbit.

Elenco 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.

Elimina file (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.

Risposte di errore

StatoSignificato
401Chiave API non valida o scaduta
403Funzione richiede piano Orbit
404File non trovato o non appartenente a questa chiave
429Limite richieste superato

Limiti

RestrizioneGratuitoOrbit
Dim. max file2 GB10 GB
TTL max7 giorni30 giorni
Caricamenti al giorno1050
Quota archiviazione250 GB
Elenco e eliminazione
Lungh. min password8 caratteri
Richieste per IP30 ogni 10 secondi
Connessioni per IP10 simultanee

Crittografia

I file vengono crittografati sul tuo dispositivo prima dell'upload. Il server conserva solo il testo cifrato e non può decrittografare i tuoi file.

ComponenteAlgoritmo / Valore
Derivazione chiaveArgon2id (time=3, memory=64 MB, parallelism=1)
CifrarioXChaCha20-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.