About

Built to solve a problem.
Then kept going.

LanChGo started as a personal tool and grew into something worth sharing — fast, private, offline-first LAN communication.

What is LanChGo
Lightweight LAN chat, done right.

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.

Key Features
What you get.
  • Pure UDP broadcast messaging — no accounts, no pairing, no discovery layer
  • Secure Channel system with PIN-based AES-256-GCM + PBKDF2 encryption
  • Cross-platform: Windows, Android and Web Companion with more planned
  • Works completely offline — no internet access needed
  • File transfer over TCP in all directions between Windows and Android
  • Web Companion — chat from any browser over HTTP and WebSockets
  • Lightweight and fast, built for simplicity
The road to v1.0
The Problem
Why does sending a local message need the internet?

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 Prototype
A quick script becomes something more.

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.

Choosing Rust
Picking a language built for reliability.

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.

Building the UI
Slint: a UI framework built for embedded and desktop.

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.

Adding Security
Not every network is a safe one.

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.

Going Android
Making it cross-platform was always the goal.

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.

Web Companion
What if you don't want to install anything?

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.

Public Release
From personal tool to open project.

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.

How it actually works.

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.

Rust Slint UI Flutter WebSockets TCP UDP AES-256-GCM PBKDF2 HTTP MIT License
What LanChGo is built with.
🦀
Rust
Core backend for the Windows app. Chosen for memory safety, performance, and stability without a garbage collector.
🖼️
Slint UI
Declarative UI toolkit native to Rust. Keeps the app lightweight without embedding a browser engine.
💙
Flutter
Used to build the Android app. A single codebase delivers a consistent, native-feeling experience across devices.
📡
UDP Broadcasting
The messaging backbone. The app broadcasts to the subnet and any instance on the same port receives — no pairing or discovery needed.
🔌
WebSockets
Handles real-time messaging between clients, including the Web Companion browser interface.
📦
TCP
Used exclusively for file transfers. Guaranteed delivery and ordering make it the right fit for binary data.
🔐
AES-256-GCM + PBKDF2
Authenticated encryption for Secure Channels. PBKDF2 derives the key from a PIN — the PIN is never sent over the network.
🌐
HTTP + WebSocket
The Web Companion is served over HTTP from the Windows app. Messaging connects back via WebSocket in real time.
What building this taught me.
01

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.

02

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.

03

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.

04

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.

05

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.

Get in touch.

Have a suggestion, bug report, or just want to say hi? Send a message and I'll get back to you.