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

Українська

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

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

# завантажити: запитує пароль в інтерактивному режимі
$ 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/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

$ 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

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

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

# автоматична генерація пароля, 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)

Пароль не відображається в терміналі. Оригінальна назва файлу зберігається; якщо файл із такою назвою вже є в каталозі виведення, файл зберігається як name (1).ext замість перезапису.

Лише токен

# можна використовувати лише 10-символьний токен замість повного URL
$ ttl get aBcDeFgHiJ

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

$ ttl get -o ~/Downloads aBcDeFgHiJ

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

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

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

Браузер

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

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

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

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

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

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

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Знищити після прочитання (одне завантаження)вимкнено
-u, --uploader-onlyЗавантажити може лише ваш власний API-ключ (Orbit; синонім --private)вимкнено
--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 permanent

Тайм-аут

За замовчуванням: немає. Передача, що зависла, відновлюється сама і припиняється, якщо не може продовжитися. Задати обмеження: --timeout 30m або --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

Копіювання посилання в буфер обміну (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,"uploader_only":false,"is_permanent":false,"password":"aB3kL9mXq7Rt"}

# завантаження
$ ttl --json get -p aB3kL9mXq7Rt 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-ключ) та керування файлами (перелік і видалення). Повне порівняння: Features.

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

# активувати ключ: запитується без відображення, тож не потрапляє в історію оболонки
$ ttl activate
Enter Orbit API key: ********
Orbit plan activated. Key saved to /usr/local/bin/ttl.key
# неінтерактивно: ttl activate --key-stdin  |  ttl activate --key-file F

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

# надіслати з подовженим TTL
$ ttl send -t 30d large-backup.tar.gz
# постійний файл (лише Orbit): без терміну дії, зберігається, доки ви його не видалите або не закінчиться ваша підписка
$ ttl send -t permanent archive.tar.gz
# надіслати приватний файл: завантажити його може лише ваш API-ключ (лише Orbit)
$ ttl send -u payroll.xlsx

# показати останні завантаження
$ 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,"uploader_only":false,"is_permanent":false,"is_note":false,"perm_grace_until":0}],"has_more":false}

# наступна сторінка: лише коли has_more дорівнює true; передайте next_cursor з попередньої відповіді
$ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."

Повертає файли, завантажені з цим ключем, від найновіших, по 20 на сторінку. Коли has_more дорівнює true, відповідь також містить next_cursor; передайте його як ?cursor=, щоб отримати наступну сторінку. Потрібен план 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Перевищено ліміт запитів
500Внутрішня помилка сервера, повторіть спробу пізніше
502Сховище тимчасово недоступне, повторіть спробу пізніше

Обмеження

ОбмеженняБезкоштовноOrbit
Макс. розмір файлу2 ГБ10 ГБ
Макс. TTL7 днів30 днів або безстроково
Завантажень на день10Без обмежень
Обсяг завантажень на день (на IP)10 ГББез обмежень
Одночасні завантаження1 на IP1 на IP та на API-ключ
Квота сховища✗500 ГБ
Перелік файлів✗✓
Дострокове видалення✓✓
Файли лише для завантажувача✗✓
Мін. довжина пароля8 символів
Запитів на IP30 за 10 секунд
З'єднань на IP10 одночасних

Шифрування

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

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

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