Decentralized messaging for iOS with Lightning payments.
A high-performance iOS messaging engine written 100% in Swift. Pulse facilitates peer-to-peer, decentralized communication without reliance on centralized servers. Built for the 2026 iOS ecosystem with secure key management, mesh networking, Lightning zaps, and real-time data streaming via Nostr relays.
No servers. No silos. Just Pulse.
Pulse is inspired by Bitchat and the broader Nostr ecosystemβprotocols championed by Jack Dorsey and the open-source community. The goal is to move away from "platforms" and toward "protocols," ensuring that your identity and your conversations remain yours, regardless of who owns the network.
This isn't just an app; it's a step toward sovereign communicationβprivate, censorship-resistant, and entirely user-owned.
| Category | What Pulse Does |
|---|---|
| Mesh Discovery | Nearby peer detection via Bluetooth LE and MultipeerConnectivity |
| End-to-End Encryption | All messages encrypted with Curve25519 key exchange |
| Message Signing | Ed25519 signatures verify sender authenticity |
| Resilient Delivery | Acknowledgements, deduplication, and multi-hop routing |
| Privacy Controls | Toggles for link previews, discovery profile sharing, and data retention |
| Offline-First | Local SwiftData persistence; works without internet |
| Category | What Pulse Does |
|---|---|
| Zap Requests | Send Bitcoin tips via Lightning to any Nostr user |
| Zap Receipts | Receive and display incoming zaps on messages |
| Lightning Addresses | Support for user@domain.com style addresses |
| Wallet Integration | Opens Zeus, Muun, Phoenix, BlueWallet, or any BOLT11 wallet |
| BOLT11 Validation | Full invoice parsing and security verification |
| Category | What Pulse Does |
|---|---|
| Relay Connections | Connect to multiple Nostr relays for global reach |
| Event Signing | secp256k1 Schnorr signatures for Nostr events |
| Location Channels | Geohash-based public channels for local discovery |
| Profile Metadata | NIP-01 profile publishing with Lightning address support |
| NIP-42 Auth | Relay authentication challenge/response |
| Category | What Pulse Does |
|---|---|
| Invoice Security | Three-way amount verification (UI β Zap Request β Invoice) |
| Signature Validation | All Nostr events cryptographically verified |
| Rate Limiting | DoS protection for relay events |
| Certificate Pinning | TLS validation for all network connections |
| Clipboard Protection | Auto-clear sensitive data after 30 seconds |
| Privacy UI | .privacySensitive() modifiers hide data in app switcher |
| Wallet URI Sanitization | Prevents injection attacks in external wallet calls |
| Secure Keychain | Keys stored with WhenUnlockedThisDeviceOnly access control |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SwiftUI Views β
β ChatView β ProfileView β SettingsView β ZapButton β Radar β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ChatManager β ZapManager β MeshManager β IdentityManager β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β UnifiedTransportManager (Mesh + Nostr) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β MultipeerConnectivity β BLE Advertiser β NostrTransport β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β LNURLService β Bolt11Validator β SecureNetworkSession β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Managers/ β Business logic (chat, mesh, identity, zaps, persistence)
- Networking/ β Transport protocols, Nostr relay connections, LNURL/BOLT11 handling
- Models/ β Data types (Message, PulsePeer, NostrIdentity, Zap)
- Views/ β SwiftUI interface with Liquid Glass design
- Utilities/ β Clipboard security, debug logging, avatar management
| Component | Purpose |
|---|---|
Bolt11Validator |
Parses and validates Lightning invoices |
NostrEventValidator |
Validates event signatures and format |
ZapSecurityGuard |
Three-way amount verification |
WalletURISanitizer |
Sanitizes wallet deep links |
SecureNetworkSession |
TLS certificate validation |
ClipboardManager |
Auto-clears sensitive clipboard data |
RateLimiter |
Prevents event flooding |
- Clone the repo
- Open
Pulse/Pulse.xcodeprojin Xcode 26+ - Select an iOS 26 simulator or device
- Run the
Pulsescheme
git clone https://github.com/JesseRod329/Pulse-Messaging-.git
cd Pulse-Messaging-/Pulse
open Pulse.xcodeprojTo send zaps, you'll need a Lightning wallet installed:
- Zeus (recommended) - Full node control
- Phoenix - Simple and automatic
- Muun - Bitcoin + Lightning
- BlueWallet - Multi-wallet support
xcodebuild -project Pulse.xcodeproj -scheme PulseTests \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,OS=26.0,name=iPhone 17' \
test| Test File | Coverage |
|---|---|
PulseIdentityTests |
Identity creation, encryption, signing |
Bolt11ValidatorTests |
Invoice parsing, malicious input rejection |
Bolt11ParserTests |
BOLT11 field extraction |
NostrNormalizationTests |
Deterministic JSON for NIP-57 |
SecurityHardeningTests |
Rate limiting, URI sanitization |
ProductionSecurityTests |
End-to-end security scenarios |
MeshSimulatorTests |
Virtual peer network testing |
| Doc | Description |
|---|---|
| PULSE_iOS26_ARCHITECTURE.md | Technical deep-dive into the system design |
| PULSE_AUDIT_REPORT.md | Security audit findings and remediations |
| BITCOIN_PLAN.md | Lightning integration security hardening plan |
| IMPROVEMENTS_SUMMARY.md | Changelog of major improvements |
| QUICK_START.md | Fast-track setup guide |
| Threat | Mitigation |
|---|---|
| Invoice Swapping | BOLT11 amount verification against zap request |
| Fake Zap Receipts | Schnorr signature validation on all receipts |
| Wallet URI Injection | Strict scheme whitelist + character filtering |
| Relay Event Flooding | Fixed-window rate limiter (60 events/sec) |
| MITM Attacks | Certificate validation on all HTTPS/WSS connections |
| Clipboard Sniffing | Auto-clear after 30s + clear on background |
| Key Extraction | Keychain with biometric/device-only access |
- Encryption: Curve25519 (X25519) key exchange + ChaCha20-Poly1305
- Signing: Ed25519 for mesh messages, secp256k1 Schnorr for Nostr
- Hashing: SHA-256 for event IDs and description hashes
- Key Storage: iOS Keychain with
.whenUnlockedThisDeviceOnly
Pulse draws heavily from:
- Nostr β The decentralized social protocol
- Bitchat β Jack Dorsey's vision for open, censorship-resistant messaging
- secp256k1 β Elliptic curve cryptography
- NIP-57 β Lightning Zaps specification
- BOLT11 β Lightning invoice format
This project exists because open protocols matter.
MIT License. See LICENSE for details.
Built with β€οΈ by Jesse Rodriguez




