Skip to content

DeclanJeon/PonsWarp

Repository files navigation

PonsWarp

Direct browser-to-browser file transfer for very large files, with optional Cloud Drop links when both people cannot stay online together.

Live App · Screenshots · Development

TypeScript React Vite WebRTC Rust WASM Cloudflare R2

PonsWarp home screen

What It Does

PonsWarp has two transfer paths:

Mode Best For Limit Availability
SEND / RECEIVE Maximum-size direct P2P transfer No app-defined size cap Sender and receiver stay online together
CLOUD Drop Send once, share a download-only link Free 10GB, paid plans up to 1TB 24 hours to 7 days, then removed

Direct mode streams bytes from the sender's disk to the receiver's disk through WebRTC. It avoids loading the full file into memory, protects against incomplete saves, and can resume interrupted single-file or multi-file transfers from the receiver's current offset after reconnect.

Cloud Drop uploads to Cloudflare R2 and returns a temporary link. Free Cloud Drop is capped at 10GB for 24 hours; paid Drop Pass and Pro plans add larger offline drops, longer retention, optional passwords, and download caps.

Screenshots

Transfer Modes Direct Send
PonsWarp transfer mode selection PonsWarp direct send screen
Cloud Drop Home
PonsWarp Cloud Drop screen PonsWarp home screen

Features

  • Direct P2P transfer: WebRTC data channels for browser-to-browser transfer.
  • Large-file streaming: direct disk writes through StreamSaver or the File System Access API.
  • Interrupted transfer recovery: receiver-side partial write detection plus reconnect/resume for resumable direct transfers.
  • Multi-file and folder support: raw source-byte transfer with receiver-side ZIP64 packaging for large folder downloads.
  • Cloud Drop: Cloudflare R2-backed temporary links with free 24-hour drops and paid password/download-limit controls.
  • End-to-end protection: WebRTC transport security plus the Rust/WASM transfer core.
  • Adaptive flow control: chunk sizing, backpressure, and buffer thresholds tuned for unstable networks.
  • TURN-ready deployment: signaling can provide production TURN credentials for NAT traversal.

Architecture

flowchart LR
  senderDisk[Sender disk] --> senderWorker[Sender worker]
  senderWorker --> wasm[Rust / WASM core]
  wasm --> dataChannel[WebRTC data channel]
  dataChannel --> receiverWorker[Receiver worker]
  receiverWorker --> writer[DirectFileWriter]
  writer --> receiverDisk[Receiver disk]

  cloudUpload[Cloud Drop upload] --> r2[Cloudflare R2]
  r2 --> cloudDownload[24-hour or paid retention link]
Loading

Main Pieces

Area Files
App shell and mode routing src/App.tsx, src/types/types.ts
Direct sender flow src/components/SenderView.tsx, src/services/swarmManager.ts, src/workers/file-sender.worker.ts
Direct receiver flow src/components/ReceiverView.tsx, src/services/webRTCService.ts, src/workers/file-receiver.worker.ts
Disk writing and resume safety src/services/directFileWriter.ts
Cloud Drop src/components/CloudSenderView.tsx, src/components/CloudDownloadView.tsx, src/services/cloudShareService.ts
Signaling src/services/signaling-factory.ts, src/services/signaling-adapter.ts, src/services/signaling.ts

Tech Stack

  • Frontend: React 19, TypeScript 5.9, Vite 7
  • UI: Tailwind CSS 4, Framer Motion, lucide-react
  • 3D scene: Three.js, React Three Fiber
  • P2P: WebRTC, simple-peer
  • Signaling: Socket.io client or Rust WebSocket signaling
  • Storage: StreamSaver, File System Access API, Cloudflare R2
  • Core: Rust/WASM package via pons-core-wasm

Development

Requirements

  • Node.js 20+
  • pnpm 8+
  • A signaling server for live direct-transfer testing

Setup

git clone https://github.com/DeclanJeon/PonsWarp.git
cd PonsWarp
pnpm install
pnpm dev

Use environment-specific files. The values are bundled into browser JS, so keep secrets out of all VITE_* variables.

# Local development
cp .env.local.example .env.local
pnpm dev

# Production build
cp .env.production.example .env.production
pnpm build

Local defaults point to ws://localhost:5502/ws and http://localhost:5502. Production defaults point to https://warp.ponslink.com.

Scripts

pnpm dev          # Start Vite
pnpm build        # Production build
pnpm preview      # Preview built app
pnpm type-check   # TypeScript validation
pnpm test         # Vitest suite
pnpm test:e2e     # Playwright smoke suite
pnpm lint         # ESLint with autofix

Browser Support

Browser Status Notes
Chrome / Edge Best File System Access API and StreamSaver behavior are strongest here.
Firefox Good Uses fallback save behavior where browser APIs differ.
Safari Limited WebRTC works, but filesystem and background transfer behavior are more restrictive.

Production Notes

  • The public app is served at https://warp.ponslink.com.
  • Static frontend assets are built from dist/.
  • Direct transfer depends on signaling and TURN availability.
  • Cloud Drop free shares are capped at 10GB and 24 hours. Larger offline drops use hosted checkout when the backend returns checkoutEnabled=true; Lemon Squeezy is the default provider and PayPal can be offered as an alternate provider.
  • Paid Cloud Drop links can be protected with a password and counted by download session rather than by individual file click.
  • Cloud Drop shares should be cleaned by the Rust backend cleanup loop or by a storage lifecycle policy aligned to each share's retention window.
  • The Rust backend should pass GET /ready before Nginx routes traffic to it.

Contributing

  1. Fork the repository.
  2. Create a branch: git checkout -b feature/my-change.
  3. Run pnpm type-check, pnpm test, and pnpm build.
  4. Open a pull request with the behavior change and verification notes.

Acknowledgments

About

Hyper-fast, browser-based P2P file transfer solution. Transfer multi-GB files and folders directly between devices using WebRTC and OPFS. Features smart backpressure congestion control, zero-copy streaming, and a futuristic sci-fi UI. No file size limits, no servers.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages