Founding engineer at SimpleX Chat since 2020: an open-source, private messaging network with no user identifiers and 1M+ Google Play installs. I built large parts of its Haskell client core and the chat relays behind channels, design much of the chat protocol and wrote 30+ design RFCs. Since 2023 I've also authored over a third of the iOS app's code changes, and over half in 2026.
- Chat relays for SimpleX Channels (2025–26): subscribers connect only to relays, so owners send each post once per relay, not per subscriber: RFC and threat model, Haskell core, iOS, Android/desktop
- Group send cost (2025): temporary storage to send one message to 1,000 members cut from ~20 MB to ~200 kB by deferring body encryption to delivery and storing the shared body once: encrypt on delivery, shared body stored once
- Restart-safe group delivery (2025): delivery moved from the receive loop to persistent jobs that resume after restarts (delivery jobs); per-pair member records replaced by one compact vector per member, migrated on users' devices (RFC, vector operations)
- PostgreSQL alongside SQLite behind one store interface, for server-side clients such as chat relays: client library, chat core
- Transport security: the messaging protocol's move to TLS, with a server identity check against the certificate fingerprint in each server's address: transport over TLS, old RSA/AES handshake removed, certificate validation, offline and online certificates
- End-to-end encryption: post-quantum encryption integrated into the chat protocol (RFC, core); recovery for broken double-ratchet sessions (client library, chat core, iOS, Android)
- XFTP file transfer: the client agent (file descriptions, receiving, recoverable sending) and most of its integration into the chat core and apps, 35+ PRs (receiving files, enabled by default)
- AI-assisted development (2026): CI workflows in which Claude Code can test the iOS, Android and desktop apps (400+ test cases on each for the v7.1 release): iOS, Android, desktop
Other open source: TLS 1.3 support in the Haskell tls library's Finished-message API (hs-tls#445, co-authored) · Apache Spark Structured Streaming, released in Spark 2.4 (ordered epoch commits, SPARK-23503, EpochCoordinator tests, SPARK-23747)
More work (click to expand)
- Channel integrity: signed roster of privileged members, opt-in post signing
- Member-vector follow-ups: forwarding by vector, first migration stage, second migration stage
- Member admission, with admins reviewing new members in a private chat: RFC, feature branch, core, iOS, Android/desktop
- Incognito mode, a random profile per contact or group, never linked to the main one: RFC, core
- IP protection, approval before downloading from unknown file servers: RFC, core
- Supporter badges: badge service core (scaffolding); code redemption (core and service, apps), monthly renewal; App Store and Google Play purchases, server-side receipt verification, subscriptions
- Agent tooling: LLM docs for the app codebases (iOS, Android/desktop); features built with the agent pipeline (required post signing and subscriber moderators, directory search (draft)); blank-screen bug diagnosed in CI
- App lock with Face ID, Touch ID or Android biometrics: simplex-chat#696
- Disappearing messages with custom timers: core, custom timers, iOS, Android
- Notification metadata encrypted so the notification server can't read it: first version, separate key
- Push-notification client agent: subscription supervisor, workers, notification modes
- iOS push-notification reliability rework, several notifications per push: client library, iOS
- Network statistics per server: client library, core, iOS
- Choosing server operators and accepting their usage conditions: iOS UI, core APIs
- Recent history sent to new group members: simplex-chat#3519
- Forwarding without revealing the source: core API, iOS, multi-message forwarding