Product feature inventory
This inventory lists every user-facing capability of the app. Each row is one capability, with a matching details entry under docs/product/features/.
It is the product view of what the app does, and the base for the release-critical flows in critical-flows.md.
How to read it
IDs use the form <PREFIX>-<NN> (two digits). Prefixes: A app shell, W wallets, R receive, T transactions, S send, L lightning, B boltcard, D DFX services, O OpenCryptoPay, X settings. The Lightning prefix spans two areas: L-01 to L-08 are Lightning wallets and L-10 to L-18 Lightning payments; L-09 is not used. Critical flows use CF-<NN>.
Columns:
| Column | Meaning |
|---|---|
| ID | Stable identifier for the capability |
| Capability | Short name of what the user can do |
| Entry point | Where the user starts this capability in the UI |
| Tier | Release priority (see Tiers) |
| Flows | Critical flows that cover this row, or — if none |
| Details | Link to the full entry in the area file |
"Not reachable in the current build" means the screen is still registered in navigation, but there is no path from the UI to open it.
The Flows column lists the critical flows that name the row under Covers.
Tiers
- Critical: a release must not ship if it is broken.
- Critical (DFX): same, but DFX specific; marked separately so it is never dropped as "covered upstream".
- Important: tested before a release, may ship with a known defect if documented.
- Nice: best effort.
App shell
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| A-01 | First launch and onboarding | Cold start with no wallet | Critical | CF-01 | details |
| A-02 | Unlock at launch (password, biometrics) | Cold start with encrypted storage | Critical | CF-04 | details |
| A-03 | Deep links and URI schemes | Opening bitcoin:, lightning:, spark:, LNURL or dfxtaro:// links | Important | — | details |
| A-04 | Quick actions | Long press on the app icon | Nice | — | details |
| A-05 | Push notifications | Tap on a system notification | Important | — | details |
| A-06 | Screenshot protection on sensitive screens | Automatic | Important | — | details |
| A-07 | Handoff, Apple Watch and widgets | Handoff through Settings, General, Continuity; Watch and widgets not shipped | Nice | — | details |
| A-08 | Electrum connection and offline behaviour | Automatic | Critical | CF-02, CF-03 | details |
Wallets
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| W-01 | Create on-chain wallet | First launch; after deleting the main wallet | Critical | CF-01 | details |
| W-02 | Import wallet | Add wallet, Import wallet | Critical | CF-03, CF-08 | details |
| W-03 | Recovery phrase backup | Home backup banner; Settings, wallet, Export | Critical | CF-01 | details |
| W-04 | Home overview | After unlock | Critical | CF-01 | details |
| W-05 | Wallet screen | Home, wallet row | Critical | CF-01 | details |
| W-06 | Wallet details and delete | Settings, wallet row | Important | CF-01 | details |
| W-07 | Extended public key export | Wallet details, Show XPUB | Important | — | details |
| W-08 | Addresses | Wallet details, Addresses | Important | — | details |
| W-09 | Sign and verify message | Wallet details; address list | Important | — | details |
| W-10 | Payment codes (BIP47) | Not reachable in the current build | Nice | — | details |
| W-11 | Wallet picker and reorder | Used by other flows | Nice | — | details |
| W-12 | Multi-device wallet: create | Home, Multi-Device row, Add | Important | — | details |
| W-13 | Multi-device wallet: import | Home, Multi-Device row, Import | Important | — | details |
| W-14 | Multi-device wallet: cosigners and coordination export | Wallet details | Important | — | details |
Receive
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| R-01 | Receive on-chain | Wallet screen, Receive (home Receive: multi-device wallet first, else the main wallet when no Lightning wallet exists) | Critical | CF-01, CF-02 | details |
| R-02 | Azteco voucher redeem | Not reachable in the current build | Nice | — | details |
Transactions
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| T-01 | Transaction list | Wallet screen | Critical | CF-02, CF-03 | details |
| T-02 | Transaction status and details | Transaction row | Critical | CF-02 | details |
| T-03 | Fee bump and cancel (RBF, CPFP) | Transaction status | Important | — | details |
| T-04 | Fiat rates and fee estimates | Automatic | Important | — | details |
Send
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| S-01 | Send on-chain: destination | Home or wallet screen, Send | Critical | CF-03 | details |
| S-02 | Send on-chain: amount, fee, confirm, broadcast | After the destination | Critical | CF-03 | details |
| S-03 | Coin control | Send details, when coins are frozen | Important | — | details |
| S-04 | Sign with a hardware or watch-only wallet (PSBT) | Send details of a watch-only wallet | Important | — | details |
| S-05 | Multi-device co-signing | Send from a multi-device wallet; scanned PSBT | Important | — | details |
| S-06 | QR scanner | Scan buttons | Critical | CF-09 | details |
| S-07 | Broadcast raw transaction | Settings, Tools | Nice | — | details |
| S-08 | Is it my address | Settings, Tools | Nice | — | details |
Lightning wallets
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| L-01 | Spark wallet (self-custodial Lightning) | Home, Lightning row, Add | Critical (DFX) | CF-05 | details |
| L-02 | Lightning slot and provider precedence | Home | Critical (DFX) | CF-05 | details |
| L-03 | Existing Lightning wallet restored on Add | Home, Lightning row, Add | Critical (DFX) | CF-08 | details |
| L-04 | Lightning address | Spark receive | Important | — | details |
| L-05 | Spark on-chain deposits | Automatic | Important | — | details |
| L-06 | Spark recovery phrase export | Settings, Lightning wallet, Export | Critical (DFX) | CF-05 | details |
| L-07 | lightning.space wallet and provider picker | Settings, CHF Taproot Wallet (LDS DEV API flag) | Important | — | details |
| L-08 | Generic LNDHub wallet (legacy) | Not reachable in the current build | Nice | — | details |
Lightning payments
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| L-10 | Receive Lightning: invoice with amount | Home Receive when no multi-device wallet exists; Lightning wallet, Receive | Critical (DFX) | CF-05, CF-06 | details |
| L-11 | Receive Lightning: static address QR | Lightning receive without an amount | Important | CF-06 | details |
| L-12 | Invoice view, paid state, preimage | Lightning transaction row | Important | CF-06 | details |
| L-13 | Pay Lightning: invoice, address, LNURL-pay | Send with a Lightning destination | Critical (DFX) | CF-07, CF-11 | details |
| L-14 | LNURL-auth login | Scanned LNURL-auth code | Critical (DFX) | CF-09 | details |
| L-15 | LNURL routing and LNURL-withdraw | Scanned LNURL | Important | CF-09 | details |
| L-16 | Point of sale (LNDHub POS mode) | POS mode flag | Nice | — | details |
| L-17 | LApp browser (WebLN) | Not reachable in the current build | Nice | — | details |
| L-18 | Lightning rows in history | Wallet screen | Important | CF-06, CF-07, CF-10 | details |
Boltcard
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| B-01 | Create and program a card | Wallet screen, Cards, Add | Important | — | details |
| B-02 | Card details, limits, pause, delete | Wallet screen, card | Important | — | details |
| B-03 | Card backup | Wallet details | Nice | — | details |
| B-04 | Tap a card | Scanner, NFC button | Important | — | details |
DFX services
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| D-01 | DFX session and login | Automatic on the home screen | Critical (DFX) | CF-10, CF-11 | details |
| D-02 | Buy | Home, Buy | Critical (DFX) | CF-10 | details |
| D-03 | Sell | Home, Sell; return through the dfxtaro://sell link, or through a spark: payment link for a Spark sell | Critical (DFX) | CF-11 | details |
| D-04 | Swap | Home, Swap (DFX Swap flag) | Important | — | details |
| D-05 | DFX point of sale | Home, POS (DFX Point of Sale flag) | Nice | — | details |
OpenCryptoPay
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| O-01 | Pay an OpenCryptoPay request | Scanned payment request | Important | — | details |
Settings
| ID | Capability | Entry point | Tier | Flows | Details |
|---|---|---|---|---|---|
| X-01 | Settings menu | Home, more icon | Important | — | details |
| X-02 | General and privacy settings | Settings, General | Important | — | details |
| X-03 | Currency | Settings, Currency | Important | — | details |
| X-04 | Language | Settings, Language | Important | — | details |
| X-05 | Default view on launch | Not reachable in the current build | Nice | — | details |
| X-06 | Network and Electrum server | Settings, Network | Important | — | details |
| X-07 | Notification settings | Settings, Network, Notifications | Important | — | details |
| X-08 | Storage encryption and biometrics | Settings, Security | Critical | CF-04 | details |
| X-09 | Plausible deniability | Settings, Security, while encrypted | Important | CF-04 | details |
| X-10 | Tools | Settings, Tools | Nice | — | details |
| X-11 | Feature flags | Settings, Feature Flags | Important | — | details |
| X-12 | About, self-test, licensing, release notes | Settings, About | Nice | — | details |
Keeping it current
A pull request that adds, renames or removes a screen must update the matching inventory row and its details entry. Screens are matched by their registered name; a screen registered in several stacks counts once. npm run unit runs tests/unit/product-inventory.test.js, which runs scripts/product/check-inventory.js. The checker fails on:
- rows and entries: a README row without an entry or an entry without a row, a duplicate ID, an ID with an unknown prefix or the unused L-09, an invalid tier, a README row with an inventory ID but the wrong number of cells, a tier or entry point that differs between the row and the entry, a missing Routes, Tier or Entry line, a broken details link, or a Source path that is not a file;
- screens: no screen registered under
navigation/, a registered screen that no entry claims or that two entries claim, or a claimed name that is a stack wrapper, ignored, or not registered; - flows: a duplicate flow ID, an invalid flow tier, an empty Covers list or an unknown ID in it, a Critical row without a flow, or a Flows column that does not match the flows file.
Run node scripts/product/check-inventory.js directly to check the same rules.
Related documents
- critical-flows.md: the eleven flows that must pass before a release
- Handbook screenshots under docs/handbook
- Detox suite (Android) under tests/e2e
- Maestro suite under tests/e2e-maestro