# envoyer un fichier — mot de passe auto-généré, affiche le lien + mot de passe $ 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 # télécharger — demande le mot de passe de manière interactive $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
Le CLI gère le chiffrement, l'envoi, le téléchargement et le déchiffrement. Le serveur ne voit jamais votre mot de passe ni vos données en clair.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# télécharger pour votre plateforme depuis les releases $ 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
# mot de passe auto-généré, TTL par défaut 7j $ ttl send report.xlsx
Lorsqu'aucun mot de passe n'est fourni dans un terminal, le CLI demande :
No password provided. Generate one? [Y/n]:
Appuyez sur Entrée ou tapez y pour générer automatiquement.
$ ttl send -p mySecretPass -t 1h document.pdf
# le fichier est définitivement supprimé après le premier téléchargement $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # expire dans 5 minutes $ ttl send -t 30m meeting-link.txt # expire dans 30 minutes $ ttl send -t 6h backup.tar.gz # expire dans 6 heures $ ttl send -t 1d daily-report.pdf # expire dans 1 jour $ ttl send -t 3d project-archive.zip # expire dans 3 jours $ ttl send -t 5d design-assets.zip # expire dans 5 jours $ ttl send report.xlsx # expire dans 7 jours (défaut)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
Le mot de passe est lu de manière sécurisée — il n'est pas affiché dans le terminal. Le nom de fichier original est préservé.
# vous pouvez utiliser uniquement le token de 10 caractères au lieu de l'URL complète $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ ttl get -o ~/Downloads aBcDeFgHiJ
Par défaut, les fichiers sont enregistrés dans le répertoire courant. Utilisez -o / --output pour spécifier un autre répertoire.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Vous pouvez aussi télécharger et déchiffrer des fichiers dans votre navigateur en visitant le lien directement. L'interface web utilise la même bibliothèque de chiffrement et demande votre mot de passe. Aucune installation requise.
Le mot de passe est la graine de la clé de chiffrement. Il ne quitte jamais votre appareil et n'est jamais envoyé au serveur. Il existe cinq manières de le fournir :
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
Génère un mot de passe aléatoire cryptographiquement sûr de 8 caractères à partir de [0-9A-Za-z]. Disponible uniquement lors de l'envoi (send) dans un terminal.
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
Le mot de passe n'est ni affiché ni enregistré dans l'historique du shell. Lors de l'envoi (send), vous choisissez d'abord si vous souhaitez auto-générer. Lors du téléchargement (get), la saisie est directe.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password est visible dans la sortie de ps aux et peut être enregistré dans l'historique du shell (~/.bash_history). Évitez-le dans les environnements partagés et les scripts. Utilisez plutôt --password-stdin ou --password-file.--password-stdin# via echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # via un gestionnaire de mots de passe $ pass show ttl/key | ttl send --password-stdin data.zip # via une variable d'environnement $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Lit la première ligne depuis stdin. Utile dans les scripts, les pipelines CI/CD et l'automatisation. Lorsque stdin n'est pas un terminal et qu'aucune source de mot de passe n'est fournie, le CLI quitte avec une erreur (sauf avec --json, qui génère automatiquement un mot de passe).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Lit la première ligne du fichier (le retour à la ligne final est supprimé). Compatible avec les secrets Docker (/run/secrets/), les fichiers d'agent Vault, et autres mécanismes similaires.
ttl.passwordSi aucun mot de passe explicite n'est fourni, le CLI recherche un fichier ttl.password à côté du binaire, puis ~/.ttl/password. La première ligne est utilisée comme mot de passe.
-p / --password, --password-stdin et --password-file ne peuvent pas être combinés. Le fichier ttl.password détecté automatiquement n'est vérifié que si aucun de ceux-ci n'est fourni. Longueur minimale : 8 caractères.| Option | Description | Par défaut |
|---|---|---|
-p, --password P | Mot de passe de chiffrement | interactif |
--password-stdin | Lire le mot de passe depuis stdin | |
--password-file F | Lire le mot de passe depuis un fichier | |
-t, --ttl DUR | Durée de vie | 7d |
-b, --burn | Détruire après lecture (un seul téléchargement) | désactivé |
--timeout DUR | Délai d'expiration du transfert | auto |
--server URL | URL du serveur | https://ttl.space |
-h3, --http3 | Essayer HTTP/3 (QUIC), repli sur TCP | désactivé |
--json | Sortie JSON sur stdout (pour scripts et agents IA) | désactivé |
| Option | Description | Par défaut |
|---|---|---|
-p, --password P | Mot de passe de déchiffrement | interactif |
--password-stdin | Lire le mot de passe depuis stdin | |
--password-file F | Lire le mot de passe depuis un fichier | |
-o, --output DIR | Répertoire de sortie | répertoire courant |
--timeout DUR | Délai d'expiration du transfert | auto |
-h3, --http3 | Essayer HTTP/3 (QUIC), repli sur TCP | désactivé |
--json | Sortie JSON sur stdout (pour scripts et agents IA) | désactivé |
Gratuit : 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit ajoute : 14d 15d 28d 30d
Par défaut : auto — estimé à partir de la taille du fichier en supposant un débit de 1 Mbps + 2 minutes de marge (minimum 5 minutes). À remplacer avec --timeout 10m ou --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 # le lien fonctionne une seule fois, expire dans 5 minutes
# envoi — mot de passe auto-généré en mode JSON $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"} # téléchargement $ ttl --json get -p aB3kL9mX xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # les erreurs retournent ok:false {"ok":false,"error":"Link not found"}
En mode --json, toute la sortie est du JSON structuré sur stdout. Si aucun mot de passe n'est fourni lors de l'envoi, un mot de passe est auto-généré et inclus dans la réponse. Le code de sortie est 0 en cas de succès, 1 en cas d'erreur.
Orbit débloque des fichiers plus volumineux (10 Go), une rétention plus longue (30 jours) et la gestion des fichiers (liste et suppression).
La clé API est détectée automatiquement : variable d'environnement TTL_API_KEY, ttl.key à côté du binaire ou ~/.ttl/key. Utilisez ttl activate pour enregistrer la clé ou écrivez-la manuellement à l'un de ces emplacements.
# activer votre clé $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # vérifier le plan et l'utilisation $ 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 # envoyer avec TTL étendu $ ttl send -t 30d large-backup.tar.gz # lister les téléversements récents $ 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 # supprimer un fichier $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # retirer la clé enregistrée $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get ou le mode --json. Les points d'accès ci-dessous sont destinés à la gestion des fichiers 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}]}
Renvoie tous les fichiers téléversés avec cette clé. Nécessite le plan Orbit.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Renvoie 204 No Content en cas de succès. Nécessite le plan Orbit. Le fichier doit appartenir à cette clé.
| Statut | Signification |
|---|---|
401 | Clé API invalide ou expirée |
403 | Fonctionnalité nécessitant le plan Orbit |
404 | Fichier non trouvé ou n'appartenant pas à cette clé |
429 | Limite de requêtes dépassée |
| Contrainte | Gratuit | Orbit |
|---|---|---|
| Taille max. | 2 Go | 10 Go |
| TTL max. | 7 jours | 30 jours |
| Téléversements par jour | 10 | 50 |
| Quota de stockage | — | 250 Go |
| Liste & suppression | — | ✓ |
| Longueur min. mot de passe | 8 caractères | |
| Requêtes par IP | 30 par 10 secondes | |
| Connexions par IP | 10 simultanées | |
Les fichiers sont chiffrés sur votre appareil avant l'envoi. Le serveur ne stocke que le texte chiffré et ne peut pas déchiffrer vos fichiers.
| Composant | Algorithme / Valeur |
|---|---|
| Dérivation de clé | Argon2id (time=3, memory=64 Mo, parallelism=1) |
| Chiffrement | XChaCha20-Poly1305 AEAD |
Toute modification du texte chiffré provoque un échec du déchiffrement. Le serveur vérifie que le téléchargeur connaît le mot de passe correct avant de libérer le texte chiffré, en utilisant un jeton unidirectionnel dérivé de la clé de chiffrement.