Panduan Penggunaan

Bahasa Indonesia

Mulai cepat

# kirim berkas: kata sandi dibuat otomatis, tautan + kata sandi ditampilkan
$ 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

# unduh: kata sandi diminta secara interaktif
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

CLI menangani enkripsi, pengunggahan, pengunduhan, dan dekripsi secara otomatis. Server tidak pernah melihat kata sandi atau data teks biasa Anda.

Instalasi

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

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

Biner siap pakai

# unduh rilis untuk platform Anda
$ 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

Kompilasi dari sumber

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

Verifikasi

$ ttl version
ttl 1.6.0

Mengirim berkas

Pengiriman dasar

# buat kata sandi otomatis, TTL bawaan 7 hari
$ ttl send report.xlsx

Jika tidak ada kata sandi di terminal, CLI akan bertanya:

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

Tekan Enter atau ketik y untuk membuat otomatis.

Kata sandi khusus

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

Hapus setelah dibaca

# terpakai begitu unduhan pertama dimulai; setelah terputus, hanya unduhan itu yang bisa melanjutkan
$ ttl send -b photo.jpg

TTL khusus

$ ttl send -t 5m temp-credentials.txt   # kedaluwarsa dalam 5 menit
$ ttl send -t 30m meeting-link.txt      # kedaluwarsa dalam 30 menit
$ ttl send -t 6h backup.tar.gz          # kedaluwarsa dalam 6 jam
$ ttl send -t 1d daily-report.pdf       # kedaluwarsa dalam 1 hari
$ ttl send -t 3d project-archive.zip    # kedaluwarsa dalam 3 hari
$ ttl send -t 5d design-assets.zip      # kedaluwarsa dalam 5 hari
$ ttl send report.xlsx                  # kedaluwarsa dalam 7 hari (bawaan)

Mengunduh berkas

Interaktif (terminal)

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

Kata sandi dibaca secara aman, tidak ditampilkan di terminal. Nama berkas asli dipertahankan; jika nama tersebut sudah ada di direktori keluaran, berkas disimpan sebagai name (1).ext alih-alih menimpanya.

Hanya token

# Anda bisa menggunakan token 10 karakter saja, bukan URL lengkap
$ ttl get aBcDeFgHiJ

Direktori keluaran

$ ttl get -o ~/Downloads aBcDeFgHiJ

Secara bawaan berkas disimpan di direktori saat ini. Gunakan -o / --output untuk menentukan direktori lain.

Dengan flag kata sandi

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

Peramban

Anda juga bisa mengunduh dan mendekripsi berkas di peramban dengan mengunjungi tautan langsung. Antarmuka web menggunakan format berkas dan algoritma yang sama (Argon2id, XChaCha20-Poly1305) dan meminta kata sandi Anda. Tidak perlu instalasi perangkat lunak.

Pengelolaan kata sandi

Kata sandi adalah dasar dari kunci enkripsi. Tidak pernah meninggalkan perangkat Anda dan tidak pernah dikirim ke server. Dapat ditentukan dengan enam cara berbeda:

1. Pembuatan otomatis (hanya pengiriman)

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

Membuat kata sandi acak 12 karakter secara kriptografis dari set karakter [0-9A-Za-z]. Hanya tersedia saat send (secara interaktif, atau otomatis dalam mode --json).

2. Prompt interaktif

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

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

Kata sandi tidak ditampilkan di layar dan tidak disimpan di riwayat shell. Saat send, pembuatan otomatis ditawarkan terlebih dahulu; jika Anda mengetik kata sandi sendiri, Anda diminta memasukkannya sekali lagi untuk konfirmasi. Saat get, langsung diminta.

3. Flag: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password terlihat di output ps aux dan mungkin tersimpan di riwayat shell (~/.bash_history). Hindari penggunaan di lingkungan bersama dan skrip. Gunakan --password-stdin atau --password-file sebagai gantinya.

4. Stdin: --password-stdin

# pipe dengan echo
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# pipe dari pengelola kata sandi
$ pass show ttl/key | ttl send --password-stdin data.zip

# pipe dari variabel lingkungan
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

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

Membaca baris pertama dari stdin. Berguna untuk skrip, pipeline CI/CD, dan otomasi. Jika stdin bukan terminal dan sumber kata sandi tidak ditentukan, CLI keluar dengan error (kecuali menggunakan --json, dalam hal ini kata sandi dibuat otomatis).

5. Berkas: --password-file

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

Membaca baris pertama berkas (karakter baris baru di akhir dipotong). Kompatibel dengan Docker secrets (/run/secrets/), berkas Vault agent, dan sejenisnya.

6. Berkas terdeteksi otomatis: ttl.password

Jika tidak ada kata sandi yang diberikan secara eksplisit, CLI terlebih dahulu mencari berkas ttl.password di samping berkas eksekusi, kemudian ~/.ttl/password. Baris pertama digunakan sebagai kata sandi.

Hanya satu sumber kata sandi eksplisit yang dapat digunakan sekaligus. -p / --password, --password-stdin, dan --password-file tidak dapat digabungkan. Berkas ttl.password yang terdeteksi otomatis hanya diperiksa jika tidak ada yang diberikan. Panjang kata sandi minimum adalah 8 karakter.

Referensi opsi

Flag pengiriman

FlagDeskripsiBawaan
-p, --password PKata sandi enkripsiinteraktif
--password-stdinBaca kata sandi dari stdin
--password-file FBaca kata sandi dari berkas
-t, --ttl DURASIMasa berlaku7d
-b, --burnHapus setelah dibaca (satu unduhan)nonaktif
-u, --uploader-onlyHanya kunci API Anda sendiri yang dapat mengunduh (Orbit; alias --private)nonaktif
--timeout DURASIBatas waktu transfertanpa batas
--server URLURL serverhttps://ttl.space
-h3, --http3Coba HTTP/3 (QUIC), fallback ke TCPnonaktif
--jsonTulis output JSON ke stdout (untuk skrip dan agen AI)nonaktif

Flag pengunduhan

FlagDeskripsiBawaan
-p, --password PKata sandi dekripsiinteraktif
--password-stdinBaca kata sandi dari stdin
--password-file FBaca kata sandi dari berkas
-o, --output DIRDirektori keluarandirektori saat ini
--timeout DURASIBatas waktu transfertanpa batas
-h3, --http3Coba HTTP/3 (QUIC), fallback ke TCPnonaktif
--jsonTulis output JSON ke stdout (untuk skrip dan agen AI)nonaktif

Nilai TTL

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

Tambahan Orbit: 14d 15d 28d 30d permanent

Batas waktu

Bawaan: tanpa batas. Transfer yang macet akan berlanjut sendiri, dan berhenti jika tidak bisa diteruskan. Tetapkan batas dengan --timeout 30m atau --timeout 2h.

Contoh

Skrip: cadangkan dan unggah

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

Salin tautan ke papan klip (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Salin tautan ke papan klip (Linux)

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

Rahasia sekali pakai

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# tautan hanya berfungsi sekali, kedaluwarsa dalam 5 menit

Mode JSON (skrip & agen AI)

# kirim: dalam mode JSON kata sandi dibuat otomatis
$ 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"}

# unduh
$ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA
{"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"}

# kesalahan mengembalikan ok:false
{"ok":false,"error":"Link not found"}

Dalam mode --json semua output diberikan sebagai JSON terstruktur ke stdout. Saat pengiriman, jika kata sandi tidak ditentukan, kata sandi dibuat otomatis dan disertakan dalam respons. Kode keluar 0 untuk berhasil, 1 untuk gagal.

Paket Orbit

Orbit menawarkan berkas lebih besar (10 GB), penyimpanan lebih lama (30 hari, atau permanen), berkas khusus pengunggah (hanya kunci API Anda yang dapat mengunduhnya), dan pengelolaan berkas (daftar dan hapus). Perbandingan lengkap: Features.

Kunci API terdeteksi otomatis: variabel lingkungan TTL_API_KEY, ttl.key di samping berkas eksekusi, atau ~/.ttl/key. Gunakan ttl activate untuk menyimpan kunci atau tulis manual ke salah satu lokasi tersebut.

# aktifkan kunci Anda: diminta tanpa ditampilkan, sehingga tidak masuk ke riwayat shell
$ ttl activate
Enter Orbit API key: ********
Orbit plan activated. Key saved to /usr/local/bin/ttl.key
# non-interaktif: ttl activate --key-stdin  |  ttl activate --key-file F

# periksa paket dan penggunaan
$ 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

# kirim dengan TTL diperpanjang
$ ttl send -t 30d large-backup.tar.gz
# berkas permanen (hanya Orbit): tanpa kedaluwarsa, disimpan sampai Anda menghapusnya atau langganan Anda berakhir
$ ttl send -t permanent archive.tar.gz
# kirim berkas pribadi: hanya kunci API Anda yang dapat mengunduhnya (hanya Orbit)
$ ttl send -u payroll.xlsx

# daftar unggahan terbaru
$ 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

# hapus berkas lebih awal
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# hapus kunci tersimpan
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

HTTP API

Pengunggahan dan pengunduhan memerlukan pipeline enkripsi CLI (Argon2id + XChaCha20-Poly1305 + AEAD terpotong). Untuk skrip, gunakan ttl send / ttl get atau mode --json. Endpoint di bawah untuk pengelolaan berkas Orbit.

Daftar berkas (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}

# halaman berikutnya: hanya jika has_more bernilai true; kirimkan next_cursor dari respons sebelumnya
$ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."

Mengembalikan berkas yang diunggah dengan kunci ini, dari yang terbaru, 20 per halaman. Jika has_more bernilai true, respons juga menyertakan next_cursor; kirimkan sebagai ?cursor= untuk mengambil halaman berikutnya. Memerlukan paket Orbit.

Hapus berkas (Orbit)

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

Mengembalikan 204 No Content jika berhasil. Memerlukan paket Orbit. Berkas harus milik kunci ini.

Respons kesalahan

StatusArti
401Kunci API tidak valid atau kedaluwarsa
403Fitur memerlukan paket Orbit
404Berkas tidak ditemukan atau bukan milik kunci ini
429Batas permintaan terlampaui
500Kesalahan internal server, coba lagi nanti
502Penyimpanan untuk sementara tidak tersedia, coba lagi nanti

Batasan

BatasanGratisOrbit
Ukuran berkas maks2 GB10 GB
TTL maks7 hari30 hari atau permanen
Unggahan per hari10Tak terbatas
Volume unggahan per hari (per IP)10 GBTak terbatas
Unggahan bersamaan1 per IP1 per IP dan per kunci API
Kuota penyimpanan✗500 GB
Daftar file✗✓
Hapus lebih awal✓✓
Berkas khusus pengunggah✗✓
Panjang kata sandi min8 karakter
Permintaan per IP30 per 10 detik
Koneksi per IP10 bersamaan

Enkripsi

Berkas dienkripsi di perangkat Anda sebelum diunggah. Server hanya menyimpan teks terenkripsi dan tidak dapat mendekripsi berkas Anda.

KomponenAlgoritma / Nilai
Derivasi kunciArgon2id (time=3, memory=64 MiB, parallelism=1)
SandiXChaCha20-Poly1305 AEAD

Perubahan apa pun pada teks terenkripsi menyebabkan dekripsi gagal. Server memverifikasi bahwa pengunduh mengetahui kata sandi yang benar menggunakan token satu arah yang diturunkan dari kunci enkripsi, sebelum menyajikan teks terenkripsi.