Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vault46

A vibe coded project

Vault46 is an iOS NIP-46 remote signer (bunker) for Nostr. It securely stores your private keys and allows other Nostr applications to request signatures without exposing your keys.

What is NIP-46?

NIP-46 defines a protocol for remote signing. Instead of giving your private key to every Nostr client, you can use Vault46 as a signing service. Clients send signing requests to Vault46 via relay, and you approve or deny each request on your device.

Features

  • Secure key storage using iOS Keychain (via Vault)
  • Face ID / Touch ID lock with passcode fallback, for the app and for approvals
  • Generate new Nostr keys or import existing ones (nsec or seed phrase)
  • Review and approve signing requests from connected clients, or always-allow a request type per client
  • Link clients two ways: show a bunker:// QR code, or open/paste a nostrconnect:// link
  • Manage connected client applications and the relays the signer listens on
  • Replies to legacy NIP-04 clients in NIP-04, everyone else in NIP-44

Building the Project

Prerequisites

  • Xcode 26 or later
  • iOS 26.2+ deployment target
  • An Apple Developer account (for signing)

Setup

  1. Clone the repository

  2. Copy the xcconfig template and configure your personal settings:

    cp User.xcconfig.template User.xcconfig
    
  3. Update User.xcconfig with your personal information:

    DEVELOPMENT_TEAM = YOUR_TEAM_ID
    BUNDLE_ID_PREFIX = com.yourcompany
    

    Replace YOUR_TEAM_ID with your Apple Developer Team ID and com.yourcompany with your bundle identifier prefix.

  4. Open Vault46.xcodeproj in Xcode

  5. Build and run

Tests

Model and service tests live in Vault46Tests (Swift Testing). Run them with Cmd-U or:

xcodebuild -project Vault46.xcodeproj -scheme Vault46 -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test

Dependencies

  • NostrKit - Nostr protocol implementation for iOS, including the BunkerSigner NIP-46 engine this app is built on
  • Vault - Secure storage wrapper for iOS Keychain

Architecture

The app follows a presenter-state pattern with SwiftUI:

  • Models - Signing requests, client session display helpers, and the SwiftData mirror of connected clients
  • Services - Key management (KeyService), the BunkerSigner lifecycle (BunkerService), session persistence (SessionStore), and device authentication (BiometricService)
  • Modules - Feature-based organization (Auth, Main, Splash) with presenter/state/view separation
  • Libs / Extensions - The TaskTrigger pattern used for async work from views, and URL routing

License

Vault46 is licensed under the PolyForm Noncommercial License 1.0.0. You may use, modify, and share the code and the app for any noncommercial purpose. Commercial use requires permission from SparrowTek LLC. See LICENSE for the full terms.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages