PEM Message is a mobile-first private messenger scaffold built for end-to-end encrypted messaging. This first pass creates a monorepo that keeps security boundaries explicit:
- React Native + TypeScript for mobile UI and product logic
- Native bridge contracts for secure storage and sensitive cryptographic operations
- Go backend for relay, queueing, key directory, and encrypted blob storage
- Ciphertext-oriented shared DTOs, protocol interfaces, and docs
apps/mobile: React Native TypeScript app shellservices/backend-go: Go backend servicepackages/shared-types: Shared versioned DTOs and domain typespackages/protocol: Protocol engine interfaces and helperspackages/ui: Reusable UI componentsnative/ios: iOS native integration placeholdersnative/android: Android native integration placeholdersinfra: Local development infrastructuredocs: Architecture, threat model, API, and security notes
- Node.js 20+
- pnpm 10+
- Go 1.25+
- Docker and Docker Compose
- React Native native toolchains for iOS and Android
make infra-uppnpm dev:backendIn local development, attachment upload/download tickets may be rewritten from internal blob hosts like minio or localhost to the API request host so physical devices can reach them. For production, set BACKEND_S3_PUBLIC_ENDPOINT to the real client-facing storage origin instead of relying on this fallback.
pnpm installpnpm dev:mobile