Guia de uso

← Home

Início rápido

# Enviar arquivo — a senha é gerada automaticamente, link + senha são exibidos
$ 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

# Baixar — a senha é solicitada interativamente
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

O CLI criptografa, faz upload, download e descriptografa automaticamente. O servidor nunca vê sua senha nem seus dados em texto puro.

Instalação

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

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

Binário pré-compilado

# Baixar para sua plataforma a partir das releases
$ 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

A partir do código-fonte

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

Verificar

$ ttl version
ttl v1.3.0

Enviar arquivos

Envio simples

# Gerar senha automaticamente, TTL padrão de 7d
$ ttl send report.xlsx

Quando nenhuma senha é fornecida no terminal, o CLI pergunta:

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

Pressione Enter ou digite y para gerar automaticamente.

Senha personalizada

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

Excluir após leitura

# O arquivo é excluído permanentemente após o primeiro download
$ ttl send -b photo.jpg

TTL personalizado

$ ttl send -t 5m temp-credentials.txt   # expira em 5 minutos
$ ttl send -t 30m meeting-link.txt      # expira em 30 minutos
$ ttl send -t 6h backup.tar.gz          # expira em 6 horas
$ ttl send -t 1d daily-report.pdf       # expira em 1 dia
$ ttl send -t 3d project-archive.zip    # expira em 3 dias
$ ttl send -t 5d design-assets.zip      # expira em 5 dias
$ ttl send report.xlsx                  # expira em 7 dias (padrão)

Baixar arquivos

Interativo (Terminal)

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

A senha não é exibida. O nome original do arquivo é restaurado.

Apenas com token

# Você pode usar apenas o token de 10 caracteres em vez da URL completa
$ ttl get aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Diretório de saída

$ ttl get -o ~/Downloads aBcDeFgHiJ

Por padrão, os arquivos são salvos no diretório atual. Use -o / --output para especificar um diretório diferente.

Com flag de senha

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

Navegador

Você também pode baixar e descriptografar arquivos no navegador visitando o link diretamente. A interface web usa a mesma biblioteca de criptografia e pede a sua senha. Não é necessário instalar software.

Gerenciamento de senhas

A senha serve como valor inicial para a chave de criptografia. Ela nunca sai do seu dispositivo e nunca é enviada ao servidor. Existem cinco formas de fornecê-la:

1. Geração automática (apenas no envio)

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

Gera uma senha criptograficamente aleatória de 8 caracteres a partir de [0-9A-Za-z]. Disponível apenas no send em modo terminal.

2. Entrada interativa

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

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

A senha não é exibida e não é salva no histórico do shell. No send, primeiro você escolhe se deseja gerar automaticamente. No get, a senha é solicitada diretamente.

3. Flag: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password é visível na saída de ps aux e pode ser salvo no histórico do shell (~/.bash_history). Evite o uso em ambientes compartilhados e scripts. Use --password-stdin ou --password-file em vez disso.

4. Stdin: --password-stdin

# Passar via echo
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# Passar a partir do gerenciador de senhas
$ pass show ttl/key | ttl send --password-stdin data.zip

# Passar a partir de uma variável de ambiente
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

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

Lê a primeira linha do stdin. Útil em scripts, pipelines de CI/CD e automação. Se o stdin não for um terminal e nenhuma fonte de senha for especificada, o CLI encerra com um erro (exceto com --json, que gera automaticamente uma senha).

5. Arquivo: --password-file

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

Lê a primeira linha do arquivo (a quebra de linha final é removida). Compatível com Docker Secrets (/run/secrets/), arquivos do Vault Agent e padrões semelhantes.

6. Arquivo detectado automaticamente: ttl.password

Se nenhuma senha explícita for fornecida, o CLI procura um arquivo ttl.password ao lado do binário, depois ~/.ttl/password. A primeira linha é usada como senha.

Apenas uma fonte explícita de senha pode ser usada por vez. -p / --password, --password-stdin e --password-file não podem ser combinados. O arquivo ttl.password detectado automaticamente só é verificado quando nenhum destes é fornecido. Comprimento mínimo: 8 caracteres.

Referência de opções

Flags de envio

FlagDescriçãoPadrão
-p, --password PSenha de criptografiainterativo
--password-stdinLer senha do stdin
--password-file FLer senha de arquivo
-t, --ttl DURTempo de validade7d
-b, --burnExcluir após leitura (download único)desativado
--timeout DURTimeout de transferênciaauto
--server URLURL do servidorhttps://ttl.space
-h3, --http3Tentar HTTP/3 (QUIC), fallback para TCPdesativado
--jsonSaída JSON no stdout (para scripts e agentes de IA)desativado

Flags de download

FlagDescriçãoPadrão
-p, --password PSenha de descriptografiainterativo
--password-stdinLer senha do stdin
--password-file FLer senha de arquivo
-o, --output DIRDiretório de saídadiretório atual
--timeout DURTimeout de transferênciaauto
-h3, --http3Tentar HTTP/3 (QUIC), fallback para TCPdesativado
--jsonSaída JSON no stdout (para scripts e agentes de IA)desativado

Valores de TTL

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

Orbit adiciona: 14d 15d 28d 30d

Timeout

Padrão: auto — estimado com base no tamanho do arquivo assumindo 1 Mbps + 2 minutos de margem (mínimo 5 minutos). Substituir com --timeout 10m ou --timeout 1h.

Exemplos

Script: backup e upload

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

Copiar link para a área de transferência (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Copiar link para a área de transferência (Linux)

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

Segredo de uso único com autodestruição

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# O link funciona exatamente uma vez, expira após 5 minutos

Modo JSON (scripts & agentes de IA)

# envio — senha gerada automaticamente no modo JSON
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"}

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

# erros retornam ok:false
{"ok":false,"error":"Link not found"}

No modo --json, toda a saída é JSON estruturado no stdout. Se nenhuma senha for fornecida durante o envio, uma é gerada automaticamente e incluída na resposta. O código de saída é 0 em caso de sucesso e 1 em caso de erro.

Plano Orbit

Orbit desbloqueia arquivos maiores (10 GB), retenção mais longa (30 dias) e gerenciamento de arquivos (listar e excluir).

A chave API é detectada automaticamente: variável de ambiente TTL_API_KEY, ttl.key ao lado do binário ou ~/.ttl/key. Use ttl activate para salvar a chave ou escreva-a manualmente em qualquer um desses locais.

# ativar sua chave
$ ttl activate ttl_orbit_aBcDeFgHiJ...
Orbit plan activated. Key saved to /usr/local/bin/ttl.key

# verificar plano e uso
$ 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

# enviar com TTL estendido
$ ttl send -t 30d large-backup.tar.gz

# listar envios recentes
$ 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

# excluir um arquivo
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# remover chave salva
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

HTTP API

Upload e download requerem o pipeline de criptografia do CLI (Argon2id + XChaCha20-Poly1305 + AEAD em blocos). Para scripts, use ttl send / ttl get ou o modo --json. Os endpoints abaixo são para gerenciamento de arquivos Orbit.

Listar arquivos (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}]}

Retorna todos os arquivos enviados com esta chave. Requer plano Orbit.

Excluir arquivo (Orbit)

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

Retorna 204 No Content em caso de sucesso. Requer plano Orbit. O arquivo deve pertencer a esta chave.

Respostas de erro

EstadoSignificado
401Chave API inválida ou expirada
403Recurso requer plano Orbit
404Arquivo não encontrado ou não pertence a esta chave
429Limite de requisições excedido

Limites

RestriçãoGratuitoOrbit
Tam. máx. arquivo2 GB10 GB
TTL máx.7 dias30 dias
Envios por dia1050
Cota de armazenamento250 GB
Listar e excluir
Comprimento mín. senha8 caracteres
Requisições por IP30 por 10 segundos
Conexões por IP10 simultâneas

Criptografia

Os arquivos são criptografados no seu dispositivo antes de serem enviados. O servidor armazena apenas texto cifrado e não pode descriptografar seus arquivos.

ComponenteAlgoritmo / Valor
Derivação de chaveArgon2id (time=3, memory=64 MB, parallelism=1)
CifraXChaCha20-Poly1305 AEAD

Qualquer modificação no texto cifrado causa falha na descriptografia. O servidor verifica que o downloader conhece a senha correta antes de liberar o texto cifrado, usando um token unidirecional derivado da chave de criptografia.