Apollo Download ManagerApollo Download Manager

Architecture decision records

An architecture decision record (ADR) states one decision, why it was taken and what follows from it. Records are numbered and never rewritten. A changed decision gets a new record that supersedes the old one.

Decisions

ADRTitleStatusDate
0001Apollo DM builds its own direct-download engine; libtorrent for BitTorrent; no aria2Accepted2026-10-21
0002The transfer engine lives in its own crates (velocity-transfer, velocity-curl)Accepted2026-10-22
0003Apollo DM keeps its own technical identity, separate from V1'sAccepted2026-10-22
0004A reviewed git pin of curl-sys for the prototype; Apollo DM builds libcurl itself for releasesAccepted2026-10-22
0005What happens to V1 features whose meaning changes without aria2Accepted2026-10-22
0006Browser links to loopback or private addresses need the user's confirmationAccepted2026-10-22
0007The first Apollo DM releases don't import anything from V1Accepted2026-10-22
0008Apollo DM has full proxy settings in its first releaseAccepted2026-10-22
0009Build the engine first; no aria2 benchmark comparison for nowAccepted2026-10-22
0010Without a validator, resume after a length check and show "not verified"Accepted2026-10-22
0011SFTP uses libssh2 through libcurlSuperseded by ADR-00132026-10-22
0012The direct-download engine runs as a supervised child processAccepted2026-10-22
0013SFTP uses russh, in its own crate behind a shared transport interfaceAccepted2026-10-24
0014libtorrent runs in a supervised helper process, on a child-process layer shared with the engineAccepted2026-10-26
0015Logins are saved in the system keychain only when the user asks, one download at a timeAccepted2026-10-29
0016The released app is named "Velocity Download Manager V2"Superseded by ADR-00182026-10-30
0017Apollo DM is licensed GPL-3.0-only, owned by Singlbase Technologies Limited, with contributions under a CLAAccepted2026-10-31
0018The released app is named "Apollo Download Manager"Accepted2026-11-05
0019A download can wait for the networkAccepted2026-11-05
0020The browser extension is published in the three browser storesAccepted2026-11-07

Decisions still open are tracked as GitHub issues titled decision: …, for example #38 (in-process or child process). ARCHITECTURE.md lists the ones that shape the architecture.

How a decision is recorded

  1. The question starts as a decision issue. It lists the options, the verified facts and a recommendation. A recommendation is not a decision.

  2. The Product Owner decides, in the issue or in conversation. Only the PO accepts an architecture, scope, dependency, licensing or security decision (see AGENTS.md).

  3. The decision is written as the next ADR, in a PR that links the issue. It is based on 0000-template.md, and the PR also adds it to the table above.

  4. Documents that depend on the decision are updated in the same PR, for example ARCHITECTURE.md and the glossary.

Status values:

  • Proposed: written, not yet accepted.

  • Accepted: in force.

  • Superseded by ADR-NNNN: replaced; kept for history.

  • Rejected: considered and declined; kept so the question is not reopened without new evidence.

File names: NNNN-short-title.md, numbered in order and never reused.

Some workflow and identity decisions made before this folder existed are recorded as issue comments and in the docs that apply them: