Skip to content

ClaytonWas/wyrmhole

Repository files navigation

πŸ§™β€β™‚οΈ Wyrmhole macOS Linux Windows

A lightweight, secure file transfer GUI

License: MIT Built with Tauri React

About

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.

Features

  • πŸ” 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.

Getting Started

Dependencies

Installation

From Source

  1. Clone the repository:
git clone https://github.com/ClaytonWas/wyrmhole.git
cd wyrmhole
  1. Install dependencies:
npm install
  1. Run in development mode:
npm run tauri dev
  1. Build for production:
npm run tauri build

The built application will be in src-tauri/target/release/.

Usage

Sending Files

  1. Click the Send Files section
  2. Select one or more files/folders to send
  3. Click Send to generate a transfer code
  4. Share the code with the recipient
  5. Monitor progress in the Active Transfers section

Receiving Files

  1. Enter the transfer code provided by the sender
  2. Click Receive to start the connection
  3. Review the file offer and accept or deny
  4. Monitor download progress
  5. Access received files from the File History section

Settings

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

Development

Project Structure

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

Tech Stack

  • Frontend: React 18
  • Backend: Tauri 2

Formatting, Linting, and Analysis

Use the following commands during development:

  • npm run fmt – Format the React/TypeScript code with Prettier
  • npm run fmt:rs – Format the Rust/Tauri backend with rustfmt
  • npm run lint – Lint the frontend TypeScript/React code with ESLint
  • npm run lint:rs – Run clippy on the Rust backend
  • npm run analyze – Generate a CLI report including:
    • Code style tooling summary
    • Dependency overview and likely-unused packages
    • Bundle size summary from dist/assets (run npm run build first)
    • Rust binary sizes from src-tauri/target

Building

# Development build
npm run tauri dev

# Production build
npm run tauri build

Future Features

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

Contributing

Contributions are welcome! Open an issue or submit a pull request. For major changes, please include a comment with decisions made.

Resources

Made with πŸ’™ by ClaytonWas

Report Bug/Request Feature

About

A cross-platform GUI wrapper for the p2p magic-wormhole.rs library.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors