Fortis Tech Labs

Tools for Bitcoin self‑custody

We build non-custodial software for Bitcoin XBT and Bitcoin BTC — apps that put the keys, and the responsibility that comes with them, in the hands of the people who own the coins. Your keys are made on your device and stay there. Where we do hold anything for you (small Lightning payments, until they're worth a channel of your own), we say so plainly.

Our apps

One wallet — on Android, or straight in your browser.

Fortis Wallet

Android 8+ · direct download & Obtainium

A mobile wallet for Bitcoin XBT, Bitcoin BTC and Lightning, locked with your fingerprint. Your recovery phrase is generated on your phone, encrypted there, and never leaves it.

  • Locked with your fingerprint (or face, or device PIN): the key that opens the app is held in your phone's secure hardware and is released only when you unlock — one unlock opens every wallet
  • Locks itself a minute after you leave it, and clears your keys from memory; swaps carry on in the background
  • Asks again before it shows your recovery phrase or sends coins
  • Your recovery phrase is encrypted on the phone (Argon2id + XChaCha20-Poly1305) and never sent anywhere
  • Every screen is kept out of screenshots, screen recordings and the recent-apps view
  • 12- or 24-word BIP-39 phrase, BIP-84 native SegWit, optional passphrase ("25th word")
  • Up to 10 named wallets — any mix of XBT and BTC — from the one phrase
  • Send & receive with QR codes, a built-in camera scanner, or paste
  • Fee presets or a custom sat/vB rate; "take the fees out of this amount"; sweep a whole balance
  • History with a tap-through to a block explorer; approximate value in USD, EUR or 28 other currencies
  • Lightning as a wallet of its own (how it works): pay invoices, Lightning addresses, LNURL and BOLT12; get paid while the app is closed; move sats on-chain ⇄ Lightning; a history that itemises every fee
  • Help & support in Settings, and a Send to support button on every error
  • Swap BTC ↔ XBT with other people — atomic and non-custodial (how swaps work)
  • A 1% fee (min 400 sat) funds the backend — added as a transaction output, shown before you sign

Latest: v0.6.3 · ~16 MB · Android 8+ · all releases & changelog

How to install
  1. On your phone, tap Download APK above. Your browser warns that this kind of file can harm your device — choose Download / OK.
  2. Open the file — from the download notification, or Files → Downloads → fortis-wallet.apk.
  3. The first time, Android asks whether to let your browser install unknown apps. Tap Settings, turn on Allow from this source, then go back.
  4. Tap Install. Play Protect may say it doesn't recognise this developer — expected for any app not shipped through the Play Store, not a sign anything's wrong. Tap More details → Install anyway (some phones say Install without scanning).
  5. Tap Open.

Keep it updated: install Obtainium, then tap Add to Obtainium above (or in Obtainium: Add App → paste github.com/fortistechlabs/fortis). It watches for new releases and prompts you to update — there's no in-app updater.

Verify it's genuine — the real check behind that Play Protect prompt: apksigner verify --print-certs fortis-wallet.apk should report certificate SHA-256
16:1A:B9:3F:D5:71:21:99:6A:E0:8E:FD:B4:82:75:DF:D4:AE:55:9B:CB:10:64:12:FB:C4:50:79:1B:94:CD:48

Fortis Wallet home: BTC, Lightning and XBT wallets Lightning wallet: receive with an invoice QR code Lightning wallet: ledger history with the balance after each entry Lightning wallet: move to an on-chain BTC wallet

Fortis Wallet — Web

Any modern browser · installable as a PWA · no download

A non-custodial wallet running entirely in your browser. Your recovery phrase is generated on your device and never leaves it — there's no account and nothing held on a server but public chain data. Open it, use it, or add it to your home screen and it works like any other app.

  • Up to 10 named wallets — any mix of XBT and BTC — from the one phrase
  • Optional quick-unlock via your device's fingerprint, face, or screen lock (WebAuthn), password always works as a fallback
  • Installable as a Progressive Web App — an icon on your home screen, works offline once loaded
  • Optional air-gapped signing — watch a wallet on one device, sign transactions on a separate one that never touches the network
  • Same open-source Rust core as the Android app — the signing code isn't reimplemented per platform
How to sign fully offline (air-gapped)

Split one wallet across two browsers or devices: a watch-only copy for everyday use, and a signing copy you keep off the network entirely. No second app — it's built into Fortis Wallet.

  1. On the device holding the seed, open Settings and tap Copy fingerprint.
  2. On the other device, add a wallet with Watch an address, pasting that same account's xpub plus the fingerprint into Master fingerprint.
  3. To send: on the watch-only wallet, fill in Send as usual, tap Review, then Export for offline signing — a QR code and a text block, neither carrying any key material.
  4. On the signing device — disconnected from the network — open Settings → Import & sign offline transaction and paste or scan it in. The destination, amount, and fee shown are read from the transaction itself, not just repeated from the other device, so check them there. Tap Sign.
  5. Bring the signed result back to the watch-only wallet's Send → Import signed transaction and tap Broadcast.

Building, reviewing, and signing on the offline device all work from the transaction data alone — it never needs a connection for any of it.

Fortis Wallet web onboarding Fortis Wallet web wallet screen Fortis Wallet web history screen Fortis Wallet web settings screen

What sets it apart

The basics work the way you'd expect. These are the parts that don't.

Swap BTC ↔ XBT, no middleman

Trade one coin for the other with another person. Both sides lock their coins in a contract on chain: either both get paid, or both get their coins back. Nobody, us included, can take them. How swaps work →

Lightning you can reconcile

Your Lightning node runs on your phone, with keys from a phrase that never leaves it. The history is a ledger: every payment, move and fee (network, transfer, routing), with the balance after each, so every sat adds up. How Lightning works →

Made for Bitcoin XBT

Bitcoin XBT is a chain almost no wallet supports. Fortis runs it right alongside regular Bitcoin (BTC), chosen per wallet.

Cross-chain replay protection

Both directions are covered. Every XBT send is signed with SIGHASH_UNIFIED (Knots PR #357), which binds the signature to the XBT chain — automatic, nothing to enable. Going the other way, a BTC send can optionally carry an oversized OP_RETURN that makes that exact transaction invalid on XBT (off by default; adds a little fee).

Entropy from your hands

Creating a wallet, you can shake the phone, scribble on the screen, or let it sample CPU-timing jitter — real physical noise folded into the seed on top of the system RNG, with a meter for how much you've stirred in.

Straight about your hardware

The key that unlocks the app goes into your phone's secure element — StrongBox or the TEE — when there is one. When there isn't, Settings says so plainly: "software only." No pretending.

No sign-up, no login

No email, no password on a server. For on-chain wallets the backend only sees public addresses and finished signed transactions; a random per-install token rate-limits abuse and is tied to nothing about you. If it's unreachable, the app reads the chain from public explorers instead. Lightning needs a little more, all listed in the privacy policy.

Yours to leave with

A standard 12- or 24-word BIP-39 phrase with BIP-84 derivation — restore it in any compatible wallet. The scanner is built in, and the wallet works without Google Play Services (only Lightning payment notifications need it). Open source, MIT; every release APK signed with the same published key.

How we build

One core, every platform

The security-critical code — key derivation, coin selection, signing, seed encryption — is a single Rust library shared by the Android app and the web wallet. The crypto isn't reimplemented per platform.

Open and checkable

Source is public under the MIT licence. Every release APK is signed with one key whose SHA-256 fingerprint is published, so apksigner can confirm a download is the real thing.

No trackers

No analytics, no ad SDKs. The one third-party SDK is Google's Firebase Cloud Messaging, used only to notify you of Lightning payments. Everything the backend can see is spelled out in the privacy policy.

Our software is early. Back up your recovery phrase offline and start with small amounts.