A fast, modern download manager for Windows built with:
- Python 3.13 — Async download engine with dynamic segmentation
- Tauri 2 — Native Windows app shell (Rust)
- React + Vite — Modern UI with real-time progress
MiDM/
├── backend/ # Python async download engine
│ ├── core/
│ │ ├── downloader.py # IDM-style dynamic segment engine
│ │ └── manager.py # Queue, state persistence, scheduling
| | └── settings.py
│ └── server.py # WebSocket + HTTP bridge to UI
│
├── midm-ui/ # Tauri + React frontend
│ ├── src/
│ │ ├── components/
│ │ │ ├── TitleBar.jsx
│ │ │ ├── Sidebar.jsx
│ │ │ ├── DownloadList.jsx
│ │ │ └── AddDownloadModal.jsx
| | | └── SettingsModal.jsx
| | | └── Statusbar.jsx
│ │ ├── store/
│ │ │ └── downloadStore.js # Zustand + WebSocket state
│ │ ├── App.jsx
│ │ └── App.css
│ └── src-tauri/ # Tauri Rust shell
│
├── setup.bat # One-time setup
├── dev.bat # Development mode
├── build.bat # Build production .exe
└── requirements.txt
| Tool | Version | Download |
|---|---|---|
| Python | 3.11+ | https://python.org |
| Node.js | 18+ | https://nodejs.org |
| NPM | 11+ | https://npmjs.com |
| Rust | latest | https://rustup.rs |
| VS Build Tools | 2019+ | https://visualstudio.microsoft.com/visual-cpp-build-tools/ |
setup.bat# Terminal 1 — Python backend
python backend/server.py
# Terminal 2 — Tauri UI
cd midm-ui
npm run tauri devOr use the helper script:
dev.batbuild.batOutput → midm-ui/src-tauri/target/release/bundle/nsis/MiDM_1.0.0_x64-setup.exe
MiDM implements IDM's core algorithm:
- Probe: HEAD request to get file size and check
Accept-Ranges: bytes - Segment: Split file into N equal parts (default: 8)
- Parallel fetch: Each segment downloads on its own async connection
- Dynamic stealing: When a thread finishes, it splits the largest remaining segment in half and takes over the second half — no thread ever idles
- Merge: Segments assembled in order into the final file
- Resume:
.partfiles persist across restarts via state saved to~/.midm/state.json
The UI communicates with the Python backend over ws://localhost:7475/ws.
Commands (UI → Backend):
{ "cmd": "add_download", "data": { "url": "...", "connections": 8 }, "id": "1" }
{ "cmd": "pause", "data": { "id": "abc123" }, "id": "2" }
{ "cmd": "resume", "data": { "id": "abc123" }, "id": "3" }
{ "cmd": "cancel", "data": { "id": "abc123" }, "id": "4" }
{ "cmd": "remove", "data": { "id": "abc123", "delete_file": false }, "id": "5" }Events (Backend → UI):
{ "type": "event", "event": "task_added", "data": { ...task } }
{ "type": "event", "event": "task_progress", "data": { ...task } }
{ "type": "event", "event": "task_updated", "data": { ...task } }
{ "type": "event", "event": "task_removed", "data": { "id": "abc123" } }HTTP API (for browser extension): http://localhost:7475
GET /status → health check
GET /downloads → all tasks
POST /add → { "url": "..." }
GET /stats → aggregated stats
| Shortcut | Action |
|---|---|
Ctrl+N |
New download |
Escape |
Close modal |
- Phase 1: Dynamic segment engine
- Phase 2: WebSocket bridge
- Phase 3: Tauri + React UI
- Phase 4: Browser extensions (Chrome, Firefox, Edge)
- Phase 5: Scheduler (download at night, speed limits)
- Phase 6: System tray icon
- Phase 7: Auto-update
Copyright 2026 Mohaimenul Islam Mubin
Licensed under the Apache License, Version 2.0. See LICENSE for details.