Cross-Platform Local Network File Sharing
Yoop enables seamless peer-to-peer file transfers over local networks using simple, time-limited codes. Unlike cloud-based solutions, all data stays on your local network, ensuring privacy, speed, and zero bandwidth costs.
- Cross-platform: Works on Windows, Linux, and macOS
- No account required: Zero configuration, no cloud dependency
- Simple 4-character codes: Easy discovery without IP addresses
- Dual discovery: UDP broadcast + mDNS/DNS-SD for reliable device discovery
- Private & secure: TLS 1.3 encryption, data never leaves local network
- Fast transfers: Chunked transfers with xxHash64 verification
- Resume capability: Interrupted transfers can be resumed automatically
- CLI interface: Full-featured command-line tool
- Web interface: Browser-based UI for devices without CLI access
- Clipboard sharing: One-shot transfer and live bidirectional sync
# Share a single file
yoop share document.pdf
# Share multiple files and folders
yoop share photos/ videos/ notes.md
# Share with custom expiration
yoop share project.zip --expire 10m# Receive using the 4-character code
yoop receive A7K9
# Receive to specific directory
yoop receive A7K9 --output ~/Downloads/
# Batch mode (auto-accept)
yoop receive A7K9 --batch# Share current clipboard content (generates a code)
yoop clipboard share
# Receive clipboard content using a code
yoop clipboard receive A7K9
# Start bidirectional clipboard sync (host)
yoop clipboard sync
# Join existing sync session
yoop clipboard sync A7K9Requires Rust 1.86.0 or later.
git clone https://github.com/arceus/yoop
cd yoop
cargo install --path crates/yoop-cliPre-built binaries and package manager support are planned for future releases.
- Sender shares files and gets a 4-character code (e.g.,
A 7 K 9) - Receiver enters the code on their device
- Discovery happens via UDP broadcast + mDNS on local network
- Transfer occurs directly over TLS 1.3 encrypted TCP connection
- Verification using xxHash64 per chunk, SHA-256 for complete file
- Resume automatic resumption of interrupted transfers from last checkpoint
┌─────────────┐ UDP Broadcast ┌──────────────┐
│ Sender │ ◄──────── Code: A7K9 ──────────► │ Receiver │
│ │ │ │
│ Share A7K9 │ TCP + TLS 1.3 │ Receive A7K9 │
│ │ ────────► File Data ───────────► │ │
└─────────────┘ └──────────────┘
# Sharing & Receiving
yoop share <files...> # Share files/folders
yoop receive <code> # Receive with code
# Clipboard Sharing
yoop clipboard share # Share clipboard content
yoop clipboard receive <code> # Receive clipboard content
yoop clipboard sync [code] # Bidirectional clipboard sync
# Utilities
yoop scan # Scan for active shares on network
yoop web # Start web interface
yoop config # Manage configuration
yoop diagnose # Network diagnostics
yoop history # View transfer history
# Planned Features
yoop send <device> <files> # Send to trusted device (in development)
yoop trust list # Manage trusted devices (in development)Yoop can be configured via TOML files:
- Linux:
~/.config/yoop/config.toml - macOS:
~/Library/Application Support/yoop/config.toml - Windows:
%APPDATA%\yoop\config.toml
Example configuration:
[general]
device_name = "My-Laptop"
default_expire = "5m"
[network]
port = 52525
ipv6 = true
[transfer]
chunk_size = 1048576
parallel_chunks = 4
verify_checksum = true
[security]
tls_verify = true
rate_limit_attempts = 3- Rust: 1.86.0 or later
- Git: For cloning the repository
# Clone repository
git clone https://github.com/arceus/yoop
cd yoop
# Build all crates
cargo build --workspace
# Run tests
cargo test --workspace
# Run with logging
RUST_LOG=debug cargo run --bin yoop -- share test.txt# All tests
cargo test --workspace
# Unit tests only
cargo test --lib --workspace
# Integration tests only
cargo test --test integration_transfer
# With output
cargo test -- --nocapture# Format code
cargo fmt --all
# Lint with clippy
cargo clippy --workspace -- -D warnings
# Check without building
cargo check --workspaceYoop uses a custom binary protocol (LDRP) over TLS 1.3:
- Discovery: UDP broadcast + mDNS/DNS-SD on port 52525
- Transfer: TCP on ports 52530-52540
- Encryption: TLS 1.3 with self-signed ephemeral certificates
- Integrity: xxHash64 per chunk, SHA-256 per file
- Resume: State persistence for interrupted transfer recovery
- Code Format: 4 characters from
[2-9A-HJ-KMN-Z](avoiding ambiguous chars)
Yoop prioritizes security and privacy:
- Encryption: All transfers use TLS 1.3 with perfect forward secrecy
- No persistence: Ephemeral certificates, no long-term keys (except trusted devices)
- Rate limiting: 3 failed attempts → 30 second lockout
- Local only: No internet connectivity required or used
- Code verification: HMAC-based verification prevents timing attacks
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Before submitting a PR:
- Ensure all tests pass:
cargo test --workspace - Format code:
cargo fmt --all - Check lints:
cargo clippy --workspace -- -D warnings - Update documentation if needed
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Built with Rust and powered by: