Skip to content

About

DownloadCraft - lightweight offline-first IDM alternative in Rust (egui GUI + CLI, segmented downloads, scheduler, browser integration)

Resources

Stars

113 stars

Watchers

0 watching

Forks

Repository files navigation

Download Craft

Download Craft

A fast, free download manager — with a browser extension that catches the videos other tools miss.

Multi-connection downloads, a queue and scheduler, YouTube and 1,000+ sites through its own yt-dlp, and an extension that works with the app — or on its own.

Total downloads

Latest release License: MIT Made with Rust


Download for Windows   Download for macOS   Download for Linux

Chrome / Edge extension   Firefox extension

Windows 10/11 · macOS 12+ (Apple Silicon & Intel) · Linux x86-64 (DEB, RPM, AppImage) · all releases



Download Craft main window with active, paused, finished and failed downloads

🎬 See it in 90 seconds

download-craft-demo-720p-web.mp4

✨ What's new in 0.9.12

  • Get ready: one small window shows what Download Craft needs (browser connection, extension, yt-dlp, FFmpeg, Deno) and fixes it with one click. It opens by itself only when something is missing.
  • IDM-style head start: a plain file starts downloading while the Download File Info window is still open, so it is already partway done when you press Download.
  • Drag finished downloads out of the list onto a folder, the desktop or a chat.
  • A new About & Updates window, a clearer Speed tab (limit in KB/s or MB/s, a better graph), and a tidier Download all links window.
  • The video button says just "Download", opens on your usual quality, stays inside the player and hides under a site's pinned header.

Full notes: Release 0.9.12.


📸 Screenshots

Download File Info dialog

Capture a link — the app checks its real name and size before it starts.

Progress window with eight connections

Watch it fly — live speed, time left and every parallel connection.

Download all links window
Download all links — every file on a page with its type and size; check, filter, download.

Extension popup with Download with app and Download in browser sections

Extension popup — every video on the page, with the app or in the browser alone.

Extension Downloads tab

Downloads tab — browser downloads and the app's queue, side by side.

Download this video bar on a playing video
On every player — a small Download this video bar, see-through until you need it.

Settings window, Plugins page

Settings — yt-dlp, FFmpeg and the JavaScript runtime install and update themselves.

Download complete dialog

Done — open the file, open it with another app, or show its folder.


🚀 Features

Downloading

  • Dynamic segmentation (1–32 connections): a free connection takes over half of whatever would finish last, so no connection idles while another crawls. Crash-safe resume, self-healing connections and automatic link refresh. See the engine.
  • A global speed limit, per-download connections and a per-server connection cap.
  • Queue with concurrency limit, scheduler, retry-all-failed and finish actions (shutdown / sleep / hibernate).
  • Smart names from the server or the video title; safe auto-rename or overwrite; optional SHA-256 check.
  • HLS and DASH streams (live recording, AES-128), video + audio merged with FFmpeg.

Video sites

  • YouTube and 1,000+ sites through the app's own yt-dlp, kept up to date automatically — 1080p, 4K and merged audio + video. A portable JavaScript runtime installs in one click.
  • Facebook / Instagram reels, Vimeo, Bilibili and generic players detected from the page itself.

Browser extension (Chrome, Edge, Brave, Firefox)

  • Catches videos from network traffic, manifests and page data — HLS, DASH, MP4/WebM, subtitles.
  • Download this video bar on players, quality menus with sizes, right-click Download all links.
  • Works without the app: downloads, joins and saves videos in the browser.
  • IDM-style hand-off. A browser download is paused, handed to the app, and resumed in the browser if the app can't take it, so nothing is lost. Form (POST) downloads, the browser's own request headers, its proxy and the server it used all go along. Hold Alt while clicking to keep a download in the browser.
  • A live connection to the app. Capture settings (file types, excluded sites, minimum size) are edited in the app and pushed to the browser, with notifications when downloads finish. Site rules update from the project without a new extension release.
  • Safety net. YouTube runs the app's own engine or yt-dlp first (your choice in Settings), and the other one takes over if it fails. A file the server refuses to the app is fetched inside the open page instead. A video the app can't get is downloaded in the browser.

App

  • System / Dark / Light themes, status sidebar, search, sortable and resizable columns, bulk actions.
  • File names in any script (Bangla, Arabic, CJK …) with proper Indic shaping.
  • Clipboard detection, notifications, tray icon, antivirus hook, and a CLI that shares the same queue.

⚡ The engine

The download engine is a separate, reusable Rust crate, crates/downloadcraft-engine. Use it to make your own downloader fast too (MIT).

  • Work stealing. When a connection finishes, it splits the part that will finish last, in proportion to the measured speeds. A slow connection never holds the whole download back, and very slow ones are reopened.
  • The first request is the probe. Downloading starts at once; more connections join as soon as the server shows it supports ranges.
  • One pre-allocated file. There is no joining of parts at the end, so bytes are not copied a second time.
  • Crash-safe resume. A journal of the missing ranges is flushed every few seconds. A changed server file (size, ETag, Last-Modified) is detected instead of being stitched onto old bytes.
  • Self-healing. HTTP 429/503 lowers the connection count, a per-IP connection limit is detected, and cut or stalled connections resume where they stopped.
  • Expired links. A refused signed link is retried through its original URL, or re-resolved from its page, keeping every byte already downloaded.
  • Checks every reply. A wrong Content-Range, a different size, or an HTML error page instead of the file is caught before it can corrupt the download.
  • ZIP preview. download_craft peek <url> lists what's inside a remote ZIP without downloading it.

Measured on a home connection (100 MB, 8 connections) against 0.9.8: speedtest.belwue.net went from 70.6 s to 21.4 s, and mirror.nforce.com from 28.2 s to 19.7 s.

let done = downloadcraft_engine::Downloader::new(reqwest::Client::new())
    .download(Job::new(url, "file.iso"), progress, control)
    .await?;

📦 Install

Platform Download How
Windows 10/11 DownloadCraft-0.9.12-windows-x64-portable.zip Extract and run download_craft.exe — nothing to install.
macOS 12+ DownloadCraft-0.9.12-macos-Universal.zip Move Download Craft.app to Applications (development build, not notarized — right-click → Open the first time).
Ubuntu / Debian / Mint downloadcraft_0.9.12_amd64.deb sudo apt install ./downloadcraft_0.9.12_amd64.deb
Fedora downloadcraft-0.9.12-1.x86_64.rpm sudo dnf install ./downloadcraft-0.9.12-1.x86_64.rpm
Other Linux DownloadCraft-0.9.12-x86_64.AppImage Make it executable and open it.

Browser extension

  1. Chrome / Edge / Brave: extract DownloadCraft-Chrome-0.9.12.zip, open chrome://extensions, turn on Developer mode, choose Load unpacked and pick the browser-extension folder.
  2. Firefox: open about:debugging#/runtime/this-firefox → Load Temporary Add-on… → pick DownloadCraft-Firefox-0.9.12.xpi.
  3. In the app, open Settings → Browser Integration and press Install for your browser, so the extension can talk to the app. (Without it, the extension still downloads in the browser.)

Your queue and settings live in %APPDATA%\download_craft (Windows) and carry over between versions.


🛠️ Build from source

Prerequisites: Rust stable (MSVC build tools on Windows).

cargo build --release   # target\release\download_craft.exe (portable)
cargo test --workspace  # app + engine crate: unit and local HTTP tests (no network needed)
node --test browser-extension/*.test.js   # extension tests

Packaging: python scripts/package.py --platform windows --arch x64 (see PORTABLE-BUILDS.md for macOS and Linux).

Command line: download_craft.exe add "https://example.com/file.zip", download_craft.exe get "https://example.com/file.zip" -o out.zip, download_craft.exe peek "https://example.com/file.zip", download_craft.exe --help.


📄 License

MIT — free for open-source, closed-source and commercial use. See LICENSE; NOTICE.md lists the bundled third-party assets (Material Icons, fonts).

Screenshots use Blender Foundation open movies (CC BY) and public test streams.

About

DownloadCraft - lightweight offline-first IDM alternative in Rust (egui GUI + CLI, segmented downloads, scheduler, browser integration)

Resources

Stars

113 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages