LanChGo started as a personal tool and grew into something worth sharing — fast, private, offline-first LAN communication.
LanChGo is a local network chat application designed to make communication between devices instant and effortless. No internet connection, no accounts, no friction — just open the app and start talking to anyone on the same network.
It was built with a focus on simplicity and reliability. Whether you're at home, in an office, or at a local event, LanChGo just works.
It started with a simple frustration: wanting to send a file or a quick message to a device sitting on the same desk, on the same network. Every existing tool demanded an account, an internet connection, or a bulky install. For something as trivial as local communication, that felt absurd.
The first version was rough — a basic socket-based chat experiment just to prove the concept. No UI, no polish, just raw device-to-device messaging over the local network. It worked. And that was enough to keep going.
Rust was chosen for the Windows backend deliberately. A local networking tool needs to be stable, low on resource usage, and not prone to crashing mid-session. Rust's memory safety guarantees and performance characteristics made it the right fit — even if it meant a steeper learning curve upfront.
For the desktop UI, Slint was chosen as a declarative toolkit that integrates natively with Rust. It allowed building a clean, responsive interface without pulling in an entire browser engine — keeping the app fast and lightweight from the start. Coding and connecting the frontend with the backend is also seamless; it is an easy, simple language.
Early on it became clear that not every LAN is a trusted one — offices, shared apartments, public venues. The Secure Channel feature was added: a PIN-protected session where the key is derived using PBKDF2 and all messages are encrypted with AES-256-GCM, so conversations stay private even on shared networks where someone might be watching traffic.
The Android app was built using Flutter, enabling a consistent cross-platform experience from a single codebase. File transfers were added next — using TCP for reliability — first one-way, then fully bidirectional between Windows and Android. Each addition was driven by real use cases, not feature checklists.
The Web Companion is a way to bypass Apple's fee on publishing the app on the App Store: a browser-based interface served directly from the Windows app over HTTP, using WebSockets for real-time messaging. Any device on the LAN can open it in a browser and join the conversation — no install, no account, no internet.
At some point it stopped being just a personal tool and started feeling like something genuinely useful. LanChGo was published under the MIT License and released publicly — free to use, free to inspect, free to build on.
At the core, LanChGo uses UDP broadcasting for messaging. There is no discovery, no handshake, no device pairing — the app simply broadcasts messages across the subnet and any instance listening on the same port receives them. No central server, no cloud lookup, no internet required.
File transfers run on a separate TCP connection for reliability. TCP's guaranteed delivery and ordering makes it the right choice for binary data — chunks are streamed with progress tracked on both ends, and the transfer handles connection interruptions gracefully rather than silently failing.
The Secure Channel feature layers AES-256-GCM encryption on top of messaging. When a user sets a PIN, the actual encryption key is derived from it using PBKDF2 with a salt — meaning the PIN itself is never transmitted and brute-forcing the key is computationally expensive. All messages in the channel are authenticated and encrypted end-to-end.
The Web Companion is a small HTTP server to host the interface and a WebSocket to handle messaging — both exposed by the Windows app on the local network. It serves a single-page interface built with plain HTML, CSS, and JavaScript — no frameworks, no build steps. Once loaded in a browser, it connects back via WebSocket for live messaging. No data ever leaves your network.
Being a good engineer is a choice. Too many modern apps are bloated and heavy because developers take the easy route. That was never an option here — Rust was the obvious choice from day one, not because it was trendy, but because it was right. It is not hard to be a good engineer, you just have to care enough to make the right call.
Rust wasn't a leap, it was a natural step. Starting out with C at school meant memory management and low-level thinking were already familiar. Rust just added safety guarantees on top of concepts that were already second nature.
Laziness is a valid design principle. One of the main focuses while building LanChGo was not wanting to click through steps just to send a message. That laziness drove every UX decision — if something took too many clicks or required too much thought, it got reworked until it didn't.
Security should be opt-in but available. Not every use case needs encryption — sometimes you just want quick, casual LAN chat at home. But making Secure Channels an easy opt-in means the app works for higher-trust environments too, without forcing complexity on users who don't need it.
It started because I was lazy, now I love it. LanChGo exists because I did not want to go through unnecessary steps just to send a message or a file. What started as avoiding friction turned into a project I genuinely enjoy building and improving.
Have a suggestion, bug report, or just want to say hi? Send a message and I'll get back to you.