# envoyer un fichier : mot de passe généré automatiquement, affiche le lien et le mot de passe $ 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 # 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/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
# mot de passe généré automatiquement, TTL par défaut 7 j $ 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
# invalidé dès que le premier téléchargement commence, et après une coupure seul ce téléchargement peut reprendre $ 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é ; si un fichier portant ce nom existe déjà dans le répertoire de sortie, le fichier est enregistré sous name (1).ext au lieu de l’écraser.
# vous pouvez utiliser uniquement le jeton de 10 caractères au lieu de l'URL complète $ ttl get aBcDeFgHiJ
$ 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 le même format de fichier et les mêmes algorithmes (Argon2id, XChaCha20-Poly1305) 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 six manières de le fournir :
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mXq7Rt
Génère un mot de passe aléatoire cryptographiquement sûr de 12 caractères à partir de [0-9A-Za-z]. Disponible uniquement lors de l’envoi (send), de manière interactive ou automatiquement en mode --json.
$ 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 le mot de passe doit être généré automatiquement. 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 s’arrête 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é |
-u, --uploader-only | Seule votre propre clé API peut télécharger (Orbit ; alias --private) | désactivé |
--timeout DUR | Délai d’attente du transfert | sans limite |
--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’attente du transfert | sans limite |
-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 permanent
Par défaut : sans limite. Un transfert qui se bloque reprend tout seul et s’arrête s’il ne peut plus avancer. Pour fixer une limite : --timeout 30m ou --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 # le lien fonctionne une seule fois, expire dans 5 minutes
# envoi : mot de passe généré automatiquement en mode 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"} # téléchargement $ ttl --json get -p aB3kL9mXq7Rt 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 généré automatiquement 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 durée de conservation plus longue (30 jours, ou permanente), des fichiers réservés à l’expéditeur (seule votre clé API peut les télécharger) et la gestion des fichiers (liste et suppression). Comparaison complète : Features.
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é : saisie masquée, elle ne figure donc pas dans l'historique du shell $ ttl activate Enter Orbit API key: ******** Orbit plan activated. Key saved to /usr/local/bin/ttl.key # non interactif : ttl activate --key-stdin | ttl activate --key-file F # vérifier l'offre et l'utilisation $ 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 # envoyer avec TTL étendu $ ttl send -t 30d large-backup.tar.gz # fichier permanent (Orbit uniquement) : sans expiration, conservé jusqu'à ce que vous le supprimiez ou que votre abonnement prenne fin $ ttl send -t permanent archive.tar.gz # envoyer un fichier privé : seule votre clé API peut le télécharger (Orbit uniquement) $ ttl send -u payroll.xlsx # lister les envois 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,"uploader_only":false,"is_permanent":false,"is_note":false,"perm_grace_until":0}],"has_more":false} # page suivante : uniquement quand has_more vaut true ; transmettez le next_cursor de la réponse précédente $ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."
Renvoie les fichiers envoyés avec cette clé, du plus récent au plus ancien, 20 par page. Lorsque has_more vaut true, la réponse inclut aussi next_cursor ; transmettez-le via ?cursor= pour obtenir la page suivante. Nécessite l’offre 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 l’offre Orbit. Le fichier doit appartenir à cette clé.
| Statut | Signification |
|---|---|
401 | Clé API invalide ou expirée |
403 | Fonctionnalité nécessitant l’offre Orbit |
404 | Fichier non trouvé ou n’appartenant pas à cette clé |
429 | Limite de requêtes dépassée |
500 | Erreur interne du serveur, réessayez plus tard |
502 | Stockage temporairement indisponible, réessayez plus tard |
| Contrainte | Gratuit | Orbit |
|---|---|---|
| Taille max. | 2 Go | 10 Go |
| TTL max. | 7 jours | 30 jours ou permanent |
| Envois par jour | 10 | Illimité |
| Volume d’envoi par jour (par IP) | 10 Go | Illimité |
| Envois simultanés | 1 par IP | 1 par IP et par clé API |
| Quota de stockage | ✗ | 500 Go |
| Liste des fichiers | ✗ | ✓ |
| Suppression anticipée | ✓ | ✓ |
| Fichiers réservés à l’expéditeur | ✗ | ✓ |
| Longueur min. du 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 Mio, parallelism=1) |
| Chiffrement | XChaCha20-Poly1305 AEAD |
Toute modification du texte chiffré provoque un échec du déchiffrement. Le serveur vérifie que la personne qui télécharge connaît le bon mot de passe avant de lui transmettre le texte chiffré, en utilisant un jeton unidirectionnel dérivé de la clé de chiffrement.