Guide d'utilisation

← Home

Prise en main rapide

# 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.

Installation

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

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

Binaire pré-compilé

# 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

$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest

Depuis les sources

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

Vérification

$ ttl version
ttl v1.3.0

Envoyer des fichiers

Envoi simple

# 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.

Mot de passe personnalisé

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

Détruire après lecture

# le fichier est définitivement supprimé après le premier téléchargement
$ ttl send -b photo.jpg

TTL personnalisé

$ 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)

Télécharger des fichiers

Mode interactif (terminal)

$ 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é.

Token seul

# 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)

Répertoire de sortie

$ 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.

Avec l'option mot de passe

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

Navigateur

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.

Gestion du mot de passe

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 :

1. Auto-génération (envoi uniquement)

$ 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.

2. Saisie interactive

$ 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.

3. Option : -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.

4. Stdin : --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).

5. Fichier : --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.

6. Fichier détecté automatiquement : ttl.password

Si 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.

Une seule source explicite de mot de passe peut être utilisée à la fois. -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.

Référence des options

Options d'envoi

OptionDescriptionPar défaut
-p, --password PMot de passe de chiffrementinteractif
--password-stdinLire le mot de passe depuis stdin
--password-file FLire le mot de passe depuis un fichier
-t, --ttl DURDurée de vie7d
-b, --burnDétruire après lecture (un seul téléchargement)désactivé
--timeout DURDélai d'expiration du transfertauto
--server URLURL du serveurhttps://ttl.space
-h3, --http3Essayer HTTP/3 (QUIC), repli sur TCPdésactivé
--jsonSortie JSON sur stdout (pour scripts et agents IA)désactivé

Options de téléchargement

OptionDescriptionPar défaut
-p, --password PMot de passe de déchiffrementinteractif
--password-stdinLire le mot de passe depuis stdin
--password-file FLire le mot de passe depuis un fichier
-o, --output DIRRépertoire de sortierépertoire courant
--timeout DURDélai d'expiration du transfertauto
-h3, --http3Essayer HTTP/3 (QUIC), repli sur TCPdésactivé
--jsonSortie JSON sur stdout (pour scripts et agents IA)désactivé

Valeurs de TTL

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

Orbit ajoute : 14d 15d 28d 30d

Délai d'expiration

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.

Exemples

Script : sauvegarde et envoi

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

Copier le lien dans le presse-papiers (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Copier le lien dans le presse-papiers (Linux)

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

Destruction : secret à usage unique

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# le lien fonctionne une seule fois, expire dans 5 minutes

Mode JSON (scripts & agents IA)

# 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.

Plan Orbit

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

HTTP API

Le téléversement et le téléchargement nécessitent le pipeline de chiffrement du CLI (Argon2id + XChaCha20-Poly1305 + AEAD par blocs). Pour les scripts, utilisez ttl send / ttl get ou le mode --json. Les points d'accès ci-dessous sont destinés à la gestion des fichiers Orbit.

Lister les 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.

Supprimer un fichier (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é.

Réponses d'erreur

StatutSignification
401Clé API invalide ou expirée
403Fonctionnalité nécessitant le plan Orbit
404Fichier non trouvé ou n'appartenant pas à cette clé
429Limite de requêtes dépassée

Limites

ContrainteGratuitOrbit
Taille max.2 Go10 Go
TTL max.7 jours30 jours
Téléversements par jour1050
Quota de stockage250 Go
Liste & suppression
Longueur min. mot de passe8 caractères
Requêtes par IP30 par 10 secondes
Connexions par IP10 simultanées

Chiffrement

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.

ComposantAlgorithme / Valeur
Dérivation de cléArgon2id (time=3, memory=64 Mo, parallelism=1)
ChiffrementXChaCha20-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.