Skip to content

Alaa91H/ADM

Repository files navigation

APEX Download Manager Logo

CI Rust Platform Status License Latest Release

APEX Download Manager

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.

Runtime Binaries

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.

Current Capabilities

  • Data-dense Slint UI with localized dialogs, settings, queues, scheduler, notifications, themes, and RTL-aware text handling.
  • Close-to-tray lifecycle: general.close_to_tray defaults to true; 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/shutdown endpoint so the daemon can stop gracefully.
  • Loopback-only REST API at http://127.0.0.1:57423 by 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.

Security Model

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.

Default Local Endpoints

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

Build From Source

Install the Rust toolchain pinned by rust-toolchain.toml, then run:

cargo build --workspace
cargo build --release --workspace

Run 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 -- status

Linux 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.

Validate

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.py

Focused 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 --tests

The 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 Tags And Packaging

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.

Documentation

Start with docs/README.md. Primary references:

Browser Extension

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.

License

APEX Download Manager is licensed under the Business Source License 1.1. See LICENSE.