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
| ADR | Title | Status | Date |
|---|---|---|---|
| 0001 | Apollo DM builds its own direct-download engine; libtorrent for BitTorrent; no aria2 | Accepted | 2026-10-21 |
| 0002 | The transfer engine lives in its own crates (velocity-transfer, velocity-curl) | Accepted | 2026-10-22 |
| 0003 | Apollo DM keeps its own technical identity, separate from V1's | Accepted | 2026-10-22 |
| 0004 | A reviewed git pin of curl-sys for the prototype; Apollo DM builds libcurl itself for releases | Accepted | 2026-10-22 |
| 0005 | What happens to V1 features whose meaning changes without aria2 | Accepted | 2026-10-22 |
| 0006 | Browser links to loopback or private addresses need the user's confirmation | Accepted | 2026-10-22 |
| 0007 | The first Apollo DM releases don't import anything from V1 | Accepted | 2026-10-22 |
| 0008 | Apollo DM has full proxy settings in its first release | Accepted | 2026-10-22 |
| 0009 | Build the engine first; no aria2 benchmark comparison for now | Accepted | 2026-10-22 |
| 0010 | Without a validator, resume after a length check and show "not verified" | Accepted | 2026-10-22 |
| 0011 | SFTP uses libssh2 through libcurl | Superseded by ADR-0013 | 2026-10-22 |
| 0012 | The direct-download engine runs as a supervised child process | Accepted | 2026-10-22 |
| 0013 | SFTP uses russh, in its own crate behind a shared transport interface | Accepted | 2026-10-24 |
| 0014 | libtorrent runs in a supervised helper process, on a child-process layer shared with the engine | Accepted | 2026-10-26 |
| 0015 | Logins are saved in the system keychain only when the user asks, one download at a time | Accepted | 2026-10-29 |
| 0016 | The released app is named "Velocity Download Manager V2" | Superseded by ADR-0018 | 2026-10-30 |
| 0017 | Apollo DM is licensed GPL-3.0-only, owned by Singlbase Technologies Limited, with contributions under a CLA | Accepted | 2026-10-31 |
| 0018 | The released app is named "Apollo Download Manager" | Accepted | 2026-11-05 |
| 0019 | A download can wait for the network | Accepted | 2026-11-05 |
| 0020 | The browser extension is published in the three browser stores | Accepted | 2026-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
The question starts as a decision issue. It lists the options, the verified facts and a recommendation. A recommendation is not a decision.
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).
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.
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:
The main-centred workflow is in DEVELOPMENT_WORKFLOW.md.
The agent account and the decision to defer branch protection are in #89 and AI_AGENT_ACCOUNT.md.
The product name is in #11.