MCPcopy Index your code
hub / github.com/david-bai00/PrivyDrop

github.com/david-bai00/PrivyDrop @v1.3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.3.0 ↗ · + Follow
964 symbols 2,881 edges 266 files 210 documented · 22% updated 13d agov1.3.0 · 2026-06-08★ 134
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PrivyDrop Logo

PrivyDrop - 基于 WebRTC 的隐私安全文件分享工具

English

开源协议

PrivyDrop (原 SecureShare) 是一个基于 WebRTC 的开源点对点(P2P)文件和文本分享工具。它无需服务器中转,所有数据在浏览器之间直接传输,确保端到端加密,为你提供极致的隐私安全保障。

我们相信,每个人都应掌控自己的数据。PrivyDrop 的诞生就是为了实现这一愿景:一个简单、快速、私密的分享解决方案。

在线体验 » | GitHub 仓库 »


PrivyDrop 界面截图

✨ 主要特性

  • 🔒 端到端加密: 基于 WebRTC 的 P2P 直连技术,所有文件和文本在浏览器间直接传输,不经过任何中央服务器。
  • 🔄 无限制文件传输 - 支持任意大小文件传输,通过 Chrome 的流式保存到磁盘功能实现(需设置保存目录)
  • 👥 多接收端支持 - 单个房间可同时让多个接收端并行获取文件/文本,加入房间不会中断正在进行的传输。
  • 📂 文件与文件夹传输: 支持多文件和整个文件夹的传输。
  • ⏸️ 断点续传: 自动从中断处恢复文件传输。只需设置保存目录即可启用此功能,确保即使在网络不稳定的情况下,您的大文件也能安全送达。如果中断,目前需要同时刷新发送端和接收端网页,重新开始传输即可。
  • 实时高效: 实时显示传输进度、自动计算传输速度。
  • 📝 富文本剪贴板: 支持在线编辑和发送格式化文本,不仅仅是文件。
  • 🔗 便捷分享: 通过链接或二维码轻松分享房间,建立连接。
  • 📱 多端支持: 响应式设计,支持桌面和移动端浏览器。
  • 🌐 国际化: 支持中文、英文等多个语言。
  • 🧭 站内导航不中断/状态保持: 在同一标签页的站内跳转(Next.js App Router 页面切换)时,进行中的传输不会中断,已选择的待发送内容与接收页已展示的文本/文件清单也不会丢失。该能力依赖前端的单例状态(Zustand Store)与单例连接服务(webrtcService)。

🛠️ 技术栈

  • 前端: Next.js 14, React 18, TypeScript, Tailwind CSS, shadcn/ui
  • 后端: Node.js, Express.js, TypeScript
  • 实时通信: WebRTC, Socket.IO
  • 数据存储: Redis
  • 部署: Docker(Docker Compose)

🚀 快速上手

🐳 Docker 一键部署 (推荐)

零配置,一条命令完成部署!支持内网/公网/域名,自动签发/续期 HTTPS。

# 内网(无域名/无公网IP)
bash ./deploy.sh --mode lan-http

# 内网 + TURN(推荐用于复杂内网/NAT)
bash ./deploy.sh --mode lan-http --with-turn

# 内网 HTTPS(自签,开发/受管环境,显式开启 8443)
bash ./deploy.sh --mode lan-tls --enable-web-https --with-nginx

# 公网IP(无域名),含 TURN(推荐同源经 Nginx)
bash ./deploy.sh --mode public --with-turn --with-nginx

# 公网域名(HTTPS + Nginx + TURN + SNI 443 分流,自动申请/续期证书)
bash ./deploy.sh --mode full --domain your-domain.com --with-nginx --with-turn --le-email you@domain.com

完整说明见: docs/DEPLOYMENT_docker.zh-CN.md(模式一览、LAN TLS、自签限制、Let’s Encrypt 自动签发/续期)

提示(lan-tls 自签 HTTPS)

  • 首次访问需导入 CA 证书:docker/ssl/ca-cert.pem 到浏览器(或系统信任),否则浏览器会提示“证书无效/不受信任”。
  • 访问方式(默认):
  • Nginx: http://localhost
  • HTTPS: https://localhost:8443https://<你的局域网IP>:8443
  • 前端开发口(可选): http://localhost:3002http://<你的局域网IP>:3002
  • 启用 --with-nginx 时,前端与 API 同源(/api、/socket.io)更稳定;直连 :3002/:3001 仅用于调试,可能导致 CORS 或 404。
  • 若启用了 --enable-web-https 并导入 CA,浏览器与 API 走同源 HTTPS(8443)可避免 CORS;我们已默认放开常见开发来源(localhost:3002 等)。

部署优势:

  • ✅ 部署时间: 60 分钟 → 5 分钟
  • ✅ 技术门槛: Linux 运维 → 会用 Docker 即可
  • ✅ 环境要求: 公网 IP → 内网即可使用
  • ✅ 成功率: 70% → 95%+

详见: Docker 部署指南

💻 本地开发环境

在开始之前,请确保你的开发环境已安装 Node.js (v18+), npm 以及一个正在运行的 Redis 实例。

  1. 克隆项目 & 安装 redis

    bash git clone https://github.com/david-bai00/PrivyDrop.git cd PrivyDrop sudo apt-get install -y redis-server

  2. 配置并启动后端服务

    ```bash cd backend npm install

    复制开发环境变量文件,然后根据需要修改 .env.development

    cp .env_development_example .env.development

    npm run dev # 默认启动于 http://localhost:3001 ```

  3. 配置并启动前端应用 (在新的终端窗口中)

    ```bash cd frontend pnpm install

    复制开发环境变量文件,然后根据需要修改 .env.development,删除可选项

    cp .env_development_example .env.development

    pnpm dev # 默认启动于 http://localhost:3002 ```

  4. 开始使用 在浏览器中打开 http://localhost:3002 即可访问应用。

🗺️ 路线图

我们制定了一份公开的路线图,其中概述了项目的未来愿景和当前的工作重点。你可以通过它了解我们正在进行的工作,或是寻找可以贡献力量的地方。

➡️ 查看项目路线图

📚 文档

我们提供了详尽的文档来帮助你深入了解项目的设计和部署细节:

🤝 参与贡献

我们热烈欢迎任何形式的贡献!无论是报告 Bug、提出功能建议、提交代码还是加星,都对 PrivyDrop 的成长帮助巨大。请阅读我们的 贡献指南 来开始你的贡献之旅。

我们制定了所有贡献者都应遵守的 行为准则,请在参与前仔细阅读。

📄 开源协议

本项目采用 MIT 协议,详情请见 LICENSE 文件。

Extension points exported contracts — how you extend this code

MessageProcessorDelegate (Interface)
(no doc) [5 implementers]
frontend/lib/receive/MessageProcessor.ts
MockDirectoryHandle (Interface)
(no doc) [1 implementers]
frontend/tests/unit/streamingFileWriter.test.ts
Window (Interface)
(no doc)
frontend/types/global.d.ts
TocItem (Interface)
(no doc)
frontend/components/blog/TableOfContents.tsx
UseOneShotSlowHintOptions (Interface)
(no doc)
frontend/utils/useOneShotSlowHint.ts
SenderStoreResetPolicy (Interface)
(no doc)
frontend/stores/transferStoreReset.ts
UseFileTransferHandlerProps (Interface)
(no doc)
frontend/hooks/useFileTransferHandler.ts
JoinData (Interface)
(no doc)
backend/src/types/socket.ts

Core symbols most depended-on inside this repo

close
called by 173
frontend/tests/e2e/helpers/mockSaveDirectory.ts
waitForText
called by 137
frontend/tests/e2e/helpers/clipboardApp.ts
openClipboardApp
called by 77
frontend/tests/e2e/helpers/clipboardApp.ts
senderStatus
called by 54
frontend/tests/e2e/helpers/clipboardApp.ts
cn
called by 48
frontend/lib/utils.ts
writeJsonArtifact
called by 46
frontend/tests/e2e/helpers/artifacts.ts
log
called by 41
frontend/lib/transfer/MessageHandler.ts
receiverStatus
called by 37
frontend/tests/e2e/helpers/clipboardApp.ts

Shape

Method 393
Function 374
Interface 123
Class 74

Languages

TypeScript100%

Modules by API surface

frontend/lib/webrtc_base.ts41 symbols
frontend/lib/receive/ReceptionStateManager.ts39 symbols
frontend/tests/e2e/helpers/mockSaveDirectory.ts38 symbols
frontend/lib/app/WebRTCStoreCoordinator.ts37 symbols
frontend/lib/webrtcService.ts35 symbols
frontend/lib/receive/FileReceiveOrchestrator.ts35 symbols
frontend/lib/transfer/FileTransferOrchestrator.ts25 symbols
frontend/lib/receive/StreamingFileWriter.ts21 symbols
frontend/lib/fileReceiver.ts21 symbols
frontend/tests/unit/webrtcBaseJoin.test.ts20 symbols
frontend/lib/receive/MessageProcessor.ts19 symbols
frontend/lib/logger.ts19 symbols

For agents

$ claude mcp add PrivyDrop \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact