Ghid de utilizare

Română

Pornire rapidă

# Trimite fișier: parola este generată automat, link + parolă afișate
$ ttl send secret.pdf
No password provided. Generate one? [Y/n]:
Generated password: aB3kL9mXq7Rt
·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB)
IMPORTANT! Save your password — required to download and decrypt the file.
Password: aB3kL9mXq7Rt
https://ttl.space/aBcDeFgHiJ

# Descarcă: parola este cerută interactiv
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

CLI-ul criptează, încarcă, descarcă și decriptează automat. Serverul nu îți vede niciodată parola sau datele necriptate.

Instalare

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

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

Executabil precompilat

# Descarcă pentru platforma ta din pagina de versiuni
$ curl -Lo ttl.tar.gz \
  https://github.com/tweenietomatoes/ttl/releases/download/v1.6.0/ttl_1.6.0_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

Din sursă

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

Verificare

$ ttl version
ttl 1.6.0

Trimitere fișiere

Trimitere simplă

# Generare automată a parolei, TTL implicit 7 zile
$ ttl send report.xlsx

Dacă în terminal nu este furnizată o parolă, CLI-ul întreabă:

No password provided. Generate one? [Y/n]:

Apasă Enter sau scrie y pentru generare automată.

Parolă proprie

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

Distrugere după citire

# Fișierul este consumat în momentul în care începe prima descărcare; după o întrerupere, doar acea descărcare poate continua
$ ttl send -b photo.jpg

TTL personalizat

$ ttl send -t 5m temp-credentials.txt   # expiră în 5 minute
$ ttl send -t 30m meeting-link.txt      # expiră în 30 de minute
$ ttl send -t 6h backup.tar.gz          # expiră în 6 ore
$ ttl send -t 1d daily-report.pdf       # expiră într-o zi
$ ttl send -t 3d project-archive.zip    # expiră în 3 zile
$ ttl send -t 5d design-assets.zip      # expiră în 5 zile
$ ttl send report.xlsx                  # expiră în 7 zile (implicit)

Descărcare fișiere

Interactiv (terminal)

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Parola este citită în siguranță, nu este afișată în terminal. Numele original al fișierului este restaurat; dacă acest nume există deja în directorul de ieșire, fișierul este salvat ca name (1).ext în loc să îl suprascrie pe cel existent.

Doar token

# Poți folosi doar tokenul de 10 caractere în loc de URL-ul complet
$ ttl get aBcDeFgHiJ

Director de ieșire

$ ttl get -o ~/Downloads aBcDeFgHiJ

În mod implicit, fișierele sunt salvate în directorul curent. Folosește -o / --output pentru a specifica un alt director.

Cu opțiune de parolă

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

Browser

Poți descărca și decripta fișiere și în browser, vizitând linkul direct. Interfața web folosește același format de fișier și aceiași algoritmi (Argon2id, XChaCha20-Poly1305) și îți cere parola. Nu este necesară instalarea de software.

Gestionarea parolei

Parola este folosită pentru a deriva cheia de criptare. Nu îți părăsește niciodată dispozitivul și nu este trimisă niciodată către server. Există șase moduri de a o furniza:

1. Generare automată (doar la trimitere)

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: y
Generated password: aB3kL9mXq7Rt

Generează o parolă aleatoare din punct de vedere criptografic, de 12 caractere, din [0-9A-Za-z]. Disponibilă doar la send (interactiv sau automat în modul --json).

2. Introducere interactivă

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: n
Enter password: ********
Confirm password: ********

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********

Parola nu este afișată și nu se salvează în istoricul shell-ului. La send alegi mai întâi dacă să fie generată automat. La get ți se cere direct să o introduci.

3. Opțiune: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password este vizibil în ieșirea ps aux și poate fi salvat în istoricul shell-ului (~/.bash_history). Evită-l în medii partajate și în scripturi. În schimb, folosește --password-stdin sau --password-file în schimb.

4. Stdin: --password-stdin

# Trimite prin echo
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# Trimite dintr-un manager de parole
$ pass show ttl/key | ttl send --password-stdin data.zip

# Trimite dintr-o variabilă de mediu
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

# Heredoc
$ ttl send --password-stdin report.pdf <<<"mySecretPass"

Citește prima linie din stdin. Util în scripturi, pipeline-uri CI/CD și automatizare. Dacă stdin nu este un terminal și nu este furnizată o sursă de parolă, CLI-ul iese cu o eroare (cu excepția --json, care generează automat o parolă).

5. Fișier: --password-file

$ ttl send --password-file /run/secrets/key report.xlsx
$ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ

Citește prima linie a fișierului (caracterul de linie nouă final este eliminat). Compatibil cu Docker Secrets (/run/secrets/), fișierele Vault agent și modele similare.

6. Fișier detectat automat: ttl.password

Dacă nu este furnizată o parolă explicită, CLI-ul caută un fișier ttl.password lângă executabil, apoi ~/.ttl/password. Prima linie este folosită ca parolă.

Doar o singură sursă de parolă explicită poate fi folosită odată. -p / --password, --password-stdin și --password-file nu pot fi combinate. Fișierul ttl.password detectat automat este verificat doar dacă niciuna dintre acestea nu este specificată. Lungime minimă: 8 caractere.

Referință opțiuni

Opțiuni send

OpțiuneDescriereImplicit
-p, --password PParolă de criptareinteractiv
--password-stdinCitește parola de la stdin
--password-file FCitește parola dintr-un fișier
-t, --ttl DURDurată de valabilitate7d
-b, --burnDistrugere după citire (descărcare unică)oprit
-u, --uploader-onlyDoar propria ta cheie API poate descărca (Orbit; alias --private)oprit
--timeout DURTimeout pentru transferfără limită
--server URLURL-ul serveruluihttps://ttl.space
-h3, --http3Încearcă HTTP/3 (QUIC), cu revenire la TCPoprit
--jsonIeșire JSON la stdout (pentru scripturi și agenți AI)oprit

Opțiuni get

OpțiuneDescriereImplicit
-p, --password PParolă de decriptareinteractiv
--password-stdinCitește parola de la stdin
--password-file FCitește parola dintr-un fișier
-o, --output DIRDirector de ieșiredirectorul curent
--timeout DURTimeout pentru transferfără limită
-h3, --http3Încearcă HTTP/3 (QUIC), cu revenire la TCPoprit
--jsonIeșire JSON la stdout (pentru scripturi și agenți AI)oprit

Valori TTL

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

Orbit adaugă: 14d 15d 28d 30d permanent

Timeout

Implicit: fără limită. Un transfer care se blochează se reia singur și se oprește dacă nu mai poate continua. Setează o limită cu --timeout 30m sau --timeout 2h.

Exemple

Script: Backup și încărcare

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

Copiere link în clipboard (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Copiere link în clipboard (Linux)

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

Secret unic cu autodistrugere

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# Linkul funcționează exact o singură dată, expiră după 5 minute

Mod JSON (scripturi și agenți AI)

# trimitere: parola este generată automat în modul JSON
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"uploader_only":false,"is_permanent":false,"password":"aB3kL9mXq7Rt"}

# descărcare
$ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA
{"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"}

# erorile returnează ok:false
{"ok":false,"error":"Link not found"}

În modul --json toată ieșirea este JSON structurat la stdout. Dacă la trimitere nu este furnizată o parolă, una este generată automat și inclusă în răspuns. Codul de ieșire este 0 la succes, 1 la eroare.

Planul Orbit

Orbit oferă acces la fișiere mai mari (10 GB), păstrare mai îndelungată (30 de zile sau permanent), fișiere private (doar cheia ta API le poate descărca) și gestionare a fișierelor (listare și ștergere). Comparație completă: Features.

Cheia API este detectată automat: variabila de mediu TTL_API_KEY, ttl.key lângă executabil sau ~/.ttl/key. Folosește ttl activate pentru a salva cheia sau scrie-o manual într-una dintre aceste locații.

# activează cheia ta: este cerută fără a fi afișată, deci nu ajunge în istoricul shell-ului
$ ttl activate
Enter Orbit API key: ********
Orbit plan activated. Key saved to /usr/local/bin/ttl.key
# non-interactiv: ttl activate --key-stdin  |  ttl activate --key-file F

# verifică planul și utilizarea
$ ttl plan
Plan: orbit
Max file size: 10.0 GB
Max TTL: 30 days (or permanent)
Uploads per day: 1000000

Usage:
  Uploads today: 3
  Active storage: 1.2 GB / 500.0 GB

# trimite cu TTL extins
$ ttl send -t 30d large-backup.tar.gz
# fișier permanent (doar Orbit): fără expirare, păstrat până când îl ștergi sau până se încheie abonamentul
$ ttl send -t permanent archive.tar.gz
# trimite un fișier privat: doar cheia ta API îl poate descărca (doar Orbit)
$ ttl send -u payroll.xlsx

# listează încărcările recente
$ 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

# șterge un fișier
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# elimină cheia salvată
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

API HTTP

Încărcarea și descărcarea necesită pipeline-ul criptografic al CLI-ului (Argon2id + XChaCha20-Poly1305 + chunk-AEAD). Pentru scripturi, folosește ttl send / ttl get sau modul --json. Endpoint-urile de mai jos sunt pentru gestionarea fișierelor Orbit.

Listare fișiere (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,"uploader_only":false,"is_permanent":false,"is_note":false,"perm_grace_until":0}],"has_more":false}

# pagina următoare: doar când has_more este true; transmite next_cursor din răspunsul anterior
$ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."

Returnează fișierele încărcate cu această cheie, cele mai noi primele, câte 20 pe pagină. Când has_more este true, răspunsul include și next_cursor; transmite-l ca ?cursor= pentru a obține pagina următoare. Necesită planul Orbit.

Ștergere fișier (Orbit)

$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."

Returnează 204 No Content la succes. Necesită planul Orbit. Fișierul trebuie să aparțină acestei chei.

Răspunsuri de eroare

StatusSemnificație
401Cheie API nevalidă sau expirată
403Funcționalitatea necesită planul Orbit
404Fișierul nu a fost găsit sau nu aparține acestei chei
429Limita de cereri a fost depășită
500Eroare internă a serverului, încearcă din nou mai târziu
502Stocare temporar indisponibilă, încearcă din nou mai târziu

Limite

LimităGratuitOrbit
Dimensiune maximă a fișierului2 GB10 GB
TTL maxim7 zile30 de zile sau permanent
Încărcări pe zi10Nelimitat
Volum de încărcare pe zi (pe IP)10 GBNelimitat
Încărcări simultane1 pe IP1 pe IP și pe cheie API
Cotă de stocare✗500 GB
Listarea fișierelor✗✓
Ștergere anticipată✓✓
Fișiere private✗✓
Lungime minimă a parolei8 caractere
Cereri pe IP30 la 10 secunde
Conexiuni pe IP10 simultane

Criptare

Fișierele sunt criptate pe dispozitivul tău înainte de a fi încărcate. Serverul stochează doar text cifrat și nu poate decripta fișierele tale.

ComponentăAlgoritm / Valoare
Derivare cheieArgon2id (time=3, memory=64 MiB, parallelism=1)
CifruXChaCha20-Poly1305 AEAD

Orice modificare a textului cifrat duce la eșecul decriptării. Serverul verifică faptul că cel care descarcă cunoaște parola corectă înainte de a livra textul cifrat, prin intermediul unui token unidirecțional derivat din cheia de criptare.