logo
icon

PaperPhone-Plus

A WeChat-style, end-to-end encrypted IM app built with React + Rust (Axum), featuring stateless ECDH E2EE, WebRTC video/voice calls, Cloudflare R2 file storage, 8-language i18n, and iOS PWA support — fully self-hostable.

A WeChat-style, end-to-end encrypted IM app built with React + Rust (Axum), featuring stateless ECDH E2EE, WebRTC video/voice calls, Cloudflare R2 file storage, 8-language i18n, and iOS PWA support — fully self-hostable.

PlatformZeabur
Dideploy10
Penerbitauthor619dev
Dideploy10 kali
Penerbit619dev
Dibuat2026-04-11
Tag
ChatSecurityCommunication

PaperPhone Plus

A WeChat-style, end-to-end encrypted instant messaging application. Rewritten with React 19 + TypeScript + Vite frontend and Rust (Axum) backend for maximum performance and type safety.

Security

  • Stateless ECDH + XSalsa20-Poly1305 — per-message ephemeral keys, forward secrecy without session state
  • Zero-knowledge server — only ciphertext is stored; private keys never leave the device
  • Four-tier key persistence — memory → localStorage → sessionStorage → IndexedDB, survives WebView restarts

Features

  • 📹 Video & Voice Calls — WebRTC P2P (1:1) + Mesh (group up to 6)
  • 👥 Group Chat — up to 2000 members, plain-text messaging, Do Not Disturb mode, member management
  • 🌐 Moments — social feed with text + up to 9 photos or 1 video (≤ 10 min), likes, comments, tag-based visibility
  • 👤 User Profile — contact profile page with Moments feed, bidirectional privacy controls (hide their / hide mine)
  • 📰 Timeline — Xiaohongshu-style public feed with masonry layout, up to 50 images/videos + 2000-char text, anonymous posting, likes & comments
  • ⏱️ Auto-Delete Messages — 5 tiers: never / 1 day / 3 days / 1 week / 1 month
  • 🔔 Push Notifications — Web Push (VAPID) + FCM + OneSignal + ntfy quad-channel (Chinese Android without Google Services supported)
  • 🌐 Multi-language — Chinese, English, Japanese, Korean, French, German, Russian, Spanish
  • 📱 iOS PWA — "Add to Home Screen" via Safari, no enterprise cert needed
  • 💬 Rich messaging: text, images, video, document files (PDF/DOCX/XLSX etc. with type icons), voice, 200+ emoji (8 categories), Telegram sticker packs, delivery receipts, typing indicators
  • 🗂️ Cloudflare R2 file storage (images, voice & video)
  • 🏷️ Friend Tags — tag-based contact filtering & Moments visibility control
  • 🎭 Telegram Sticker Packs — dynamic sticker packs with configurable pack list, unlimited quantity
  • 🔑 Two-Factor Auth (2FA) — Google Authenticator TOTP, 8 recovery codes
  • 📷 QR Code Scan & Share — scan QR to add friends or join groups; group QR codes with configurable expiry (1 week / 1 month / 3 months)
  • 👫 Friend System — friend requests require approval with up to 512-char message; custom nicknames; multi-tag grouping
  • 📤 File Upload — up to 500MB per file, Cloudflare R2 or local storage, with progress animation

After Deployment

  1. Open the domain assigned to the client service.
  2. Register an account — cryptographic keys are generated locally on your device.
  3. (Optional) Configure Cloudflare R2 for image/voice/video uploads — set R2_* variables on the server service.
  4. (Optional) Configure Cloudflare TURN for cross-network video calls — set CF_CALLS_APP_ID and CF_CALLS_APP_SECRET.
  5. (Optional) Enable push notifications — set VAPID_* variables for Web Push, FCM_* for native Android (Capacitor).
  6. (Optional) Enable Telegram sticker packs — set TELEGRAM_BOT_TOKEN and optionally STICKER_PACKS.

Tip: Zeabur + Vercel Hybrid

You can delete the deployed client service on Zeabur and use Vercel to host the frontend instead. This gives you Vercel’s global CDN for the frontend while Zeabur handles server/MySQL/Redis. Just set VITE_API_URL in Vercel to the public domain of this server service.

Docker Hub Images

  • facilisvelox/paperphone-plus-client:latest
  • facilisvelox/paperphone-plus-server:latest