Architecture
The parts of TurboDL and how the engine works.
The parts
shared engine Rust library, no UI
turbodl egui app
turbodl-cli command line
turbodl-mcp MCP server (rmcp)
extensions Chrome and Firefox
profiles default profile and JSON Schema
The engine
| Module | Purpose |
|---|---|
engine/probe | First request: size, byte ranges, name, ETag; network retries |
engine/plan | Segments restored from the state or split from scratch |
engine/worker | One connection per segment, batched writes (256 KiB), retries with growing waits |
engine/splitter | Initial split and re-split of the largest remaining segment |
engine/finish | Destination, state saved every 2 s, finalization, history |
resume | .part.turbodl file without secrets, written atomically |
request / auth | Request, ${VAR} headers, Netscape cookies, Basic |
resolvers | Google Drive |
stats | history.jsonl history, aggregates and insights |
Front ends get no message per received block: they read a snapshot at their own pace, which keeps the display smooth whatever the speed.
The desktop app
| Module | Purpose |
|---|---|
queue | Download list, waiting queue, persistence in downloads.json |
bridge | Single instance and native messaging host for the extensions |
i18n | Interface texts in English, French and Spanish; English is the fallback |
theme + icons | Light/dark themes tinted by the accent color, Phosphor icon font |
update | Version lookup, package download with the engine, checksum, file replacement with rollback |
ui | Windows and dialogs |
Technical choices
- Rust: no garbage collector nor global lock, one native program per platform.
- egui: immediate-mode interface rendered by the GPU, without an embedded browser.
- rustls: TLS without depending on OpenSSL.