Peer-to-peer file synchronization evolved from the earlier CupStringGo-P2P prototype. FRESH adds a VST3 send plugin so DAW audio exports drop directly into the P2P sync pipeline.
Go desktop daemon — FRESH TRANSPORT — that syncs files between peers.
- IRC discovery: peers find each other in a shared IRC channel using a pairing secret
- libp2p transfer: direct encrypted file transfer with NAT traversal (hole punching, UPnP, relay fallback)
- Fyne GUI: tabbed interface (config, P2P status, IRC chat, manifest, sync logs)
- Dual-lane sync: separate export (outgoing) and import (incoming) folders
- Self-upgrade: in-place binary upgrade with cascade backup versions
- Connection revival: IRC bot manager with automatic reconnection and coordinated P2P host updates
Rust VST3 plugin built with nih_plug + egui.
- Arms from the DAW GUI; starts recording when transport plays from position 0
- Captures incoming audio with dynamic mono/stereo channel detection
- Exports WAV, FLAC, or MP3 with configurable bit depth (16/24-bit)
- Writes to an export folder watched by FRESH Transport for P2P pickup
- Background-thread file I/O — never blocks the audio processing callback
The VST cannot network directly (sandboxing). The Go daemon handles all P2P work.
| Component | Language | Key libraries |
|---|---|---|
| FRESH Transport | Go 1.24 | libp2p, Fyne, irc-go, fsnotify, goupnp |
| FRESH Send | Rust 2021 | nih_plug, egui, hound, flacenc, mp3lame-encoder |
String-and-Cup (Python, WebRTC + IRC)
└── CupStringGo-P2P (Go, libp2p + IRC) ← earlier GitHub repo
└── FRESH Transport (Go, hardened IRC + GUI tabs + upgrades)
└── FRESH Send VST (Rust, DAW → export folder → P2P)
CupStringGo-P2P on GitHub is the earlier version. FRESH is the current codebase.
cd FRESHP2P_SRC
go build -o FRESH.exe .cd fresh-modular
cargo xtask bundle fresh --releaseOutput: fresh-modular/target/bundled/fresh.vst3
FRESH Transport reads mysetup.json (created by first-run setup wizard):
- IRC server, channel, pairing secret
- Local libp2p port
- Export/import folder paths
- File watcher settings
Point the VST export folder at the Transport export lane so recorded takes sync automatically.
- IRC-as-signaling: no central server for peer discovery — uses existing IRC infrastructure
- NAT traversal stack: UPnP port mapping, libp2p hole punching, static relay nodes
- Filename obfuscation: files renamed during transfer; manifest restores original names on receipt
- VST/DAW constraint handling: transport-synced recording trigger, format-aware background writes, user-visible error feedback in plugin GUI