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

Un gestor de descargas rápido y moderno escrito en Rust.
HTTP/HTTPS · FTP/SFTP · WebDAV · BitTorrent · Metalink · yt-dlp · CLI · GUI · Biblioteca

English Português Español

¿Por qué KGet?

La mayoría de las herramientas de descarga son demasiado simples (clones de wget con una sola conexión) o demasiado pesadas (apps Electron). KGet es un motor de descarga nativo en Rust que ofrece:


Características

Protocolos de Descarga

| Protocolo | Flag | Notas | |———–|——|——-| | HTTP / HTTPS | (auto) | Multi-conexión, reanudable, gzip/brotli/lz4, proxy | | FTP | --ftp | Autenticado o anónimo | | SFTP | --sftp | Contraseña o clave; verificación de host-key | | WebDAV | --webdav o webdav:// | HTTP Basic auth en la URL | | Magnet / BitTorrent | (auto-detectado) | Cliente torrent nativo (feature torrent-native) | | Metalink .meta4 | --metalink | Múltiples mirrors con fallback, SHA-256 verificado (RFC 5854) | | Sitios de video | --ytdlp o (auto-detectado) | YouTube, Vimeo, Twitch, TikTok, Instagram… via yt-dlp |

Motor de Descarga

Integridad y Seguridad

Historial y Persistencia

GUIs

Biblioteca


Instalación

Homebrew (macOS / Linux)

brew tap davimf721/kget
brew install kget                           # solo CLI
brew install kget --with-gui                # con interfaz gráfica egui
brew install kget --with-torrent            # con cliente BitTorrent nativo
brew install kget --with-gui --with-torrent # todas las características opcionales

Binarios precompilados

Descarga la última versión desde Releases:

Desde crates.io

cargo install Kget --features gui   # con GUI egui
cargo install Kget                  # solo CLI

Desde código fuente

# Toolchain Rust: https://rustup.rs

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

Descargas básicas

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

# Guardar en ubicación específica
kget -O ~/Downloads/miarchivo.zip https://example.com/archivo.zip

# Modo turbo — conexiones paralelas, reanudable
kget -a https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso

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

Protocolos

# FTP (anónimo o autenticado)
kget --ftp ftp://ftp.gnu.org/gnu/emacs/emacs-28.2.tar.gz
kget --ftp ftp://usuario:clave@servidor/archivo.zip

# SFTP (contraseña o clave)
kget --sftp sftp://usuario:clave@servidor/ruta/archivo.dat
kget --sftp sftp://usuario@servidor/ruta/archivo.dat

# WebDAV (auto-detectado por scheme)
kget webdav://archivos.miservidor.com/compartido/informe.pdf
kget webdavs://usuario:clave@nas.local/backups/db.tar.gz

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

# Metalink — prueba mirrors en orden de prioridad, verifica SHA-256
kget --metalink ubuntu-24.04.meta4
kget https://releases.ubuntu.com/ubuntu.meta4

Descargas de video

# Auto-detectado por el host de la URL
kget https://www.youtube.com/watch?v=dQw4w9WgXcQ

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

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

Lote y programación

# Lote — una URL por línea, # = comentario
kget --batch urls.txt -O ~/Downloads/

# Programar para las 23h de hoy
kget --at "23:00" -a https://example.com/archivo-grande.iso

Checksums y verificación

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

# Auto-extraer después de la descarga
kget --extract https://example.com/archivo.tar.gz

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

Historial

kget --history                    # lista las últimas 50 descargas
kget --history-clear              # elimina todas las entradas
kget --history-clear completed    # elimina solo completadas/canceladas

REPL Interactivo

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 y agentes)

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

Todas las flags CLI

Flag Descripción
-a, --advanced Modo turbo — conexiones paralelas, reanudable
-O <ruta> Archivo o carpeta de salida
-q, --quiet Salida mínima
-p <proxy> Proxy HTTP/SOCKS5
-l <bytes/s> Límite de velocidad en bytes por segundo
-H "Nombre: Valor" Header HTTP extra (repetible)
--sha256 <hash> Verificar SHA-256 después de la descarga
--extract Auto-extraer archivos después de la descarga
--at "HH:MM" Programar descarga para hora local específica
--batch <archivo> Descargar todas las URLs de un archivo
--ftp Usar protocolo FTP
--sftp Usar protocolo SFTP
--webdav Usar protocolo WebDAV
--ytdlp Enrutar por yt-dlp (auto-detectado para sitios de video)
--quality <q> Calidad yt-dlp: best, 1080p, 720p, 480p, 360p, audio
--metalink Descargar desde manifiesto Metalink
--history Mostrar historial de descargas
--history-clear [completed] Limpiar historial
--jsonl Emitir eventos JSON Lines a stdout
--gui Abrir interfaz gráfica egui
-i, --interactive Modo REPL interactivo

Uso como Biblioteca

KGet también es una biblioteca Rust reutilizable. Agrégala a tu proyecto:

[dependencies]
Kget = "1.7.0"

API Builder (recomendada)

use kget::KgetError;

// Descarga simple
kget::builder("https://example.com/archivo.zip")
    .output("./downloads/")
    .connections(8)
    .sha256("abc123...")
    .download()?;

// Lote paralelo con canal de eventos
let results = kget::batch([
    "https://mirror1.example.com/archivo.iso",
    "https://mirror2.example.com/otro.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!("\nGuardado en {}", path),
        kget::DownloadEvent::Error(e) => eprintln!("Error: {}", e),
        _ => {}
    }
}
handle.join().ok();

Consulta LIB.es.md para la referencia completa de la biblioteca.


Build

# Solo CLI (sin GUI)
cargo build --release

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

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

# App macOS nativa + DMG (requiere Xcode)
./build-native-macos.sh

# Cross-compilar Linux/Windows desde macOS (requiere zig)
brew install zig && cargo install cargo-zigbuild
./build-cross.sh

Tests

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

Soporte de Plataformas

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

Comunidad

Licencia

MIT — ver LICENSE