Simon-Pierre Boucher
All apps & projects
OS Vault icon
Open Source
Swift

OS Vault

One phrase. Six chains. Nothing leaves your Mac.

A self-custody, multi-chain crypto wallet for macOS with its own vault encryption, keyless public RPCs, and sign-and-forget key handling.

6

chain families

11

EVM chains

600k

PBKDF2 rounds

32

passing tests

0

API keys required

12

words, one phrase

Overview

OS Vault refuses the usual wallet trade-off between convenience and sovereignty. It is a native macOS wallet where a single BIP-39 recovery phrase derives addresses for six chain families — Bitcoin, 11 EVM chains, Solana, Tron, XRPL, and TON — and where every endpoint is public and keyless, with automatic failover.

The mnemonic is sealed with OS Vault's own vault format: PBKDF2-HMAC-SHA512 at 600,000 rounds feeding AES-256-GCM, stored in a local file with no macOS Keychain, no iCloud, and no telemetry. Private keys exist only for the milliseconds a transaction is signed — every send re-derives the key from your password and discards it.

Real fee models are handled per chain: EIP-1559, OP-stack L1 data fees via oracle, Tron energy burn estimated pre-send, XRPL reserves shown as locked, and TON jetton-wallet indirection with excess refunds. Every stablecoin contract and decimal count was verified live on-chain before registration.

Key Features

Own vault encryption

PBKDF2-HMAC-SHA512 (600k rounds) into AES-256-GCM in a local 0600 file — no Keychain, no iCloud, no telemetry.

Sign-and-forget keys

The private key exists only during signing: every send re-derives it from your password and immediately discards it.

One phrase, every chain

The same 12 words derive Bitcoin (BIP-84), 11 EVM chains, Solana, Tron, XRPL, and TON — cross-validated against independent crypto stacks.

Zero mandatory API keys

Every endpoint is public and keyless with health-scored failover; the only optional egress is CoinGecko prices, one toggle to kill.

Real fee models, per chain

EIP-1559, OP-stack L1 data fees, Tron energy burn estimated pre-send, Solana ATA rent, TON jetton attachments with refunds.

On-chain verified tokens

Every stablecoin address and decimal was checked live — including traps like 18-decimal BNB-peg USDT and bridged USDC.e.

Notarized and sandboxed

App Sandbox, Hardened Runtime, Developer ID signed, notarized and stapled by Apple, with forced written-backup verification.

Watch-only Bitcoin

The Bitcoin wallet holds public descriptors only; a throwaway in-memory signer signs PSBTs on demand.

How It Works

  1. VaultCrypto + KeyManager

    The encryption mechanism and BIP-39 HD derivation lifecycle — password to key to vault.json, with wrong passwords and tampering indistinguishable under GCM authentication.

  2. Per-chain services

    Dedicated services for EVM JSON-RPC, Bitcoin (bdk-swift watch-only plus transient signer), Solana SPL/ATA, Tron, XRPL, and TON, each pairing wallet-core signing with keyless REST/RPC.

  3. TransactionService

    Implements EIP-1559 plus five other real fee models, including OP-stack L1 data fee oracles, BSC zero-base-fee, and Linea pinned base fees.

  4. Verified token registry

    Network and Token models encode a matrix of live-verified contract addresses and decimals across all supported chains, testnet defaults included.

Tech Stack

Core

Swift 6
SwiftUI
Pure SwiftPM (no .xcodeproj)
macOS 15.5+

Crypto

Trust wallet-core (vendored)
bdk-swift (Bitcoin Dev Kit)
solana-swift
BIP-39 / BIP-84 HD derivation

Infrastructure

PublicNode
mempool.space Esplora
TronGrid
xrplcluster
toncenter
CoinGecko (optional)

Release

Developer ID signing
Apple notarization + stapling
DMG with volume icon

Highlights

  • 32 tests cross-validate BIP-39/BIP-84 vectors, vault crypto, decimals, and address validators against independent crypto stacks
  • The vendoring script repackages Trust wallet-core for macOS SwiftPM — including an ld -r pass that resolves a duplicate Rust runtime symbol shared with the Bitcoin Dev Kit
  • Forced written-backup verification: the app makes you prove you wrote down 3 random words before the wallet exists
  • Every chain defaults to a testnet (Base Sepolia, Signet, Devnet, Nile) with TESTNET badges everywhere
  • One-tap RLUSD trustline on XRPL, with recipient trustlines checked before sending
  • No accounts, no keys, no configuration — macOS 15.5+ is the only requirement

Explore OS Vault

Self-custody multi-chain crypto wallet — the full source is on GitHub.