Engineering Notes
Deep dives into PlainApp's peer-to-peer architecture, transport design, and cryptography — straight from the source.
AirDroid Web: What It Is and 3 Better Alternatives
AirDroid's browser client is convenient but cloud-routed and account-gated. Here's how it really works, and three alternatives — including one with no account and no limits.
How to AirDrop From Android to iPhone: 4 Working Ways
AirDrop refuses to talk to Android by design. Here are four methods that actually move files between an Android phone and an iPhone — including one that needs no app on the iPhone, and one that needs no app anywhere.
Snapdrop Not Working? Common Causes and How to Fix It
Snapdrop won't load, devices can't see each other, or transfers stall? Here are the real reasons it breaks — and what to switch to when fixes don't hold.
DLNA Cast: Building a UPnP Sender and Receiver From Scratch
How PlainApp implements DLNA/UPnP AV casting on both sides: scanning and controlling TVs over SOAP as a sender, and turning the phone itself into a UPnP MediaRenderer as a receiver — with SSDP discovery, DIDL-Lite metadata, Range-request media serving, GENA event callbacks, and a sender-IP allow/deny trust model, all in pure Kotlin Multiplatform.
Screen Mirror: Low-Latency Casting Architecture
This article covers the end-to-end design of PlainApp's screen mirror system: how Android captures and hardware-encodes H.264/Opus via MediaCodec, how frames travel over WebSocket using a custom binary protocol, how the web side decodes via WebCodecs and renders via WebGL2 with zero CPU copies, how loss detection, orientation change, and remote touch control are handled, and how the system MediaProjection lifecycle is kept in sync.
PlainApp Security Deep Dive
How PlainApp protects your data on local Wi-Fi — with evidence from the open-source code.
Wi-Fi Aware Transport Design — Neighbor Discovery & Data Paths
This article explains how PlainApp uses Wi-Fi Aware (NAN — Neighbor Awareness Networking) as the middle tier of its peer transport fallback chain, between LAN (same-subnet HTTPS) and BLE (last-resort GATT RPC). Wi-Fi Aware is what makes two PlainApp devices talk when they are on different SSIDs, guest vs IoT VLANs, or no Wi-Fi infrastructure at all — without ever needing an IP address from a DHCP server.
BLE Transport Design — Messages & File Downloads
This article explains how PlainApp pushes chat messages and downloads files over Bluetooth Low Energy when neither LAN nor Wi-Fi Aware is available. BLE is the guaranteed fallback: slow, but it works without any IP connectivity at all. The article covers the wire format, the two-layer chunking design, how concurrent traffic is (and isn't) prioritized, and why every connection is torn down after each request.
Peer & Channel Chat Architecture
This article explains how PlainApp's offline-first chat works end-to-end: how a message travels from a tap in the UI all the way to another device over the peer transport, how group channels fan out messages to many members, and how the system stays resilient when networks disappear. Pairing (the trust and key exchange that bootstraps two devices) is covered in the separate Pairing Flow article.
Pairing Flow
This article explains how two PlainApp devices establish trust for the first time — how they discover each other, exchange keys, and arrive at the shared ChaCha20 transport key that every chat message, file transfer, and presence ping is encrypted with afterwards. The chat and channel architecture that consumes this key is covered in the separate Chat Architecture article.