Skip to content

Releases: rootagi/Synapse

v2.0.0

Choose a tag to compare

@rootagi rootagi released this 01 Jul 02:52
0450f44

Changelog

v2.0.0

New Features (Android)

  • Home Screen — Added a new landing screen with typewriter hero text, pigeon logo, and Hotspot/WiFi mode selection
  • QR Code Scanning — CameraX + ZXing-based QR code scanner for quick peer pairing
  • QR Code Generation — Generate QR codes to share connection details
  • Wi-Fi Hotspot Direct Share — Android LocalOnlyHotspot manager for programmatic hotspot creation, enabling transfers without an existing WiFi network
  • Embedded HTTP File Server — Pure Java ServerSocket-based HTTP file server serves files over the hotspot for browser-based downloads
  • Hotspot Share Screen — File picker, hotspot credentials display, and QR code sharing in a single screen
  • Curtain Transition Animation — Samsung One UI "Now Bar" style curtain reveal transition component
  • Stacked Swipe Mode Selector — Animated stacked swipe pill component with AGSL liquid metal shader effect for switching between Send and Receive modes

Performance Improvements

  • Buffered Network I/O — Added 2MB buffered reader/writer on both sender and receiver sides to aggregate writes into fewer, larger TLS records, reducing encryption overhead
  • Buffered File Writing — Receiver now wraps destination files in a 256KB buffered writer, with explicit flush at completion
  • File Pre-allocation — Received files are pre-allocated on disk (seek to Size-1) to prevent filesystem fragmentation and incremental allocation during transfer
  • Per-Connection TLS — Moved from tls.Listen/tls.Dial to raw TCP with explicit per-connection tls.Server/tls.Client handshakes; cipher suites now explicitly prefer AES-GCM over ChaCha20 for hardware AES-NI acceleration
  • TCP Socket TuningTCP_NODELAY enabled, read/write socket buffers increased to 2MB
  • Reduced AllocationsChunkedWriter now uses a reusable [4]byte header buffer instead of allocating make([]byte, ...) on every write

Stability & Correctness

  • Fixed goroutine leak in ScanPeers() — The entries channel from the mDNS resolver is now explicitly closed when the scan context expires, preventing ScanPeers from blocking indefinitely
  • Fixed data race in history loadingloadHistory() now creates a defensive copy of the entries slice before returning, preventing race conditions between concurrent Wails JSON serialization and addHistoryEntry writes

Downloads

Platform File Notes
🐧 Linux synapse-linux-amd64.tar.gz Extract and run ./synapse
🪟 Windows (Installer) synapse-amd64-installer.exe Recommended — setup wizard
🪟 Windows (Portable) synapse-windows-amd64.zip Extract and run synapse.exe
📱 Android synapse.apk Sideload on Android 8.0+

Requirements

  • Linux: sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
  • Windows: WebView2 Runtime (pre-installed on Windows 10/11)
  • Android: Enable "Install from unknown sources"

v1.2.1

Choose a tag to compare

@rootagi rootagi released this 05 Apr 11:03
fe7e677

Synapse v1.2.1

Changes Made

1. Typography Standardization
Replaced all references to default fonts, Delius, and Architects Daughter with the single uniform font "Gamja Flower".

PC Frontend: Added the Google Fonts API directly to frontend/index.html. Removed JetBrains Mono, Inter, and Fira Code backups across component CSS files (Sidebar.module.css, TransferOverlay.module.css) and index.css. All components now homogeneously inherit Gamja Flower.

Android App: Deleted local TRF font files (delius.ttf, architects_daughter.ttf) from android/app/src/main/res/font/. Replaced them with a newly downloaded gamja_flower.ttf. Reconfigured Type.kt by eliminating the old FontFamily instantiations and consolidating all Jetpack Compose UI Material Typographies into a single GamjaFlowerTextStyle.

2. Android Transfer Crash Bug (ZSTD Compression mismatch)

Bug Fixed: When the Go Sender (sender.go) sent .txt, .md, or .json files, it arbitrarily compressed them using ZSTD. Android's Jetpack Compose client throws IOException("Compressed transfers (zstd) are not yet supported on Android") thus aborting transfers entirely.

Resolution: Modified internal/transfer/sender.go's getCompressionMethod() method to return CompressionNone statically across the board, guaranteeing full 1:1 functional LAN transfer parity for both platforms.

Peer-to-peer encrypted file transfer with a premium React-powered GUI.

Downloads

Platform File Notes
🐧 Linux synapse-linux-amd64.tar.gz Extract and run ./synapse
🪟 Windows (Installer) synapse-amd64-installer.exe Recommended — setup wizard
🪟 Windows (Portable) synapse-windows-amd64.zip Extract and run synapse.exe
📱 Android synapse.apk Sideload on Android 8.0+

Requirements

  • Linux: sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
  • Windows: WebView2 Runtime (pre-installed on Windows 10/11)
  • Android: Enable "Install from unknown sources"

Synapse v1.0

Choose a tag to compare

@rootagi rootagi released this 01 Apr 03:28
08940a6

Synapse v1.0

Peer-to-peer encrypted file transfer with a premium React-powered GUI.

Downloads

Platform File Notes
🐧 Linux synapse-linux-amd64.tar.gz Extract and run ./synapse
🪟 Windows (Installer) synapse-amd64-installer.exe Recommended — setup wizard
🪟 Windows (Portable) synapse-windows-amd64.zip Extract and run synapse.exe
📱 Android synapse.apk Sideload on Android 8.0+

Requirements

  • Linux: sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
  • Windows: WebView2 Runtime (pre-installed on Windows 10/11)
  • Android: Enable "Install from unknown sources"

v1.0.0

Choose a tag to compare

@rootagi rootagi released this 18 Jan 07:02
95127b0

Made with Go Version 3.1.0 License: MIT

LanDrop

LanDrop is a command-line tool for peer-to-peer file transfer over Local Area Networks (LAN) or Hotspots. It allows you to send files and directories between devices without manually entering IP addresses, using mDNS for automatic discovery.

Features

  • Interactive TUI: A modern Terminal User Interface built with bubbletea and lipgloss for a professional experience.
  • Directory Transfer: Support for transferring entire directories (automatically zipped and streamed).
  • Zero Configuration: Automatically discovers peers on the local network using mDNS.
  • Direct Transfer: Streams files directly between devices via TCP (no intermediate server).
  • Secure:
    • Encryption: All transfers are encrypted using TLS with ephemeral self-signed certificates.
    • Connection Approval: Senders must explicitly approve incoming connections via an interactive prompt.
  • Reliable:
    • Integrity Verification: BLAKE3 checksums are calculated and verified for every transfer to ensure data integrity with minimal CPU overhead.
    • Resumable Transfers: Automatically detects partial files and resumes downloads from where they left off.
  • Performant:
    • Adaptive Compression: Automatically compresses text-based files (e.g., .txt, .json, .go) using zstd for high speed and ratio. Skips compression for already compressed formats (e.g., .jpg, .zip, .mp4).
    • Optimized Buffering: Uses large buffers (4MB) and io.CopyBuffer to maximize throughput.
    • Multi-Receiver Support: Allows multiple receivers to download the same file simultaneously.
  • Cross-Platform: Works on any system where Go can act as a CLI (Linux, macOS, Windows).

Installation

Prerequisites

  • Go 1.21 or higher.

Build from Source

git clone https://github.com/example/landrop.git
cd landrop
go mod tidy
go build -o landrop .

Usage

1. Send a File or Directory

On the sender device, run:

./landrop send <path-to-file-or-directory>

Example:

./landrop send my-photo.jpg
# or
./landrop send my-project-folder/

The sender will start listening on a random port and broadcast its presence on the network. If a directory is selected, it will be archived on the fly.

Note: When a receiver attempts to connect, you will be prompted to approve the connection:

Incoming connection from 192.168.1.45:54321. Accept? (y/n):

2. Receive a File

On the receiver device (must be on the same WiFi/LAN), run:

./landrop receive

The receiver will:

  1. Scan for available senders (showing a spinner).
  2. Display a list of discovered peers.
  3. Allow you to select a peer using arrow keys and press Enter.
  4. Negotiate resume offset (if partial file exists).
  5. Download, verify integrity, and (if applicable) extract the content.

Architecture

  • UI: Built with Charm libraries (lipgloss, bubbletea).
  • Discovery: Uses _landrop._tcp mDNS service via zeroconf.
  • Transport: TLS over TCP with a custom negotiation protocol:
    1. Header: Length (8 bytes) + JSON Metadata ({"name": "...", "size": ..., "compression": "..."})
    2. Request: Length (8 bytes) + JSON Request ({"offset": ...})
    3. Content: Raw or Compressed Stream (Chunked encoding if compressed)
    4. Footer: BLAKE3 Checksum (32 bytes)
  • Language: Go (Golang).
  • CLI: Built with cobra.

Troubleshooting

  • "No senders found": Ensure both devices are on the same network subnet. Some corporate or public WiFi networks block mDNS (multicast).
  • Firewall: Ensure your firewall allows incoming TCP connections and UDP multicast (port 5353).
  • Checksum Mismatch: If a transfer fails integrity verification, retry the transfer (it will resume automatically).