PlainApp Blog

Engineering Notes

Deep dives into PlainApp's peer-to-peer architecture, transport design, and cryptography — straight from the source.

Comparison8 min read

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.

Read article
How-To8 min read

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.

Read article
Troubleshooting7 min read

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.

Read article
Transport16 min read

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.

Read article
Architecture15 min read

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.

Read article
Security12 min read

PlainApp Security Deep Dive

How PlainApp protects your data on local Wi-Fi — with evidence from the open-source code.

Read article
Transport19 min read

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.

Read article
Transport15 min read

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.

Read article
Architecture12 min read

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.

Read article
Security10 min read

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.

Read article