README.md
June 25, 2026 ยท View on GitHub
Table of Contents
Overview
BeamSync is a cross-platform, desktop file transfer application engineered for speed and reliability. Built with Go (Wails v2) and Svelte, it establishes direct, high-bandwidth connections over your local area network โ no internet required, no cloud involved, no accounts needed. Files go straight from one device to another.
Features
- โก High-Speed Local Transfer โ Streams files directly over HTTP on your LAN for maximum throughput.
- ๐ Fully Offline โ Works without internet access. Data never leaves your local network.
- ๐ฑ Cross-Device via QR Code โ Connect any mobile device instantly by scanning a QR code โ no app install required on the phone.
- ๐ Drag & Drop โ Drop files onto the window to begin transfer immediately.
- ๐ง Smart Networking โ
- Auto-detects the optimal local IP address.
- Finds open ports automatically to avoid conflicts.
- Configures firewall rules on Linux when needed.
- ๐ Auditory Feedback โ Integrated audio engine provides real-time interaction sounds.
- โฟ Accessible โ Respects
prefers-reduced-motionfor all animations.
Screenshots
Architecture
The project is structured as a Go workspace with two modules:
BeamSync/
โโโ beamsync/ # Core library (Go module)
โ โโโ server.go # StartServer(), StartSender() โ HTTP file streams
โ โโโ port_manager.go# FindAvailablePort() โ dynamic port binding
โ โโโ firewall.go # RunFirewallSetup() โ Linux firewall automation
โ โโโ ...
โโโ desktop/ # Wails desktop application (Go + Svelte)
โ โโโ app.go # App lifecycle, config, event bridge
โ โโโ frontend/ # Svelte + Vite UI
โ โโโ ...
โโโ go.work # Go workspace root
| Layer | Technology | Key Components |
|---|---|---|
| Frontend | Svelte + Vite | Reactive UI, drag-and-drop, QR display |
| Application Shell | Go + Wails v2 | App โ event loop, config persistence (loadConfig, saveConfig) |
| Network Engine | Go (net/http) | StartServer, StartSender, writeFileToDisk โ concurrent file I/O |
| Utilities | Go | getLocalIP, FindAvailablePort, RunFirewallSetup |
| Media | Go | AudioEngine โ native audio playback |
Architecture details derived from graphify analysis: 172 nodes, 223 edges, 20 communities.
Installation
Arch Linux (AUR)
yay -S beamsync-bin
Pre-built Binaries
Download the latest release from the Releases page.
Building from Source
Prerequisites
Steps
-
Clone the repository:
git clone https://github.com/PranavAgarkar07/BeamSync.git cd BeamSync -
Install frontend dependencies:
cd desktop/frontend && npm install && cd ../.. -
Run in development mode (hot reload):
cd desktop && wails dev -
Build for production:
cd desktop && wails buildCompiled binaries are output to
desktop/build/bin/.
Usage Guide
Receiving Files (Default Mode)
- Launch BeamSync.
- A connection QR code and URL are displayed automatically.
- Scan the QR code from a mobile device, or open the URL from another machine on the network.
- Incoming files are saved to
Downloads/BeamSync/.
Sending Files
- Click Send or drag files onto the window.
- Select the files to transfer.
- A unique URL and QR code are generated.
- Open the URL or scan the QR on the receiving device to start the download.
Network Requirements & Connectivity Notes
BeamSync works by starting a local HTTP server that other devices on your LAN connect to (via browser or curl). In some network environments, the connection may not work as expected.
Important Requirements
- All devices must be connected to the same local network / subnet. Devices on different VLANs or isolated network segments may not be able to reach each other.
- Both devices must be able to communicate over LAN (HTTP reachability, not automatic discovery)
- macOS (14+ Sonoma/Sequoia): Grant Local Network permission โ go to System Settings โ Privacy & Security โ Local Network โ enable BeamSync. The app will prompt on first launch.
- Mobile hotspots: Some enforce client isolation; tethered devices may not reach the host
Common Network Restrictions
The following network types may block or limit BeamSync functionality:
- Guest WiFi networks often isolate devices from each other
- Public WiFi networks (cafes, airports, hotels) often restrict device-to-device traffic
- Enterprise, office, or school networks may use client isolation or VLAN segmentation that prevents devices from reaching each other
- Routers with AP isolation / client isolation enabled block all LAN device communication
- NAT hairpinning: On single-router home networks, some routers cannot route traffic back to a device on the same LAN when using the external IP or hostname. Use the local IP (e.g.
192.168.x.x) directly. - Third-party antivirus software (Norton, McAfee, Kaspersky, etc.) may silently block LAN HTTP servers. Temporarily disable or add an exclusion for BeamSync.
Firewall & Router Considerations
- Firewalls on Linux, Windows, or macOS may block incoming connections
- BeamSync uses TCP ports 3000โ3098 for local transfers. Ensure these ports are allowed through your firewall when necessary.
- On Linux, BeamSync can automatically configure firewall rules when required through its built-in firewall setup mechanism (
ufw,firewalld, oriptables). - Ensure BeamSync is allowed through your system firewall if prompted
Troubleshooting
If devices cannot connect, try these diagnostics:
# Check basic network reachability
ping <receiver-ip>
# Verify BeamSync's HTTP server is responding
curl -v http://<receiver-ip>:<port>/
# Check if the port is listening (from the receiver)
netstat -an | grep <port>
# Confirm both devices are on the same subnet
ip addr show | grep "inet "
Quick steps:
- Confirm both devices are on the same WiFi network
- Disable VPNs or proxies temporarily
- Try connecting via the device's local IP address instead of hostname
- Test with a mobile hotspot or a different home network
- Temporarily disable third-party antivirus to isolate the cause
Developer API
For developers, contributors, and security auditors who want to understand the underlying peer-to-peer file transfer protocol or build custom scripts/clients, the complete HTTP API and authentication specifications are available in the API Documentation (API.md).
Security & Privacy
- Local-only โ All transfers happen over your LAN. No external servers are contacted.
- Optional HTTPS โ Set
BEAMSYNC_ENABLE_TLS=truebefore launching BeamSync to serve receiver and sender pages over HTTPS with a persisted ECDSA local certificate in~/.config/beamsync/. - Ephemeral credentials โ HMAC-signed sessions expire after five minutes, bind to the connecting client and TLS context, renew through heartbeats, and use single-use links for downloads.
- Zero data collection โ BeamSync does not store, transmit, or analyze your files beyond the direct LAN transfer.
- Open source โ The entire codebase is available for audit.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome. Please open an issue or submit a pull request.