KGet 1.7.0 – download manager crate with redesigned GUIs, new builder API, WebDAV, yt-dlp, and bug fixes

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.