APEX Download Manager (ADM) is a native Rust desktop download manager composed of a Slint UI, a loopback-only daemon, a REST/SSE/WebSocket gateway, a scriptable CLI, and a browser Native Messaging host for the companion extension.
The repository contains real runtime implementations for the engine, storage, gateway, daemon, UI, CLI, native host, media tooling integration, scheduler, notifications, browser pairing, and release packaging. Current release status is alpha engineering until signed production artifacts are published by CI.
| Binary | Package | Role |
|---|---|---|
adm-ui |
apps/ui |
Slint desktop shell, settings, system tray, dialogs, queue and scheduler UI |
adm-daemon |
apps/daemon |
Production composition root for engine, storage, gateway, scheduler, and integrations |
adm-server |
apps/server |
Development gateway wrapper over the same runtime surface |
adm-cli |
apps/cli |
Local automation and support client |
adm-native-host |
apps/host |
Browser Native Messaging bridge |
All shipped binaries are single-instance guarded. The UI focuses the existing window on a second launch. The daemon, server, CLI, and native host fail fast or return a structured runtime error when another copy is already active.
- Data-dense Slint UI with localized dialogs, settings, queues, scheduler, notifications, themes, and RTL-aware text handling.
- Close-to-tray lifecycle:
general.close_to_traydefaults totrue; closing the window keeps ADM alive in the system tray when tray support is available. - Linked UI/daemon shutdown: a real UI exit calls the loopback-only
POST /api/v1/system/shutdownendpoint so the daemon can stop gracefully. - Loopback-only REST API at
http://127.0.0.1:57423by default, with LAN/public REST binds rejected. - Browser extension discovery, automatic Native Messaging pairing, one-click manual fallback, bearer-token auth, and protected add/capture/settings/event routes.
- Download task creation, pause, resume, retry, cancel, delete, verify, extract, queue, scheduler, automation, and event streaming surfaces.
- SQLite-backed persistence, readiness diagnostics, observability endpoints, notification spool, plugin registry operations, Telegram hooks, and WebDAV-scoped access to the configured download directory.
- Optional media operations through user-provided FFmpeg/FFprobe binaries; ADM does not download or bundle those tools.
ADM is local-first. The public runtime boundary is the operating-system user account plus loopback networking.
| Control | Current contract |
|---|---|
| REST bind | Only 127.0.0.1 and ::1 are accepted |
| Extension pairing | GET /v1/ping, POST /v1/pair/auto, and Native Messaging pairing |
| Extension auth | Authorization: Bearer <pairToken> on protected routes |
| Token storage | Pair tokens are opaque; hashes are stored instead of plaintext |
| Query tokens | Rejected for protected extension routes |
| Logs | Tokens, cookies, Authorization headers, signed URLs, and secrets must be redacted |
| Zero-click switch | ADM_DISABLE_ZERO_CLICK_PAIRING=1 disables automatic pairing |
| Native-host fixture override | ADM_DAEMON_WS_URL is for tests/support only |
See Security, Extension Integration, and Native Messaging.
| Purpose | Default |
|---|---|
| REST API | http://127.0.0.1:57423 |
| REST WebSocket | ws://127.0.0.1:57423/ws |
| SSE events | http://127.0.0.1:57423/api/v1/events/stream |
| Extension discovery | http://127.0.0.1:57423/v1/ping |
| Legacy JSON-RPC WebSocket | ws://127.0.0.1:9001 |
| UI show-existing-window IPC | 127.0.0.1:57424 |
Install the Rust toolchain pinned by rust-toolchain.toml, then run:
cargo build --workspace
cargo build --release --workspaceRun the main processes during development:
cargo run -p daemon --bin adm-daemon
cargo run -p ui --bin adm-ui
cargo run -p cli --bin adm-cli -- statusLinux UI builds commonly require GTK, AppIndicator, XDO, pkg-config, and OpenSSL development packages. Windows builds use the MSVC Rust toolchain. macOS builds require Xcode command-line tools.
Recommended local checks:
cargo fmt --all -- --check
cargo check --workspace --all-targets
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo deny check
python3 scripts/ci-source-gates.pyFocused checks used for lifecycle and integration work:
python3 scripts/e2e-feature-integrity-audit.py
python3 scripts/lifecycle-integration-strict-audit.py
python3 scripts/e2e-full-project-audit.py --inline-only
cargo check -p cli --bin adm-cli
cargo check -p settings-core --lib --testsThe desktop UI dependency graph can be slow to check on Windows because Slint and native desktop dependencies compile heavily. CI runs Rust checks on Rust-enabled runners and keeps source/static gates separate for fast structural feedback.
Release packaging accepts plain SemVer tags only:
v1.2.3
v1.2.3-alpha.1
Do not use slashes or branch-like tag names such as v0.3.0/github/homealpha. DEB, RPM, MSIX, and installer metadata derive package versions from the tag, and package managers reject / in version fields.
Start with docs/README.md. Primary references:
- Architecture
- API Reference
- Features
- Installation
- Configuration
- Extension Integration
- Native Messaging
- UI And Background Process
- Security
- Testing
- Release
The companion extension lives at:
https://github.com/Alaa91H/ADM-extension
The desktop side of discovery, automatic pairing, protected routes, and Native Messaging is implemented in this repository. The normal path is zero-click pairing through the installed native host; if the browser blocks that path, the extension should expose one clear button named ربط مع البرنامج and call the manual pairing method.
APEX Download Manager is licensed under the Business Source License 1.1. See LICENSE.