使い方ガイド

クイックスタート

# ファイルを送信 — パスワード自動生成、リンクとパスワードを表示
$ 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

ファイルの送信

基本的な送信

# パスワード自動生成、デフォルト7日間のTTL
$ 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)

パスワードは安全に読み取られ、ターミナルに表示されません。元のファイル名が復元されます。

トークンのみ

# 完全なURLの代わりに10文字のトークンだけで使用できます
$ 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

ブラウザ

リンクを直接開くことで、ブラウザでもファイルのダウンロードと復号ができます。Webインターフェースは同じ暗号化ライブラリを使用し、パスワードの入力を求めます。ソフトウェアのインストールは不要です。

パスワードの取り扱い

パスワードは暗号化鍵のシードです。デバイスの外に送信されることはなく、サーバーに送られることもありません。指定方法は5通りあります:

1. 自動生成(送信時のみ)

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

[0-9A-Za-z] から暗号学的にランダムな8文字のパスワードを生成します。ターミナルでの 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 / --passwordps aux の出力に表示され、シェル履歴(~/.bash_history)に保存される場合があります。共有環境やスクリプトでの使用は避けてください。代わりに --password-stdin または --password-file を使用してください。

4. 標準入力: --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

# ヒアドキュメント
$ 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シークレット(/run/secrets/)、Vaultエージェントファイルなどのパターンと互換性があります。

6. 自動検出ファイル: ttl.password

明示的なパスワードが指定されない場合、CLIはバイナリの隣にあるttl.passwordファイル、次に~/.ttl/passwordを検索します。最初の行がパスワードとして使用されます。

明示的なパスワードソースは一度に1つしか使用できません。-p / --password--password-stdin--password-fileは組み合わせられません。自動検出されるttl.passwordファイルは、これらが何も指定されていない場合のみ確認されます。最小長: 8文字。

オプションリファレンス

送信フラグ

フラグ説明デフォルト
-p, --password P暗号化パスワード対話的入力
--password-stdin標準入力からパスワードを読み取り
--password-file Fファイルからパスワードを読み取り
-t, --ttl DUR有効期限7d
-b, --burn閲覧後に消滅(1回のみダウンロード可能)オフ
--timeout DUR転送タイムアウト自動
--server URLサーバーURLhttps://ttl.space
-h3, --http3HTTP/3(QUIC)を試行、TCPにフォールバックオフ
--jsonJSON出力をstdoutに書き出し(スクリプトとAIエージェント向け)オフ

取得フラグ

フラグ説明デフォルト
-p, --password P復号パスワード対話的入力
--password-stdin標準入力からパスワードを読み取り
--password-file Fファイルからパスワードを読み取り
-o, --output DIR出力ディレクトリ現在のディレクトリ
--timeout DUR転送タイムアウト自動
-h3, --http3HTTP/3(QUIC)を試行、TCPにフォールバックオフ
--jsonJSON出力をstdoutに書き出し(スクリプトとAIエージェント向け)オフ

TTL値

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

Orbit追加: 14d 15d 28d 30d

タイムアウト

デフォルト: 自動 — ファイルサイズから1 Mbpsを想定して推定し、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
# リンクは1回だけ有効、5分で期限切れ

JSONモード(スクリプト & AIエージェント)

# 送信 — 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 モードでは、すべての出力がstdoutに構造化JSONとして出力されます。送信時にパスワードが指定されていない場合、自動生成されてレスポンスに含まれます。終了コードは成功時0、エラー時1です。

Orbitプラン

Orbitはより大きなファイル(10 GB)、より長い保持期間(30日)、ファイル管理(一覧と削除)を利用可能にします。

APIキーは自動検出されます: TTL_API_KEY環境変数、バイナリの隣のttl.key、または~/.ttl/keyttl 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 GB10 GB
最大TTL7日30日
1日あたりのアップロード1050
ストレージ容量250 GB
一覧と削除
最小パスワード長8文字
IPあたりのリクエスト10秒あたり30
IPあたりの接続同時10

暗号化

ファイルはアップロード前にお使いのデバイス上で暗号化されます。サーバーは暗号文のみを保存し、ファイルを復号することはできません。

コンポーネントアルゴリズム / 値
鍵導出Argon2id (time=3, memory=64 MB, parallelism=1)
暗号方式XChaCha20-Poly1305 AEAD

暗号文に対するいかなる変更も、復号の失敗を引き起こします。サーバーは暗号文を公開する前に、暗号化キーから導出された一方向トークンを使用して、ダウンロード者が正しいパスワードを知っていることを検証します。