Releasing v1.7.0 of KGet, a download manager library and CLI tool. This is the largest release so far, with changes
across the library API, both graphical frontends, and a number of bug and security fixes.
Library
The public API was rewritten. Entry points are kget::builder(url) for single downloads and kget::batch([...]) for
multiple files. Both expose fluent methods for connection count, speed limiting, proxy, checksums (SHA-256/512, SHA-1,
MD5, BLAKE3), retry config, and custom HTTP headers. .spawn() returns a Receiver for progress
tracking. .download_to_bytes() and .download_to_reader() handle in-memory use cases without filesystem writes.
Supported protocols: HTTP/HTTPS with parallel byte-range connections, FTP, SFTP, WebDAV, BitTorrent (librqbit,
torrent-native feature), Metalink (RFC 5854), yt-dlp.
GUIs
Both graphical frontends were fully redesigned. The egui GUI (Linux/Windows) now has a sidebar with per-category
download counts, system-adaptive dark/light theme, speed sparkline per active download, clipboard monitor,
drag-and-drop URL, and a history tab. The native macOS SwiftUI app received the same new features — history tab
reading from the persistent history.json, drag-and-drop from browsers, clipboard monitor with a dismissable banner, a
Share Extension for sharing URLs directly from Safari — along with a full layout overhaul using NavigationSplitView.
Bug and security fixes
- The parallel speed limiter was per-thread, so N connections at a 1 MB/s cap produced N MB/s actual throughput.
Replaced with a global Arc<Mutex> shared across rayon workers. - SFTP: a host-key verification failure was being caught and silently swallowed, effectively bypassing the check. Now
returns a hard error and aborts the connection. - validate_filename now rejects path traversal sequences (..), null bytes, filenames over 255 bytes, and Windows
reserved device names. - The simple downloader was retrying on 404/403/410. Permanent 4xx errors now fail immediately.
- File preallocation (set_len) was happening before confirming the server supports byte ranges, which could produce a
corrupted result on servers returning 200 instead of 206. Fixed.
Published on crates.io as Kget. Repo: GitHub - davimf721/KGet: KGet is a modern, lightweight download manager written in Rust for fast and reliable file downloads from the command line and native app for windows, linux and mac. · GitHub
Looking for feedback on the API design, and anyone willing to test on Linux or Windows where my coverage is thinner.