PaperPhone Plus Desktop 是 Paperphone-plus 的 macOS 桌面客户端版本,基于 Electron 构建。它将原项目的 React 前端封装为原生桌面应用,提供完整的即时通讯功能,并内置网络代理支持。
- 私聊 & 群聊,支持文字、图片、视频、文件、语音消息
- 一对一视频/语音通话 & 群组通话
- 朋友圈(Moments)动态发布与浏览
- 联系人管理、扫码添加好友
- E2EE(端对端加密):所有消息在发送前加密,服务器无法读取
- 前向保密(Forward Secrecy):基于 Double Ratchet 算法,每条消息使用不同密钥
- 抗量子加密:集成 CRYSTALS-Kyber 后量子密钥封装,抵御量子计算攻击
- 加密库:libsodium (X25519, XSalsa20-Poly1305, Ed25519)
- 支持 SOCKS5、HTTP、HTTPS 代理协议
- 系统级透明代理 — 所有 HTTP 和 WebSocket 流量自动走代理
- 多代理配置管理,一键切换
- 代理延迟测试
- 配置持久化,重启自动恢复
- macOS Universal Binary(同时支持 Intel 和 Apple Silicon)
- Telegram 风格桌面横屏布局(左侧边栏 + 右侧主面板)
- 侧边栏宽度可拖拽调整(280px–480px)
- 窗口位置 & 大小记忆
- 外部链接自动在系统浏览器中打开
- 暗色模式支持
前往 Releases 页面下载安装包:
| 文件 | 说明 |
|---|---|
PaperPhone Plus-x.x.x-macOS.dmg |
DMG 安装镜像(Universal) |
PaperPhone Plus-x.x.x-universal-mac.zip |
ZIP 压缩包 |
- Node.js >= 18
- npm >= 9
- macOS 系统
# 克隆仓库
git clone https://github.com/619dev/ppp-mac.git
cd ppp-mac
# 安装依赖
npm install
# 开发模式(Vite 热重载 + Electron)
npm run dev:electron
# 构建生产版本
npm run build
# 打包 macOS 安装包
npm run build:mac- 打开应用,进入登录页面
- 点击代理设置图标
- 添加代理节点(支持 SOCKS5 / HTTP / HTTPS)
- 填写主机、端口、用户名(可选)、密码(可选)
- 激活代理并测试连接
代理通过 Electron 的 session.setProxy() API 实现,对所有网络请求(包括 WebSocket)透明生效。
┌─────────────────────────────────────────┐
│ Electron Main Process │
│ ┌─────────┐ ┌──────────┐ ┌────────┐ │
│ │ Proxy │ │ Window │ │ IPC │ │
│ │ Manager │ │ Manager │ │Handler │ │
│ └─────────┘ └──────────┘ └────────┘ │
│ ↕ session.setProxy() ↕ IPC │
├─────────────────────────────────────────┤
│ Preload (contextBridge) │
├─────────────────────────────────────────┤
│ Renderer (React 19 + Vite) │
│ ┌──────┐ ┌───────┐ ┌──────┐ ┌──────┐ │
│ │Login │ │ Chats │ │Calls │ │Moments│ │
│ └──────┘ └───────┘ └──────┘ └──────┘ │
│ ┌─────────────────────────────────┐ │
│ │ Crypto (libsodium + Kyber) │ │
│ │ Double Ratchet + E2EE │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
| 层级 | 技术 |
|---|---|
| 桌面框架 | Electron 36 |
| 前端框架 | React 19 + TypeScript 5.7 |
| 构建工具 | Vite 6 |
| 状态管理 | Zustand 5 |
| 加密 | libsodium-wrappers-sumo + crystals-kyber-js |
| 打包 | electron-builder |
| 持久化 | electron-store |
├── electron/
│ ├── main.ts # 主进程:窗口、代理、IPC
│ └── preload.ts # 预加载:安全 API 桥接
├── src/
│ ├── api/ # HTTP、WebSocket、代理桥接
│ ├── components/ # UI 组件
│ ├── contexts/ # React Context(通话等)
│ ├── crypto/ # E2EE 加密模块
│ ├── hooks/ # 自定义 Hooks
│ ├── i18n/ # 国际化
│ ├── pages/ # 页面组件
│ ├── store/ # Zustand 状态管理
│ ├── utils/ # 工具函数
│ ├── App.tsx # React 根组件
│ ├── electron.d.ts # Electron API 类型声明
│ ├── index.css # 全局样式
│ ├── main.tsx # React 入口
│ └── vite-env.d.ts # Vite 类型声明
├── build/ # 应用图标资源
├── electron-builder.yml # 打包配置
├── tsconfig.electron.json # Electron TypeScript 配置
├── vite.config.ts # Vite 构建配置
└── package.json # 项目配置
本项目基于 Paperphone-plus 开发。
PaperPhone Plus Desktop is the macOS desktop client of Paperphone-plus, built with Electron. It wraps the original React frontend into a native desktop application with full instant messaging capabilities and built-in network proxy support.
- Private & group chat with text, images, videos, files, and voice messages
- One-on-one video/voice calls & group calls
- Moments (timeline) posting and browsing
- Contact management, QR code friend requests
- E2EE: All messages encrypted before sending; the server cannot read them
- Forward Secrecy: Based on the Double Ratchet algorithm, each message uses a unique key
- Post-Quantum Encryption: Integrated CRYSTALS-Kyber for resistance against quantum computing attacks
- Crypto Library: libsodium (X25519, XSalsa20-Poly1305, Ed25519)
- Supports SOCKS5, HTTP, and HTTPS proxy protocols
- System-level transparent proxy — all HTTP and WebSocket traffic automatically routed through proxy
- Multiple proxy profile management with one-click switching
- Proxy latency testing
- Persistent configuration, auto-restored on restart
- macOS Universal Binary (Intel + Apple Silicon)
- Telegram-style desktop layout (left sidebar + right main panel)
- Draggable sidebar width (280px–480px)
- Window position & size persistence
- External links open in system browser
- Dark mode support
Go to the Releases page and download the installer:
| File | Description |
|---|---|
PaperPhone Plus-x.x.x-macOS.dmg |
DMG installer (Universal) |
PaperPhone Plus-x.x.x-universal-mac.zip |
ZIP archive |
- Node.js >= 18
- npm >= 9
- macOS system
# Clone the repository
git clone https://github.com/619dev/ppp-mac.git
cd ppp-mac
# Install dependencies
npm install
# Development mode (Vite HMR + Electron)
npm run dev:electron
# Production build
npm run build
# Package for macOS
npm run build:mac- Open the app and go to the login page
- Tap the proxy settings icon
- Add a proxy node (SOCKS5 / HTTP / HTTPS)
- Enter host, port, username (optional), and password (optional)
- Activate the proxy and test the connection
The proxy is implemented via Electron's session.setProxy() API, transparently covering all network requests including WebSocket connections.
┌─────────────────────────────────────────┐
│ Electron Main Process │
│ ┌─────────┐ ┌──────────┐ ┌────────┐ │
│ │ Proxy │ │ Window │ │ IPC │ │
│ │ Manager │ │ Manager │ │Handler │ │
│ └─────────┘ └──────────┘ └────────┘ │
│ ↕ session.setProxy() ↕ IPC │
├─────────────────────────────────────────┤
│ Preload (contextBridge) │
├─────────────────────────────────────────┤
│ Renderer (React 19 + Vite) │
│ ┌──────┐ ┌───────┐ ┌──────┐ ┌──────┐ │
│ │Login │ │ Chats │ │Calls │ │Moments│ │
│ └──────┘ └───────┘ └──────┘ └──────┘ │
│ ┌─────────────────────────────────┐ │
│ │ Crypto (libsodium + Kyber) │ │
│ │ Double Ratchet + E2EE │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
| Layer | Technology |
|---|---|
| Desktop Framework | Electron 36 |
| Frontend | React 19 + TypeScript 5.7 |
| Build Tool | Vite 6 |
| State Management | Zustand 5 |
| Encryption | libsodium-wrappers-sumo + crystals-kyber-js |
| Packaging | electron-builder |
| Persistence | electron-store |
├── electron/
│ ├── main.ts # Main process: window, proxy, IPC
│ └── preload.ts # Preload: secure API bridge
├── src/
│ ├── api/ # HTTP, WebSocket, proxy bridge
│ ├── components/ # UI components
│ ├── contexts/ # React Context (calls, etc.)
│ ├── crypto/ # E2EE encryption modules
│ ├── hooks/ # Custom hooks
│ ├── i18n/ # Internationalization
│ ├── pages/ # Page components
│ ├── store/ # Zustand state management
│ ├── utils/ # Utility functions
│ ├── App.tsx # React root component
│ ├── electron.d.ts # Electron API type declarations
│ ├── index.css # Global styles
│ ├── main.tsx # React entry point
│ └── vite-env.d.ts # Vite type declarations
├── build/ # App icon assets
├── electron-builder.yml # Packaging configuration
├── tsconfig.electron.json # Electron TypeScript config
├── vite.config.ts # Vite build configuration
└── package.json # Project configuration
This project is built upon Paperphone-plus.