Privacy-first, peer-to-peer local file sharing platform.
Share files, folders, and text across devices on your local network — no cloud storage, no accounts, no limits.
- Zero Cloud Storage — Files never leave your local network
- No Accounts — Connect instantly without sign-up
- End-to-End Encrypted — AES-256-GCM with SHA-256 verification
- Large File Support — Stream-based transfers for 100GB+ files
- Cross-Platform — Web, with desktop and mobile planned
- Modern UI — Glassmorphism-inspired dark mode interface
- Open Source — MIT licensed, self-hostable
- Node.js 20+
- pnpm 9+
git clone https://github.com/openmesh/openmesh.git
cd openmesh
npm run build# Start both web and server
npm dev
# Or individually
npm dev:web # http://localhost:3000
npm dev:server # http://localhost:4000openmesh/
├── apps/
│ ├── web/ # Next.js frontend
│ └── server/ # Express + Socket.IO signaling
├── packages/
│ ├── shared/ # Types, constants, utilities
│ ├── sdk/ # Developer SDK
│ ├── networking/ # WebRTC layer
│ ├── encryption/ # AES-256-GCM utilities
│ └── transfer/ # Chunk-based transfer engine
├── docs/ # Documentation
├── docker/ # Docker configuration
└── examples/ # Usage examples
┌─────────────┐ WebSocket ┌─────────────┐
│ Web App │◄──────────────────►│ Server │
│ (Next.js) │ Signaling │ (Express) │
└──────┬──────┘ └─────────────┘
│
│ WebRTC DataChannel (P2P)
│
┌──────▼──────┐
│ Peer Device│
│ (Browser) │
└─────────────┘
The signaling server coordinates device discovery and WebRTC handshake. Actual file data flows directly between peers via encrypted WebRTC DataChannels.
import { OpenMesh } from "@openmesh/sdk";
const client = new OpenMesh({ serverUrl: "http://localhost:4000" });
await client.connect();
await client.sendFile(file);
client.sendText("Hello!");MIT — Built with ❤️ by the OpenMesh community.