Посібник з використання

← Home

Швидкий старт

# надіслати файл — пароль генерується автоматично, виводить посилання + пароль
$ 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

# завантажити — запитує пароль в інтерактивному режимі
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

CLI виконує шифрування, завантаження на сервер, скачування та розшифрування. Сервер ніколи не бачить ваш пароль або незашифровані дані.

Встановлення

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

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

Готовий бінарний файл

# завантажте для вашої платформи зі сторінки релізів
$ 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

З вихідного коду

$ 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

Надсилання файлів

Базове надсилання

# автоматична генерація пароля, TTL за замовчуванням 7д
$ ttl send report.xlsx

Якщо пароль не вказано в терміналі, CLI запитує:

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

Натисніть Enter або введіть y, щоб згенерувати автоматично.

Власний пароль

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

Знищити після прочитання

# файл назавжди видаляється після першого завантаження
$ ttl send -b photo.jpg

Власний TTL

$ ttl send -t 5m temp-credentials.txt   # спливає через 5 хвилин
$ ttl send -t 30m meeting-link.txt      # спливає через 30 хвилин
$ ttl send -t 6h backup.tar.gz          # спливає через 6 годин
$ ttl send -t 1d daily-report.pdf       # спливає через 1 день
$ ttl send -t 3d project-archive.zip    # спливає через 3 дні
$ ttl send -t 5d design-assets.zip      # спливає через 5 днів
$ ttl send report.xlsx                  # спливає через 7 днів (за замовчуванням)

Завантаження файлів

Інтерактивний режим (термінал)

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

Пароль не відображається в терміналі. Оригінальна назва файлу зберігається.

Лише токен

# можна використовувати лише 10-символьний токен замість повного URL
$ ttl get aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Каталог виведення

$ ttl get -o ~/Downloads aBcDeFgHiJ

За замовчуванням файли зберігаються в поточний каталог. Використовуйте -o / --output для вказівки іншого каталогу.

З прапорцем пароля

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

Браузер

Ви також можете завантажувати та розшифровувати файли у браузері, перейшовши за посиланням напряму. Веб-інтерфейс використовує ту саму бібліотеку шифрування й запитує пароль. Встановлення програм не потрібне.

Обробка паролів

Пароль є основою для ключа шифрування. Він ніколи не залишає ваш пристрій і ніколи не надсилається на сервер. Є п'ять способів його вказати:

1. Автогенерація (лише надсилання)

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

Генерує криптографічно випадковий 8-символьний пароль з набору [0-9A-Za-z]. Доступно лише під час send у терміналі.

2. Інтерактивний запит

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

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

Пароль не відображається. Під час send ви спочатку обираєте, чи генерувати автоматично. Під час get запит з'являється одразу.

3. Прапорець: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password видно у виводі ps aux і може зберігатися в історії оболонки (~/.bash_history). Уникайте використання у спільних середовищах та скриптах. Використовуйте натомість --password-stdin або --password-file.

4. Stdin: --password-stdin

# передача через echo
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# передача з менеджера паролів
$ pass show ttl/key | ttl send --password-stdin data.zip

# передача зі змінної середовища
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

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

Читає перший рядок зі stdin. Корисно у скриптах, CI/CD-конвеєрах та автоматизації. Якщо stdin не є терміналом і джерело пароля не вказано, CLI завершується з помилкою (крім режиму --json, який автоматично генерує пароль).

5. Файл: --password-file

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

Зчитує перший рядок файлу (кінцевий символ нового рядка видаляється). Сумісно з Docker secrets (/run/secrets/), файлами Vault agent та подібними патернами.

6. Автоматично виявлений файл: ttl.password

Якщо пароль не вказано явно, CLI шукає файл ttl.password поруч із програмою, потім ~/.ttl/password. Перший рядок використовується як пароль.

Одночасно можна використовувати лише одне явне джерело пароля. -p / --password, --password-stdin та --password-file не можна поєднувати. Автоматично виявлений файл ttl.password перевіряється лише за відсутності всіх перелічених. Мінімальна довжина: 8 символів.

Довідка з параметрів

Прапорці надсилання

ПрапорецьОписЗа замовчуванням
-p, --password PПароль для шифруванняінтерактивно
--password-stdinЗчитати пароль зі stdin
--password-file FЗчитати пароль з файлу
-t, --ttl DURЧас життя7d
-b, --burnЗнищити після прочитання (одне завантаження)вимкнено
--timeout DURТайм-аут передачіавтоматично
--server URLURL сервераhttps://ttl.space
-h3, --http3Спробувати HTTP/3 (QUIC), відкат на TCPвимкнено
--jsonВивід JSON у stdout (для скриптів та ШІ-агентів)вимк.

Прапорці завантаження

ПрапорецьОписЗа замовчуванням
-p, --password PПароль для розшифруванняінтерактивно
--password-stdinЗчитати пароль зі stdin
--password-file FЗчитати пароль з файлу
-o, --output DIRКаталог виведенняпоточний каталог
--timeout DURТайм-аут передачіавтоматично
-h3, --http3Спробувати HTTP/3 (QUIC), відкат на TCPвимкнено
--jsonВивід JSON у stdout (для скриптів та ШІ-агентів)вимк.

Значення TTL

Безкоштовно: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d

Orbit додає: 14d 15d 28d 30d

Тайм-аут

За замовчуванням: автоматично — розраховується з розміру файлу при швидкості 1 Мбіт/с + 2 хвилини запасу (мінімум 5 хвилин). Змінити: --timeout 10m або --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

Копіювання посилання в буфер обміну (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Копіювання посилання в буфер обміну (Linux)

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

Знищення: одноразовий секрет

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# посилання працює лише один раз, закінчується через 5 хвилин

Режим JSON (скрипти & ШІ-агенти)

# надсилання — пароль генерується автоматично в режимі JSON
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"}

# завантаження
$ ttl --json get -p aB3kL9mX xK9mQ2vLpA
{"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"}

# помилки повертають ok:false
{"ok":false,"error":"Link not found"}

У режимі --json весь вивід — структурований JSON у stdout. Якщо при надсиланні пароль не вказано, він генерується автоматично та включається у відповідь. Код виходу: 0 при успіху, 1 при помилці.

План Orbit

Orbit відкриває доступ до більших файлів (10 ГБ), тривалішого зберігання (30 днів) та керування файлами (перелік і видалення).

API-ключ визначається автоматично: змінна оточення TTL_API_KEY, ttl.key поруч із програмою або ~/.ttl/key. Використовуйте ttl activate для збереження ключа або запишіть його вручну в одне з цих місць.

# активувати ключ
$ ttl activate ttl_orbit_aBcDeFgHiJ...
Orbit plan activated. Key saved to /usr/local/bin/ttl.key

# перевірити план та використання
$ 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

# надіслати з подовженим TTL
$ ttl send -t 30d large-backup.tar.gz

# показати останні завантаження
$ 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

# видалити файл достроково
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# видалити збережений ключ
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

HTTP API

Завантаження та скачування потребують шифрувального конвеєра CLI (Argon2id + XChaCha20-Poly1305 + блоковий AEAD). Для скриптів використовуйте ttl send / ttl get або режим --json. Вказані нижче кінцеві точки призначені для керування файлами Orbit.

Список файлів (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}]}

Повертає всі файли, завантажені з цим ключем. Потрібен план Orbit.

Видалити файл (Orbit)

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

Повертає 204 No Content при успіху. Потрібен план Orbit. Файл повинен належати цьому ключу.

Відповіді помилок

СтатусЗначення
401Недійсний або прострочений API-ключ
403Функція потребує план Orbit
404Файл не знайдено або не належить цьому ключу
429Перевищено ліміт запитів

Обмеження

ОбмеженняБезкоштовноOrbit
Макс. розмір файлу2 ГБ10 ГБ
Макс. TTL7 днів30 днів
Завантажень на день1050
Квота сховища100 ГБ
Перелік та видалення
Мін. довжина пароля8 символів
Запитів на IP30 за 10 секунд
З'єднань на IP10 одночасних

Шифрування

Файли шифруються на вашому пристрої перед завантаженням. Сервер зберігає лише зашифровані дані і не може розшифрувати ваші файли.

КомпонентАлгоритм / Значення
Виведення ключаArgon2id (time=3, memory=64 MB, parallelism=1)
ШифрXChaCha20-Poly1305 AEAD

Будь-яка зміна шифротексту призводить до помилки розшифрування. Сервер перевіряє, що той, хто завантажує, знає правильний пароль, перш ніж віддати шифротекст, використовуючи односторонній токен, отриманий з ключа шифрування.