Squiggle is a free, open-source peer-to-peer LAN instant messenger. There is no central server — peers discover each other via multicast and communicate directly on the local network.
- Instant messaging over LAN
- File transfer
- Voice chat
- Screen capture & sharing
- Chat history
- Message translation
- Cross-subnet bridging
- .NET 9 (targeting
net9.0-windows) - Avalonia UI — cross-platform UI framework (replacing legacy WPF)
- protobuf-net — wire protocol serialization
- NAudio — voice chat audio
- Entity Framework 6 + SQLite — chat history persistence
Squiggle uses the dotnet CLI to build:
dotnet build Squiggle.slndotnet run --project Squiggle.UISquiggle.UI (Avalonia app — windows, views, plugin loader)
↓
Squiggle.Client (Facade — ChatClient exposes buddy list, login, chat events)
↓
Squiggle.Core (Networking — presence discovery, chat transport, message serialization)
↓
Squiggle.Infrastructure (Shared abstractions — async pipes, serialization helpers)
Squiggle.Utilities (Cross-cutting helpers used by all layers)
| Project | Purpose |
|---|---|
Squiggle.FileTransfer |
P2P file transfer |
Squiggle.VoiceChat |
Voice chat via NAudio + Speex |
Squiggle.Screenshot |
Screen capture & send |
Squiggle.Translate |
Message translation |
Squiggle.History |
Chat history persistence |
Squiggle.Multicast |
Multicast presence (standalone exe) |
Squiggle.Bridge |
Cross-subnet/WAN bridging (standalone exe) |
Releases are automated via GitHub Actions. When a version tag is pushed, the CI builds self-contained single-file executables for all platforms and creates a GitHub Release with the artifacts.
To create a release:
git tag v4.0.0
git push --tagsPre-built binaries are available for:
- Windows (x64)
- Linux (x64)
- macOS (x64 and ARM64)
Tags containing -beta, -rc, or -alpha are automatically marked as pre-releases.
See LICENSE for details.