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: 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

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

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 v1.3.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

# berkas dihapus permanen setelah unduhan pertama
$ 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.

Hanya token

# Anda bisa menggunakan token 10 karakter saja, bukan URL lengkap
$ ttl get aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

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 pustaka enkripsi yang sama 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 lima cara berbeda:

1. Pembuatan otomatis (hanya pengiriman)

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

Membuat kata sandi acak 8 karakter secara kriptografis dari set karakter [0-9A-Za-z]. Hanya tersedia saat send di terminal.

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
--timeout DURASIBatas waktu transferotomatis
--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 transferotomatis
-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

Batas waktu

Bawaan: otomatis — dihitung berdasarkan ukuran berkas dengan asumsi 1 Mbps + margin 2 menit (minimum 5 menit). Timpa dengan --timeout 10m atau --timeout 1h.

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,"password":"aB3kL9mX"}

# unduh
$ ttl --json get -p aB3kL9mX 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), dan pengelolaan berkas (daftar dan hapus).

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
$ ttl activate ttl_orbit_aBcDeFgHiJ...
Orbit plan activated. Key saved to /usr/local/bin/ttl.key

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

# kirim dengan TTL diperpanjang
$ ttl send -t 30d large-backup.tar.gz

# 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}]}

Mengembalikan semua berkas yang diunggah dengan kunci ini. 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

Batasan

BatasanGratisOrbit
Ukuran berkas maks2 GB10 GB
TTL maks7 hari30 hari
Muat naik harian1050
Kuota penyimpanan500 GB
Daftar dan hapus
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 MB, 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.