Skip to content

619dev/ppp-mac

Repository files navigation

PaperPhone Plus

PaperPhone Plus Desktop

端对端加密即时通讯 macOS 桌面客户端

End-to-End Encrypted Messaging macOS Desktop Client

Platform Electron React TypeScript Vite License


中文 | English


中文

📖 简介

PaperPhone Plus Desktop 是 Paperphone-plus 的 macOS 桌面客户端版本,基于 Electron 构建。它将原项目的 React 前端封装为原生桌面应用,提供完整的即时通讯功能,并内置网络代理支持。

✨ 功能特性

💬 即时通讯

  • 私聊 & 群聊,支持文字、图片、视频、文件、语音消息
  • 一对一视频/语音通话 & 群组通话
  • 朋友圈(Moments)动态发布与浏览
  • 联系人管理、扫码添加好友

🔐 端对端加密

  • E2EE(端对端加密):所有消息在发送前加密,服务器无法读取
  • 前向保密(Forward Secrecy):基于 Double Ratchet 算法,每条消息使用不同密钥
  • 抗量子加密:集成 CRYSTALS-Kyber 后量子密钥封装,抵御量子计算攻击
  • 加密库:libsodium (X25519, XSalsa20-Poly1305, Ed25519)

🌐 网络代理

  • 支持 SOCKS5HTTPHTTPS 代理协议
  • 系统级透明代理 — 所有 HTTP 和 WebSocket 流量自动走代理
  • 多代理配置管理,一键切换
  • 代理延迟测试
  • 配置持久化,重启自动恢复

🖥️ 桌面特性

  • macOS Universal Binary(同时支持 Intel 和 Apple Silicon)
  • Telegram 风格桌面横屏布局(左侧边栏 + 右侧主面板)
  • 侧边栏宽度可拖拽调整(280px–480px)
  • 窗口位置 & 大小记忆
  • 外部链接自动在系统浏览器中打开
  • 暗色模式支持

📦 安装

从 Release 下载

前往 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

🔧 代理配置

  1. 打开应用,进入登录页面
  2. 点击代理设置图标
  3. 添加代理节点(支持 SOCKS5 / HTTP / HTTPS)
  4. 填写主机、端口、用户名(可选)、密码(可选)
  5. 激活代理并测试连接

代理通过 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 开发。


English

📖 Introduction

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.

✨ Features

💬 Instant Messaging

  • 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

🔐 End-to-End Encryption

  • 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)

🌐 Network Proxy

  • 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

🖥️ Desktop Features

  • 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

📦 Installation

Download from Releases

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

Build from Source

Prerequisites

  • Node.js >= 18
  • npm >= 9
  • macOS system

Steps

# 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

🔧 Proxy Configuration

  1. Open the app and go to the login page
  2. Tap the proxy settings icon
  3. Add a proxy node (SOCKS5 / HTTP / HTTPS)
  4. Enter host, port, username (optional), and password (optional)
  5. 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.

🏗️ Architecture

┌─────────────────────────────────────────┐
│            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          │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘

Tech Stack

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

📁 Project Structure

├── 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

📄 License

This project is built upon Paperphone-plus.

About

PaperPhonePlus MacOS Client

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors