# 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.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# 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 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
# 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.
$ ttl send -p mySecretPass -t 1h document.pdf
# terpakai begitu unduhan pertama dimulai; setelah terputus, hanya unduhan itu yang bisa melanjutkan $ ttl send -b photo.jpg
$ 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)
$ 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.
# Anda bisa menggunakan token 10 karakter saja, bukan URL lengkap $ ttl get aBcDeFgHiJ
$ ttl get -o ~/Downloads aBcDeFgHiJ
Secara bawaan berkas disimpan di direktori saat ini. Gunakan -o / --output untuk menentukan direktori lain.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
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.
Kata sandi adalah dasar dari kunci enkripsi. Tidak pernah meninggalkan perangkat Anda dan tidak pernah dikirim ke server. Dapat ditentukan dengan enam cara berbeda:
$ 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).
$ 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.
-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.--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).
--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.
ttl.passwordJika 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.
-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.| Flag | Deskripsi | Bawaan |
|---|---|---|
-p, --password P | Kata sandi enkripsi | interaktif |
--password-stdin | Baca kata sandi dari stdin | |
--password-file F | Baca kata sandi dari berkas | |
-t, --ttl DURASI | Masa berlaku | 7d |
-b, --burn | Hapus setelah dibaca (satu unduhan) | nonaktif |
-u, --uploader-only | Hanya kunci API Anda sendiri yang dapat mengunduh (Orbit; alias --private) | nonaktif |
--timeout DURASI | Batas waktu transfer | tanpa batas |
--server URL | URL server | https://ttl.space |
-h3, --http3 | Coba HTTP/3 (QUIC), fallback ke TCP | nonaktif |
--json | Tulis output JSON ke stdout (untuk skrip dan agen AI) | nonaktif |
| Flag | Deskripsi | Bawaan |
|---|---|---|
-p, --password P | Kata sandi dekripsi | interaktif |
--password-stdin | Baca kata sandi dari stdin | |
--password-file F | Baca kata sandi dari berkas | |
-o, --output DIR | Direktori keluaran | direktori saat ini |
--timeout DURASI | Batas waktu transfer | tanpa batas |
-h3, --http3 | Coba HTTP/3 (QUIC), fallback ke TCP | nonaktif |
--json | Tulis output JSON ke stdout (untuk skrip dan agen AI) | nonaktif |
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
Bawaan: tanpa batas. Transfer yang macet akan berlanjut sendiri, dan berhenti jika tidak bisa diteruskan. Tetapkan batas dengan --timeout 30m atau --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
$ ttl send -p mypass123 file.pdf | pbcopy
$ ttl send -p mypass123 file.pdf | xclip -sel clip
$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env # tautan hanya berfungsi sekali, kedaluwarsa dalam 5 menit
# 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.
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
ttl send / ttl get atau mode --json. Endpoint di bawah untuk pengelolaan 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.
$ 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.
| Status | Arti |
|---|---|
401 | Kunci API tidak valid atau kedaluwarsa |
403 | Fitur memerlukan paket Orbit |
404 | Berkas tidak ditemukan atau bukan milik kunci ini |
429 | Batas permintaan terlampaui |
500 | Kesalahan internal server, coba lagi nanti |
502 | Penyimpanan untuk sementara tidak tersedia, coba lagi nanti |
| Batasan | Gratis | Orbit |
|---|---|---|
| Ukuran berkas maks | 2 GB | 10 GB |
| TTL maks | 7 hari | 30 hari atau permanen |
| Unggahan per hari | 10 | Tak terbatas |
| Volume unggahan per hari (per IP) | 10 GB | Tak terbatas |
| Unggahan bersamaan | 1 per IP | 1 per IP dan per kunci API |
| Kuota penyimpanan | ✗ | 500 GB |
| Daftar file | ✗ | ✓ |
| Hapus lebih awal | ✓ | ✓ |
| Berkas khusus pengunggah | ✗ | ✓ |
| Panjang kata sandi min | 8 karakter | |
| Permintaan per IP | 30 per 10 detik | |
| Koneksi per IP | 10 bersamaan | |
Berkas dienkripsi di perangkat Anda sebelum diunggah. Server hanya menyimpan teks terenkripsi dan tidak dapat mendekripsi berkas Anda.
| Komponen | Algoritma / Nilai |
|---|---|
| Derivasi kunci | Argon2id (time=3, memory=64 MiB, parallelism=1) |
| Sandi | XChaCha20-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.