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. No accounts, no custody, no one who can move your coins but you.

Our apps

One so far, with more to come.

Fortis Wallet

Android 8+ · direct download & Obtainium

A non-custodial mobile wallet for Bitcoin XBT and Bitcoin BTC. Your recovery phrase is generated on your device, encrypted under a password you choose, and never leaves it.

  • 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 USD value
  • One unlock — fingerprint, face, or device PIN — opens every wallet
  • Phrase and password screens blocked from screenshots, screen recording, and the app switcher
  • A 1% fee (min 400 sat) funds the backend — added as a transaction output, shown before you sign

Latest: v0.2.0 · ~10 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 onboarding Fortis Wallet receive screen Fortis Wallet send screen

What sets it apart

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

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 account, nothing held over you

No sign-up, no login. The backend only ever 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.

Yours to leave with

A standard 12- or 24-word BIP-39 phrase with BIP-84 derivation — restore it in any compatible wallet. No Google Play Services (the scanner is built in). 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, no third-party SDKs of any kind. 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.