Anleitung

← Home

Schnellstart

# Datei senden — Passwort wird automatisch generiert, Link + Passwort werden ausgegeben
$ 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

# Herunterladen — Passwort wird interaktiv abgefragt
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

Das CLI verschlüsselt, lädt hoch, lädt herunter und entschlüsselt automatisch. Der Server sieht weder Ihr Passwort noch Ihre Klartextdaten.

Installation

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

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

Vorkompilierte Datei

# Für Ihre Plattform von den Releases herunterladen
$ 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

Aus dem Quellcode

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

Überprüfen

$ ttl version
ttl v1.3.0

Dateien senden

Einfaches Senden

# Passwort automatisch generieren, Standard-TTL 7d
$ ttl send report.xlsx

Wenn im Terminal kein Passwort angegeben wird, fragt das CLI:

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

Drücken Sie Enter oder geben Sie y ein, um automatisch zu generieren.

Eigenes Passwort

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

Nach dem Lesen löschen

# Datei wird nach dem ersten Download endgültig gelöscht
$ ttl send -b photo.jpg

Benutzerdefinierte TTL

$ ttl send -t 5m temp-credentials.txt   # läuft in 5 Minuten ab
$ ttl send -t 30m meeting-link.txt      # läuft in 30 Minuten ab
$ ttl send -t 6h backup.tar.gz          # läuft in 6 Stunden ab
$ ttl send -t 1d daily-report.pdf       # läuft in 1 Tag ab
$ ttl send -t 3d project-archive.zip    # läuft in 3 Tagen ab
$ ttl send -t 5d design-assets.zip      # läuft in 5 Tagen ab
$ ttl send report.xlsx                  # läuft in 7 Tagen ab (Standard)

Dateien herunterladen

Interaktiv (Terminal)

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

Das Passwort wird sicher eingelesen — es wird nicht im Terminal angezeigt. Der ursprüngliche Dateiname wird wiederhergestellt.

Nur mit Token

# Sie können nur den 10-stelligen Token anstelle der vollständigen URL verwenden
$ ttl get aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Ausgabeverzeichnis

$ ttl get -o ~/Downloads aBcDeFgHiJ

Standardmäßig werden Dateien im aktuellen Verzeichnis gespeichert. Verwenden Sie -o / --output, um ein anderes Verzeichnis anzugeben.

Mit Passwort-Flag

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

Browser

Sie können Dateien auch direkt im Browser herunterladen und entschlüsseln, indem Sie den Link besuchen. Die Weboberfläche verwendet dieselbe Verschlüsselungsbibliothek und fragt nach Ihrem Passwort. Keine Softwareinstallation erforderlich.

Passwort-Verwaltung

Das Passwort dient als Ausgangswert für den Verschlüsselungsschlüssel. Es verlässt niemals Ihr Gerät und wird niemals an den Server gesendet. Es gibt fünf Möglichkeiten, es anzugeben:

1. Automatisch generieren (nur beim Senden)

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

Generiert ein kryptografisch zufälliges 8-Zeichen-Passwort aus [0-9A-Za-z]. Nur beim send im Terminal verfügbar.

2. Interaktive Eingabe

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

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

Das Passwort wird nicht angezeigt und nicht in der Shell-Historie gespeichert. Beim send wählen Sie zuerst, ob automatisch generiert werden soll. Beim get werden Sie direkt zur Eingabe aufgefordert.

3. Flag: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password ist in der ps aux-Ausgabe sichtbar und kann in der Shell-Historie (~/.bash_history) gespeichert werden. Vermeiden Sie dies in gemeinsam genutzten Umgebungen und Skripten. Verwenden Sie stattdessen --password-stdin oder --password-file.

4. Stdin: --password-stdin

# Per echo weiterleiten
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# Aus dem Passwort-Manager weiterleiten
$ pass show ttl/key | ttl send --password-stdin data.zip

# Aus einer Umgebungsvariable weiterleiten
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

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

Liest die erste Zeile von stdin. Nützlich in Skripten, CI/CD-Pipelines und Automatisierung. Wenn stdin kein Terminal ist und keine Passwortquelle angegeben wurde, beendet sich das CLI mit einem Fehler (außer bei --json, das automatisch ein Passwort generiert).

5. Datei: --password-file

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

Liest die erste Zeile der Datei (abschließendes Zeilenumbruchzeichen wird entfernt). Kompatibel mit Docker Secrets (/run/secrets/), Vault-Agent-Dateien und ähnlichen Mustern.

6. Automatisch erkannte Datei: ttl.password

Wenn kein explizites Passwort angegeben wird, sucht die CLI nach einer ttl.password-Datei neben der Programmdatei und dann nach ~/.ttl/password. Die erste Zeile wird als Passwort verwendet.

Es kann jeweils nur eine explizite Passwortquelle verwendet werden. -p / --password, --password-stdin und --password-file können nicht kombiniert werden. Die automatisch erkannte ttl.password-Datei wird nur geprüft, wenn keine davon angegeben ist. Mindestlänge: 8 Zeichen.

Optionen-Referenz

Send-Flags

FlagBeschreibungStandard
-p, --password PVerschlüsselungspasswortinteraktiv
--password-stdinPasswort von stdin lesen
--password-file FPasswort aus Datei lesen
-t, --ttl DURGültigkeitsdauer7d
-b, --burnNach dem Lesen löschen (einmaliger Download)aus
--timeout DURÜbertragungstimeoutauto
--server URLServer-URLhttps://ttl.space
-h3, --http3HTTP/3 (QUIC) versuchen, Fallback auf TCPaus
--jsonJSON-Ausgabe auf stdout (für Skripte und KI-Agenten)aus

Get-Flags

FlagBeschreibungStandard
-p, --password PEntschlüsselungspasswortinteraktiv
--password-stdinPasswort von stdin lesen
--password-file FPasswort aus Datei lesen
-o, --output DIRAusgabeverzeichnisaktuelles Verzeichnis
--timeout DURÜbertragungstimeoutauto
-h3, --http3HTTP/3 (QUIC) versuchen, Fallback auf TCPaus
--jsonJSON-Ausgabe auf stdout (für Skripte und KI-Agenten)aus

TTL-Werte

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

Orbit zusätzlich: 14d 15d 28d 30d

Timeout

Standard: auto — geschätzt anhand der Dateigröße bei angenommenen 1 Mbps + 2 Minuten Puffer (Minimum 5 Minuten). Überschreiben mit --timeout 10m oder --timeout 1h.

Beispiele

Skript: Backup und 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

Link in die Zwischenablage kopieren (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Link in die Zwischenablage kopieren (Linux)

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

Einmal-Geheimnis mit Selbstlöschung

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# Link funktioniert genau einmal, läuft nach 5 Minuten ab

JSON-Modus (Skripte & KI-Agenten)

# Senden — Passwort wird im JSON-Modus automatisch generiert
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"}

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

# Fehler geben ok:false zurück
{"ok":false,"error":"Link not found"}

Im --json-Modus erfolgt die gesamte Ausgabe als strukturiertes JSON auf stdout. Wenn beim Senden kein Passwort angegeben wird, wird eines automatisch generiert und in der Antwort enthalten. Der Exit-Code ist 0 bei Erfolg und 1 bei Fehler.

Orbit-Plan

Orbit ermöglicht größere Dateien (10 GB), längere Aufbewahrung (30 Tage) und Dateiverwaltung (Auflisten und Löschen).

Der API-Schlüssel wird automatisch erkannt: TTL_API_KEY-Umgebungsvariable, ttl.key neben der Programmdatei oder ~/.ttl/key. Verwenden Sie ttl activate zum Speichern oder schreiben Sie ihn manuell an einen dieser Orte.

# Schlüssel aktivieren
$ ttl activate ttl_orbit_aBcDeFgHiJ...
Orbit plan activated. Key saved to /usr/local/bin/ttl.key

# Plan und Nutzung prüfen
$ 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

# mit verlängerter TTL senden
$ ttl send -t 30d large-backup.tar.gz

# letzte Uploads auflisten
$ 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

# Datei vorzeitig löschen
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# gespeicherten Schlüssel entfernen
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

HTTP API

Upload und Download erfordern die Verschlüsselungs-Pipeline der CLI (Argon2id + XChaCha20-Poly1305 + chunk-basierte AEAD). Verwenden Sie für Skripte ttl send / ttl get oder den --json-Modus. Die folgenden Endpunkte dienen der Orbit-Dateiverwaltung.

Dateien auflisten (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}]}

Gibt alle mit diesem Schlüssel hochgeladenen Dateien zurück. Erfordert Orbit-Plan.

Datei löschen (Orbit)

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

Gibt bei Erfolg 204 No Content zurück. Erfordert Orbit-Plan. Die Datei muss diesem Schlüssel gehören.

Fehlerantworten

StatusBedeutung
401Ungültiger oder abgelaufener API-Schlüssel
403Funktion erfordert Orbit-Plan
404Datei nicht gefunden oder gehört nicht zu diesem Schlüssel
429Anfragelimit überschritten

Limits

BeschränkungKostenlosOrbit
Max. Dateigröße2 GB10 GB
Max. TTL7 Tage30 Tage
Uploads pro Tag1050
Speicherkontingent250 GB
Auflisten & Löschen
Min. Passwortlänge8 Zeichen
Anfragen pro IP30 pro 10 Sekunden
Verbindungen pro IP10 gleichzeitig

Verschlüsselung

Dateien werden auf Ihrem Gerät verschlüsselt, bevor sie hochgeladen werden. Der Server speichert nur Chiffretext und kann Ihre Dateien nicht entschlüsseln.

KomponenteAlgorithmus / Wert
SchlüsselableitungArgon2id (time=3, memory=64 MB, parallelism=1)
ChiffreXChaCha20-Poly1305 AEAD

Jede Änderung am Chiffretext führt dazu, dass die Entschlüsselung fehlschlägt. Der Server überprüft vor der Freigabe des Chiffretexts, dass der Downloader das korrekte Passwort kennt, mithilfe eines aus dem Verschlüsselungsschlüssel abgeleiteten Einweg-Tokens.