View on GitHub

KGet

A modern, lightweight wget clone written in Rust for fast and reliable file downloads from the command line.

KGet Banner

KGet v1.7.0

Um gerenciador de downloads rápido e moderno escrito em Rust.
HTTP/HTTPS · FTP/SFTP · WebDAV · BitTorrent · Metalink · yt-dlp · CLI · GUI · Biblioteca

English Português Español

Por que KGet?

A maioria das ferramentas de download é simples demais (clones de wget com conexão única) ou pesada demais (apps Electron). O KGet é um motor de download nativo em Rust que oferece:


Recursos

Protocolos de Download

| Protocolo | Flag | Notas | |———–|——|——-| | HTTP / HTTPS | (auto) | Multi-conexão, retomável, gzip/brotli/lz4, proxy | | FTP | --ftp | Autenticado ou anônimo | | SFTP | --sftp | Senha ou chave; verificação de host-key | | WebDAV | --webdav ou webdav:// | HTTP Basic auth embutido na URL | | Magnet / BitTorrent | (auto-detectado) | Cliente torrent nativo (feature torrent-native) | | Metalink .meta4 | --metalink | Múltiplos mirrors com fallback, SHA-256 verificado (RFC 5854) | | Sites de vídeo | --ytdlp ou (auto-detectado) | YouTube, Vimeo, Twitch, TikTok, Instagram… via yt-dlp |

Motor de Download

Integridade e Segurança

Histórico e Persistência

GUIs

Biblioteca


Instalação

Homebrew (macOS / Linux)

brew tap davimf721/kget
brew install kget                           # somente CLI
brew install kget --with-gui                # com interface gráfica egui
brew install kget --with-torrent            # com cliente BitTorrent nativo
brew install kget --with-gui --with-torrent # todas as features opcionais

Binários prontos

Baixe a versão mais recente em Releases:

Via crates.io

cargo install Kget --features gui   # com GUI egui
cargo install Kget                  # somente CLI

A partir do código-fonte

# Toolchain Rust: https://rustup.rs

# Dependências Linux (Debian/Ubuntu)
sudo apt install -y libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
                    libxkbcommon-dev libssl-dev pkg-config

git clone https://github.com/davimf721/KGet.git
cd KGet
cargo build --release --features gui
./target/release/kget --gui

Uso

Downloads básicos

# HTTP/HTTPS
kget https://example.com/arquivo.zip

# Salvar em local específico
kget -O ~/Downloads/meuarquivo.zip https://example.com/arquivo.zip

# Modo turbo — conexões paralelas, retomável
kget -a https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso

# Modo silencioso
kget -q https://example.com/arquivo.zip

Protocolos

# FTP (anônimo ou autenticado)
kget --ftp ftp://ftp.gnu.org/gnu/emacs/emacs-28.2.tar.gz
kget --ftp ftp://usuario:senha@servidor/arquivo.zip

# SFTP (senha ou chave)
kget --sftp sftp://usuario:senha@servidor/caminho/arquivo.dat
kget --sftp sftp://usuario@servidor/caminho/arquivo.dat

# WebDAV (auto-detectado pelo scheme)
kget webdav://arquivos.meuservidor.com/compartilhamento/relatorio.pdf
kget webdavs://usuario:senha@nas.local/backups/db.tar.gz

# Magnet link (auto-detectado)
kget "magnet:?xt=urn:btih:HASH&dn=nomedoarquivo"

# Metalink — tenta mirrors em ordem de prioridade, verifica SHA-256
kget --metalink ubuntu-24.04.meta4
kget https://releases.ubuntu.com/ubuntu.meta4

Downloads de vídeo

# Auto-detectado pelo host da URL
kget https://www.youtube.com/watch?v=dQw4w9WgXcQ

# Flag explícita com qualidade
kget --ytdlp --quality 1080p https://vimeo.com/123456
kget --ytdlp --quality audio https://www.youtube.com/watch?v=dQw4w9WgXcQ

# Qualidades: best, 1080p, 720p, 480p, 360p, audio

Lote e agendamento

# Lote — uma URL por linha, # = comentário
kget --batch urls.txt -O ~/Downloads/

# Agendar para as 23h de hoje
kget --at "23:00" -a https://example.com/arquivo-grande.iso

Checksums e verificação

# Verificar SHA-256 esperado
kget --sha256 abc123def456... https://example.com/arquivo.iso

# Auto-extrair após download
kget --extract https://example.com/arquivo.tar.gz

# Headers customizados
kget -H "Authorization: Bearer token123" -H "Accept: application/json" https://api.exemplo.com/exportar

Histórico

kget --history                    # lista os últimos 50 downloads
kget --history-clear              # remove todas as entradas
kget --history-clear completed    # remove apenas concluídos/cancelados

REPL Interativo

kget --interactive
kget> download -a -o ~/Downloads/ubuntu.iso https://releases.ubuntu.com/...
kget> download --sftp sftp://usuario@servidor/backups/db.sql.gz
kget> download --ytdlp --quality 720p https://youtube.com/watch?v=...
kget> config set connections 8
kget> config set speed-limit 1048576
kget> history
kget> help

Eventos JSONL (para scripts e agentes)

kget --jsonl -a https://example.com/arquivo.iso | jq '.percent'

Todas as flags CLI

Flag Descrição
-a, --advanced Modo turbo — conexões paralelas, retomável
-O <caminho> Arquivo ou pasta de saída
-q, --quiet Saída mínima
-p <proxy> Proxy HTTP/SOCKS5
-l <bytes/s> Limite de velocidade em bytes por segundo
-H "Nome: Valor" Header HTTP extra (repetível)
--sha256 <hash> Verificar SHA-256 após download
--extract Auto-extrair arquivos após download
--at "HH:MM" Agendar download para horário local específico
--batch <arquivo> Baixar todas as URLs de um arquivo
--ftp Usar protocolo FTP
--sftp Usar protocolo SFTP
--webdav Usar protocolo WebDAV
--ytdlp Rotear pelo yt-dlp (auto-detectado para sites de vídeo)
--quality <q> Qualidade yt-dlp: best, 1080p, 720p, 480p, 360p, audio
--metalink Baixar de manifesto Metalink
--history Exibir histórico de downloads
--history-clear [completed] Limpar histórico
--jsonl Emitir eventos JSON Lines para stdout
--gui Abrir interface gráfica egui
-i, --interactive Modo REPL interativo

Uso como Biblioteca

O KGet também é uma biblioteca Rust reutilizável. Adicione ao seu projeto:

[dependencies]
Kget = "1.7.0"

API Builder (recomendada)

use kget::KgetError;

// Download simples
kget::builder("https://example.com/arquivo.zip")
    .output("./downloads/")
    .connections(8)
    .sha256("abc123...")
    .download()?;

// Lote paralelo com canal de eventos
let results = kget::batch([
    "https://mirror1.example.com/arquivo.iso",
    "https://mirror2.example.com/outro.tar.gz",
])
.concurrency(4)
.output_dir("./downloads/")
.download_all();

// Canal de eventos
let (handle, rx) = kget::builder("https://example.com/grande.iso")
    .connections(4)
    .spawn()?;

for event in rx {
    match event {
        kget::DownloadEvent::Progress { percent, .. } => print!("\r{:.1}%", percent),
        kget::DownloadEvent::Completed { path, .. } => println!("\nSalvo em {}", path),
        kget::DownloadEvent::Error(e) => eprintln!("Erro: {}", e),
        _ => {}
    }
}
handle.join().ok();

Veja LIB.pt-br.md para a referência completa da biblioteca.


Build

# Somente CLI (sem GUI)
cargo build --release

# Com GUI egui (Linux/Windows/macOS)
cargo build --release --features gui

# Com cliente torrent nativo
cargo build --release --features torrent-native

# App macOS nativo + DMG (requer Xcode)
./build-native-macos.sh

# Cross-compilar Linux/Windows a partir do macOS (requer zig)
brew install zig && cargo install cargo-zigbuild
./build-cross.sh

Testes

cargo test
cargo test --lib --test unit_tests
cargo test --test mock_server_tests
./run-tests.sh

Suporte a Plataformas

Plataforma CLI GUI egui App Nativo
macOS ✅ SwiftUI DMG
Linux
Windows

Comunidade

Licença

MIT — veja LICENSE