A lightweight, secure file transfer GUI
Wyrmhole is a cross-platform desktop application that provides a user-friendly interface for secure peer-to-peer file transfers using the magic-wormhole.rs protocol.
- π End-to-end encrypted file transfers using the magic-wormhole protocol.
- π Real-time download progress for sending and receiving files.
- π Transfer History of sent and received files with metadata.
- π Custom Relay Server with the ability configure your own relay server URL.
- Clone the repository:
git clone https://github.com/ClaytonWas/wyrmhole.git
cd wyrmhole- Install dependencies:
npm install- Run in development mode:
npm run tauri dev- Build for production:
npm run tauri buildThe built application will be in src-tauri/target/release/.
- Click the Send Files section
- Select one or more files/folders to send
- Click Send to generate a transfer code
- Share the code with the recipient
- Monitor progress in the Active Transfers section
- Enter the transfer code provided by the sender
- Click Receive to start the connection
- Review the file offer and accept or deny
- Monitor download progress
- Access received files from the File History section
Access settings via the gear icon in the top-right corner:
- Download Directory - Set where received files are saved
- Auto-Extract Tarballs - Automatically extract received archives
- Default Folder Name Format - Customize folder naming for multiple file transfers
- Custom Relay Server URL - Use your own relay server
- Export JSON History - Export your transfer history as a JSON file
wyrmhole/
βββ src/ # React frontend
β βββ App.tsx # Main application component
β βββ SettingsMenu.tsx # Settings modal
β βββ ...
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ lib.rs # Main Tauri commands
β β βββ files.rs # File transfer logic
β β βββ files_json.rs # File history management
β β βββ settings.rs # Settings management
β βββ Cargo.toml
βββ package.json
- Frontend: React 18
- Backend: Tauri 2
Use the following commands during development:
npm run fmtβ Format the React/TypeScript code with Prettiernpm run fmt:rsβ Format the Rust/Tauri backend withrustfmtnpm run lintβ Lint the frontend TypeScript/React code with ESLintnpm run lint:rsβ Runclippyon the Rust backendnpm run analyzeβ Generate a CLI report including:- Code style tooling summary
- Dependency overview and likely-unused packages
- Bundle size summary from
dist/assets(runnpm run buildfirst) - Rust binary sizes from
src-tauri/target
# Development build
npm run tauri dev
# Production build
npm run tauri build| Feature | Description |
|---|---|
| π₯ Send to Multiple Recipients | Send a file to multiple people (experimental feature) |
| π Dark Mode | Support for a dark mode at the system level using glassy UI |
Contributions are welcome! Open an issue or submit a pull request. For major changes, please include a comment with decisions made.
Made with π by ClaytonWas