# LAN Share A peer-to-peer screen sharing application for local networks. No accounts, no cloud services — just open a browser and share. ## Features - **WebRTC P2P**: Direct peer-to-peer connections, video never touches the server - **Audio support**: Optionally share system audio with your screen - **Multiple streams**: View multiple shared screens, select which one to focus on - **Zero config**: Just run the server and open the URL in any browser - **Keyboard shortcuts**: `F` for fullscreen, `M` for mute, `Escape` to expand sidebar ## Building ```bash cargo build --release ``` The binary will be at `target/release/lanshare`. ## Running ```bash ./target/release/lanshare ``` Or with cargo: ```bash cargo run --release ``` The server starts on `http://0.0.0.0:8080` by default. ### CLI Options ``` Usage: lanshare [OPTIONS] Options: -H, --host IP address to bind to [default: 0.0.0.0] -p, --port Port to listen on [default: 8080] -v, --verbose Enable verbose/debug logging -q, --quiet Quiet mode - only show errors -h, --help Print help -V, --version Print version ``` Examples: ```bash # Listen on a specific interface lanshare --host 192.168.1.100 --port 3000 # Localhost only (for testing) lanshare -H 127.0.0.1 # Quiet mode lanshare -q ``` ### CLI Options ``` LAN Share - Peer-to-peer screen sharing for local networks Usage: lanshare [OPTIONS] Options: -H, --host Host address to bind to [default: 0.0.0.0] -p, --port Port to listen on [default: 8080] -v, --verbose Enable verbose logging -h, --help Print help -V, --version Print version ``` ### Examples ```bash # Run on default settings (0.0.0.0:8080) lanshare # Run on a specific port lanshare -p 3000 # Bind to localhost only lanshare -H 127.0.0.1 -p 8080 # Run with verbose logging lanshare -v ``` ## Usage 1. Start the server on any machine in your LAN 2. Open `http://:8080` in a browser on each device 3. Enter your name when prompted 4. Click "Start Sharing" to share your screen 5. Select shared screens from the sidebar to view them ## Architecture ``` ┌─────────────────────────────────────────────────────────────┐ │ Signaling Server │ │ (Rust/Axum/WebSocket) │ │ - Peer discovery │ │ - Relays SDP offers/answers (with bundled candidates) │ └─────────────────────────────────────────────────────────────┘ │ │ │ WebSocket │ WebSocket │ (signaling only) │ (signaling only) ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ Peer A │◄────────────────────►│ Peer B │ │ (Browser) │ Direct WebRTC │ (Browser) │ └─────────────┘ (video/audio) └─────────────┘ ``` **100% Local Network** — No external services, simple direct connections: - No STUN/TURN servers needed - No trickle ICE — candidates bundled directly in SDP - One offer + one answer = connected - Video/audio streams stay entirely on your LAN ## Browser Support Tested on: - Chrome/Chromium - Firefox - Edge - Safari (macOS) Note: Screen sharing with audio requires Chrome/Edge on Windows/macOS. Firefox and Linux may have limited audio capture support depending on the system. ## Configuration Command-line options take precedence over defaults. See `lanshare --help` for all options. Environment variables: - `RUST_LOG`: Override log level (e.g., `RUST_LOG=lanshare=debug`) ## Security Notes - This is designed for **trusted local networks only** - No authentication — anyone with the URL can join - No encryption beyond what WebRTC provides by default (DTLS-SRTP) - Don't expose to the internet without additional security measures ## License MIT