KGet v1.7.0
A fast, modern download manager written in Rust.
HTTP/HTTPS · FTP/SFTP · WebDAV · BitTorrent · Metalink · yt-dlp · CLI · GUI · Library
Why KGet?
Most download tools are either too simple (single-connection wget-clones) or too bloated (full Electron apps). KGet is a Rust-native download engine that gives you:
- Turbo multi-connection downloads — splits files into parallel byte ranges (up to 32× speed on fast connections)
- Full protocol coverage — HTTP/HTTPS, FTP/SFTP, WebDAV, magnet links, and yt-dlp in one binary
- Three frontends, one engine — native macOS SwiftUI app, cross-platform egui GUI (Linux/Windows), and a polished CLI
- A reusable Rust library — embed the download engine in your own app with a fluent builder API, typed errors, and event channels
Features
Download Protocols
| Protocol | Flag | Notes |
|---|---|---|
| HTTP / HTTPS | (auto) | Multi-connection, resume, gzip/brotli/lz4, proxy |
| FTP | --ftp |
Authenticated or anonymous |
| SFTP | --sftp |
Password or key-based; host-key verification |
| WebDAV | --webdav or webdav:// |
HTTP Basic auth embedded in URL |
| Magnet / BitTorrent | (auto-detected) | Built-in torrent client (torrent-native feature) |
Metalink .meta4 |
--metalink |
Multi-mirror fallback, SHA-256 verified (RFC 5854) |
| Video sites | --ytdlp or (auto-detected) |
YouTube, Vimeo, Twitch, TikTok, Instagram… via yt-dlp |
Download Engine
- Turbo mode (
-a) — parallel byte-range connections, resumable after interruption - Batch download (
--batch urls.txt) — one URL per line,#= comment, all run in parallel - Download scheduling (
--at "HH:MM") — sleep until a specific local wall-clock time - Speed limiting (
-l <bytes/s>) — global token-bucket throttle across all parallel threads - Custom HTTP headers (
-H "Name: Value") — inject arbitrary headers into any request - Auto-extract archives (
--extract) — unzip/tar/7z after download (.zip,.tar.gz,.7z, …) - SHA-256 verification (
--sha256 <hash>) — hard-error on mismatch; never silently accepts corrupt files - Sidecar checksum files — verifies against GNU/BSD
.sha256sumfiles - Content-Disposition — uses server-suggested filenames automatically
- Filename safety — rejects null bytes, path traversal, Windows reserved names, and >255-byte filenames
Integrity & Security
- Multi-algorithm checksums — SHA-256, SHA-512, SHA-1, MD5, BLAKE3
- SFTP host-key verification — checks
~/.ssh/known_hosts; hard-errors on mismatch - Retry policy — retries on 5xx and network errors only; fails immediately on 4xx
- JSONL events (
--jsonl) — machine-readable progress for scripts and agents
History & Persistence
- Download history — every download recorded to
history.json;--history/--history-clear - Interactive REPL (
--interactive) — full command history, all protocols, live config editing
GUIs
- Native macOS app — SwiftUI,
NavigationSplitViewsidebar, clipboard monitor, drag-and-drop URLs, speed sparkline, history tab, Share Extension, menu bar - Cross-platform egui GUI (
--gui) — Apple-inspired design, system-adaptive dark/light, sidebar navigation, shimmer progress bar
Library
- Fluent builder API —
kget::builder(url).connections(8).sha256("…").download()? - Typed errors —
KgetErrorenum withFromimpls forreqwest::Error,io::Error - Event channel —
.spawn()returns(JoinHandle, Receiver<DownloadEvent>) - Async API —
.download_async()/.download_all_async()behind--features async - In-memory download —
.download_to_bytes()and.download_to_reader() - Batch builder —
kget::batch([…]).concurrency(4).download_all()
Screenshots
| macOS App | CLI |
|---|---|
Installation
Homebrew (macOS / Linux)
Pre-built binaries
Download the latest release from Releases:
- macOS —
KGet-1.7.0-macOS-Native.dmg(native SwiftUI app, no Rust needed) - Linux/Windows — CLI binary or GUI binary (see release assets)
From crates.io
From source
# Rust toolchain: https://rustup.rs
# Linux dependencies (Debian/Ubuntu)
Usage
Basic downloads
# HTTP/HTTPS
# Save to a specific location
# Turbo mode — parallel connections, resumable
# Quiet mode
Protocols
# FTP (anonymous or authenticated)
# SFTP (password or key-based)
# WebDAV (auto-detected from scheme)
# Magnet link (auto-detected)
# Metalink — tries mirrors in priority order, verifies SHA-256
Video downloads
# Auto-detected from URL host
# Explicit flag with quality
# Qualities: best, 1080p, 720p, 480p, 360p, audio
Batch & scheduling
# Batch — one URL per line, # = comment
# Schedule for tonight at 11pm
Checksums & verification
# Verify against expected SHA-256
# Auto-extract after download
# Custom headers (useful for authenticated APIs)
History
Interactive REPL
kget> download -a -o ~/Downloads/ubuntu.iso https://releases.ubuntu.com/...
kget> download --sftp sftp://user@server/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
JSONL events (for scripts and agents)
|
All CLI flags
| Flag | Description |
|---|---|
-a, --advanced |
Turbo mode — parallel connections, resumable |
-O <path> |
Output file or directory |
-q, --quiet |
Minimal output |
-p <proxy> |
HTTP/SOCKS5 proxy |
-l <bytes/s> |
Speed limit in bytes per second |
-H "Name: Value" |
Extra HTTP header (repeatable) |
--sha256 <hash> |
Verify SHA-256 after download |
--extract |
Auto-extract archives after download |
--at "HH:MM" |
Schedule download for a specific local time |
--batch <file> |
Download all URLs from a file |
--ftp |
Use FTP protocol |
--sftp |
Use SFTP protocol |
--webdav |
Use WebDAV protocol |
--ytdlp |
Route through yt-dlp (auto-detected for video sites) |
--quality <q> |
yt-dlp quality: best, 1080p, 720p, 480p, 360p, audio |
--metalink |
Download from a Metalink manifest |
--history |
Show download history |
--history-clear [completed] |
Clear history |
--jsonl |
Emit JSON Lines events to stdout |
--gui |
Launch egui graphical interface |
-i, --interactive |
Interactive REPL mode |
Library Usage
KGet is also a reusable Rust library. Add it to your project:
[]
= "1.7.0"
# Optional: torrent client
= { = "1.7.0", = ["torrent-native"] }
# Optional: async API
= { = "1.7.0", = ["async"] }
Builder API (recommended)
use KgetError;
// Simple download
builder
.output
.connections
.sha256
.download?;
// Parallel batch with event channel
let results = batch
.concurrency
.output_dir
.download_all;
for r in results
// Event channel
let = builder
.connections
.spawn?;
for event in rx
handle.join.ok;
See LIB.md for the complete library reference.
Building
# CLI only (no GUI)
# With egui GUI (Linux/Windows/macOS)
# With native torrent client
# All features
# Native macOS app + DMG (requires Xcode)
# Cross-compile Linux/Windows from macOS (requires zig)
&&
Testing
Platform Support
| Platform | CLI | egui GUI | Native App |
|---|---|---|---|
| macOS | ✅ | ✅ | ✅ SwiftUI DMG |
| Linux | ✅ | ✅ | — |
| Windows | ✅ | ✅ | — |
Links
Community
License
MIT — see LICENSE