Privacy-focused dating on an open protocol.
An Expo React Native reference client for the OpenDating protocol.
Release status: approved for iOS and Android launch. See Release Status for verified capabilities, and the 1.0 Execution Roadmap for the path through GA.
OpenDating is an early dating client built around data minimization, coarse location, private service requests, and end-to-end encrypted direct messages. It currently connects to services operated by OpenDating on Cloudflare; federation and independent providers are post-GA work.
Under the hood, OpenDating uses Nostr as a protocol building block. The current discovery, matching, moderation, media, and delivery services are first-party OpenDating services; interchangeable independent providers are post-GA work.
OpenDating Mobile is the first reference client for the OpenDating protocol (v0.1).
| Traditional Dating Apps | OpenDating |
|---|---|
| Your data lives on their servers | Your identity is a key you own |
| They track your exact location | Only ~5 km coarse area shared |
| They can read your messages | End-to-end encrypted (NIP-44) |
| Profile portability varies by provider | An open profile format and export are planned for post-GA federation; they are not available in this release |
| Advertising and data monetization may be part of the model | No advertising or tracking-based monetization in the current build |
| Account portability varies | Portable identity is a protocol design goal; interoperable provider transfer is planned post-GA and is not available today |
|
|
┌──────────────────────────────────────────────┐
│ Expo UI │ ← Native components
├──────────────────────────────────────────────┤
│ App Screens │ ← Expo Router
├──────────────────────────────────────────────┤
│ Feature Hooks │ ← Domain logic
├──────────────────────────────────────────────┤
│ OpenDatingClient │ ← Protocol facade
├──────────────────┬───────────────────────────┤
│ opendating-proto │ NDK core │ ← Infrastructure
│ (crypto, types) │ (relay, events, auth) │
├──────────────────┴───────────────────────────┤
│ Nostr │
├──────────────────────────────────────────────┤
│ OpenDating Relay v0.1 (Cloudflare) │
└──────────────────────────────────────────────┘
The mobile app does not depend on backend implementation code. Integration uses the published [email protected] registry artifact (installed through the ^0.1.0 range), advertised service capabilities, and the OpenDating protocol specification. Protocol 0.1 is experimental; package 0.1.1 is pending registry publication and verification.
# Clone
git clone https://github.com/jongan69/opendating-mobile.git
cd opendating-mobile
# Install
cp .env.example .env
npm ci
# Run
npm start # Expo dev server
npm run ios # iOS simulator
npm run android # Android emulatornpm run typecheck # TypeScript strict — must pass with 0 errors
npm run lint # ESLint — must pass with 0 errors
npm test # Jest test suite| Document | Description |
|---|---|
| ARCHITECTURE | Layer diagram, data flow, design decisions |
| DESIGN | Visual principles, color system, typography, motion |
| SECURITY | Key storage, encryption, auth, trust model |
| PRIVACY | What's shared, what's not, limitations, controls |
| HANDOFF | Repository boundary, access inventory, quality gates, and continuation order |
| RELEASE-STATUS | Verified release behavior and current production blockers |
| ROADMAP-1.0 | Gated path from release containment through GA and federation |
| PROTOCOL-INTEGRATION | All 20+ protocol operations, request lifecycle, error handling |
| MOBILE-V0.1-COMPLETE | Release report with full feature inventory |
| CONTRIBUTING | Development workflow, code style, privacy rules |
| CHANGELOG | Version history |
| Category | Technology | Version |
|---|---|---|
| Framework | Expo | SDK 57 |
| Runtime | React Native | 0.86 |
| Language | TypeScript (strict) | 6.0 |
| Navigation | Expo Router | ~57 |
| UI Components | @expo/ui | ~57 |
| Nostr Client | @nostr-dev-kit/ndk | ^2.15 |
| Protocol | opendating-protocol | ^0.1.0 (registry: 0.1.0; 0.1.1 pending) |
| Gestures | react-native-gesture-handler | ~2.32 |
| Animation | react-native-reanimated | ^4.5 |
| Images | expo-image | ~57 |
| Secure Storage | expo-secure-store | ^57 |
| Location | expo-location | ^57 |
| Photos | expo-image-picker | ^57 |
| Haptics | expo-haptics | ^57 |
| SVG | react-native-svg | latest |
OpenDating Mobile is open source and welcomes contributions. See CONTRIBUTING.md for the development workflow, code style guide, and privacy rules.
Before submitting a PR:
npm run typecheckmust pass (0 errors)npm run lintmust pass (0 errors)- No backend implementation imports
- No hardcoded service pubkeys
- No raw GPS, nsec, or decrypted message plaintext in new code
- OpenDating — The protocol specification, backend relay, and
opendating-protocolnpm package - Nostr — The decentralized protocol OpenDating is built on
MIT © OpenDating
Built with ❤️ for privacy, portability, and genuine human connection.