# 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.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# 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 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
# 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.
$ ttl send -p mySecretPass -t 1h document.pdf
# O arquivo é excluído permanentemente após o primeiro download $ ttl send -b photo.jpg
$ 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)
$ 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.
# 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)
$ 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.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
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.
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:
$ 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.
$ 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.
-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.--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).
--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.
ttl.passwordSe 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.
-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.| Flag | Descrição | Padrão |
|---|---|---|
-p, --password P | Senha de criptografia | interativo |
--password-stdin | Ler senha do stdin | |
--password-file F | Ler senha de arquivo | |
-t, --ttl DUR | Tempo de validade | 7d |
-b, --burn | Excluir após leitura (download único) | desativado |
--timeout DUR | Timeout de transferência | auto |
--server URL | URL do servidor | https://ttl.space |
-h3, --http3 | Tentar HTTP/3 (QUIC), fallback para TCP | desativado |
--json | Saída JSON no stdout (para scripts e agentes de IA) | desativado |
| Flag | Descrição | Padrão |
|---|---|---|
-p, --password P | Senha de descriptografia | interativo |
--password-stdin | Ler senha do stdin | |
--password-file F | Ler senha de arquivo | |
-o, --output DIR | Diretório de saída | diretório atual |
--timeout DUR | Timeout de transferência | auto |
-h3, --http3 | Tentar HTTP/3 (QUIC), fallback para TCP | desativado |
--json | Saída JSON no stdout (para scripts e agentes de IA) | desativado |
Gratuito: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit adiciona: 14d 15d 28d 30d
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.
#!/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 # O link funciona exatamente uma vez, expira após 5 minutos
# 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.
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
ttl send / ttl get ou o modo --json. Os endpoints abaixo são para gerenciamento de 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.
$ 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.
| Estado | Significado |
|---|---|
401 | Chave API inválida ou expirada |
403 | Recurso requer plano Orbit |
404 | Arquivo não encontrado ou não pertence a esta chave |
429 | Limite de requisições excedido |
| Restrição | Gratuito | Orbit |
|---|---|---|
| Tam. máx. arquivo | 2 GB | 10 GB |
| TTL máx. | 7 dias | 30 dias |
| Envios por dia | 10 | 50 |
| Cota de armazenamento | — | 250 GB |
| Listar e excluir | — | ✓ |
| Comprimento mín. senha | 8 caracteres | |
| Requisições por IP | 30 por 10 segundos | |
| Conexões por IP | 10 simultâneas | |
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.
| Componente | Algoritmo / Valor |
|---|---|
| Derivação de chave | Argon2id (time=3, memory=64 MB, parallelism=1) |
| Cifra | XChaCha20-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.