# Skicka fil: lösenord genereras automatiskt, länk + lösenord visas $ 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 # Ladda ner: lösenord efterfrågas interaktivt $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
CLI:t krypterar, laddar upp, laddar ner och dekrypterar automatiskt. Servern ser aldrig ditt lösenord eller din okrypterade data.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# Ladda ner för din plattform från releases $ 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 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 1.6.0
# Generera lösenord automatiskt, standard-TTL 7d $ ttl send report.xlsx
Om inget lösenord anges i terminalen frågar CLI:t:
No password provided. Generate one? [Y/n]:
Tryck Enter eller skriv y för att generera automatiskt.
$ ttl send -p mySecretPass -t 1h document.pdf
# förbrukas i samma ögonblick som den första nedladdningen startar; efter ett avbrott kan bara den nedladdningen fortsätta $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # utgår om 5 minuter $ ttl send -t 30m meeting-link.txt # utgår om 30 minuter $ ttl send -t 6h backup.tar.gz # utgår om 6 timmar $ ttl send -t 1d daily-report.pdf # utgår om 1 dag $ ttl send -t 3d project-archive.zip # utgår om 3 dagar $ ttl send -t 5d design-assets.zip # utgår om 5 dagar $ ttl send report.xlsx # utgår om 7 dagar (standard)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
Lösenordet läses in säkert, det visas inte i terminalen. Det ursprungliga filnamnet återställs; om det namnet redan finns i utdatakatalogen sparas filen som name (1).ext i stället för att skriva över den.
# Du kan använda enbart den 10-siffriga token istället för den fullständiga URL:en $ ttl get aBcDeFgHiJ
$ ttl get -o ~/Downloads aBcDeFgHiJ
Som standard sparas filer i den aktuella katalogen. Använd -o / --output för att ange en annan katalog.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Du kan också ladda ner och dekryptera filer i webbläsaren genom att besöka länken direkt. Webbgränssnittet använder samma filformat och algoritmer (Argon2id, XChaCha20-Poly1305) och frågar efter ditt lösenord. Ingen programinstallation krävs.
Lösenordet används som ingångsvärde för krypteringsnyckeln. Det lämnar aldrig din enhet och skickas aldrig till servern. Det finns sex sätt att ange det:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mXq7Rt
Genererar ett kryptografiskt slumpmässigt 12-teckens lösenord från [0-9A-Za-z]. Endast tillgängligt vid send (interaktivt, eller automatiskt i --json-läge).
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
Lösenordet visas inte och sparas inte i skalhistoriken. Vid send väljer du först om det ska genereras automatiskt. Vid get uppmanas du direkt att ange det.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password syns i ps aux-utdata och kan sparas i skalhistoriken (~/.bash_history). Undvik i delade miljöer och skript. Använd --password-stdin eller --password-file istället.--password-stdin# Skicka via echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # Skicka från lösenordshanterare $ pass show ttl/key | ttl send --password-stdin data.zip # Skicka från miljövariabel $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # Heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Läser den första raden från stdin. Användbart i skript, CI/CD-pipelines och automatisering. Om stdin inte är en terminal och ingen lösenordskälla har angetts avslutas CLI:t med ett fel (förutom med --json, som automatiskt genererar ett lösenord).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Läser den första raden i filen (avslutande radbrytning tas bort). Kompatibelt med Docker Secrets (/run/secrets/), Vault-agentfiler och liknande mönster.
ttl.passwordOm inget explicit lösenord anges söker CLI efter en ttl.password-fil bredvid programfilen, sedan ~/.ttl/password. Första raden används som lösenord.
-p / --password, --password-stdin och --password-file kan inte kombineras. Den automatiskt upptäckta ttl.password-filen kontrolleras bara om ingen av dessa angivits. Minimilängd: 8 tecken.| Flagga | Beskrivning | Standard |
|---|---|---|
-p, --password P | Krypteringslösenord | interaktivt |
--password-stdin | Läs lösenord från stdin | |
--password-file F | Läs lösenord från fil | |
-t, --ttl DUR | Giltighetstid | 7d |
-b, --burn | Radera efter läsning (engångsnedladdning) | av |
-u, --uploader-only | Endast din egen API-nyckel kan ladda ner (Orbit; alias --private) | av |
--timeout DUR | Överföringstimeout | ingen |
--server URL | Server-URL | https://ttl.space |
-h3, --http3 | Försök HTTP/3 (QUIC), fallback till TCP | av |
--json | JSON-utdata till stdout (för skript och AI-agenter) | av |
| Flagga | Beskrivning | Standard |
|---|---|---|
-p, --password P | Dekrypteringslösenord | interaktivt |
--password-stdin | Läs lösenord från stdin | |
--password-file F | Läs lösenord från fil | |
-o, --output DIR | Utdatakatalog | aktuell katalog |
--timeout DUR | Överföringstimeout | ingen |
-h3, --http3 | Försök HTTP/3 (QUIC), fallback till TCP | av |
--json | JSON-utdata till stdout (för skript och AI-agenter) | av |
Gratis: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit lägger till: 14d 15d 28d 30d permanent
Standard: ingen. En överföring som stannar upp återupptas av sig själv och avbryts om den inte kommer vidare. Ange en gräns med --timeout 30m eller --timeout 2h.
#!/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 # Länken fungerar exakt en gång, upphör efter 5 minuter
# skicka: lösenord genereras automatiskt i JSON-läge $ 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"} # hämta $ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # fel returnerar ok:false {"ok":false,"error":"Link not found"}
I --json-läge är all utdata strukturerad JSON på stdout. Om inget lösenord anges vid sändning genereras ett automatiskt och inkluderas i svaret. Exitkod är 0 vid framgång, 1 vid fel.
Orbit ger tillgång till större filer (10 GB), längre lagring (30 dagar, eller permanent), filer endast för uppladdaren (bara din API-nyckel kan ladda ner dem) och filhantering (lista och radera). Fullständig jämförelse: Features.
API-nyckeln upptäcks automatiskt: miljövariabeln TTL_API_KEY, ttl.key bredvid programfilen eller ~/.ttl/key. Använd ttl activate för att spara nyckeln eller skriv den manuellt till någon av dessa platser.
# aktivera din nyckel: efterfrågas utan att visas, så den hamnar inte i skalhistoriken $ ttl activate Enter Orbit API key: ******** Orbit plan activated. Key saved to /usr/local/bin/ttl.key # icke-interaktivt: ttl activate --key-stdin | ttl activate --key-file F # kontrollera plan och användning $ 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 # skicka med förlängd TTL $ ttl send -t 30d large-backup.tar.gz # permanent fil (endast Orbit): ingen utgång, sparas tills du raderar den eller din prenumeration upphör $ ttl send -t permanent archive.tar.gz # skicka en privat fil: bara din API-nyckel kan ladda ner den (endast Orbit) $ ttl send -u payroll.xlsx # lista senaste uppladdningar $ 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 # radera en fil $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # ta bort sparad nyckel $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get eller --json-läge. Endpunkterna nedan är för Orbit-filhantering.$ 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} # nästa sida: endast när has_more är true; skicka med next_cursor från föregående svar $ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."
Returnerar filer uppladdade med denna nyckel, nyaste först, 20 per sida. När has_more är true innehåller svaret även next_cursor; skicka det som ?cursor= för att hämta nästa sida. Kräver Orbit-plan.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Returnerar 204 No Content vid framgång. Kräver Orbit-plan. Filen måste tillhöra denna nyckel.
| Status | Betydelse |
|---|---|
401 | Ogiltig eller utgången API-nyckel |
403 | Funktionen kräver Orbit-plan |
404 | Filen hittades inte eller tillhör inte denna nyckel |
429 | Förfrågningsgräns överskriden |
500 | Internt serverfel, försök igen senare |
502 | Lagringen är tillfälligt otillgänglig, försök igen senare |
| Begränsning | Gratis | Orbit |
|---|---|---|
| Max filstorlek | 2 GB | 10 GB |
| Max TTL | 7 dagar | 30 dagar eller permanent |
| Uppladdningar per dag | 10 | Obegränsat |
| Uppladdningsvolym per dag (per IP) | 10 GB | Obegränsat |
| Samtidiga uppladdningar | 1 per IP | 1 per IP och per API-nyckel |
| Lagringskvot | ✗ | 500 GB |
| Fillista | ✗ | ✓ |
| Tidig borttagning | ✓ | ✓ |
| Filer endast för uppladdaren | ✗ | ✓ |
| Min lösenordslängd | 8 tecken | |
| Förfrågningar per IP | 30 per 10 sekunder | |
| Anslutningar per IP | 10 samtidiga | |
Filer krypteras på din enhet innan de laddas upp. Servern lagrar enbart chiffertext och kan inte dekryptera dina filer.
| Komponent | Algoritm / Värde |
|---|---|
| Nyckelhärledning | Argon2id (time=3, memory=64 MiB, parallelism=1) |
| Chiffer | XChaCha20-Poly1305 AEAD |
Varje ändring av chiffertexten leder till att dekrypteringen misslyckas. Servern verifierar att nedladdaren känner till rätt lösenord innan chiffertexten lämnas ut, med hjälp av en envägsttoken härledd från krypteringsnyckeln.