// open source · apache-2.0

Read the code.

Encryption you can't inspect is a promise, not a guarantee. The whole Android app is public, and so is the complete core of the iPhone app.

The repositories

Android — the entire app lives at github.com/norsehorse-dev/RelayPonyAndroid (Kotlin, Jetpack Compose). Clone it, build it, audit it, or fork it. It is also on F-Droid, where F-Droid builds and signs the app from this exact public source — the strongest everyday proof that the code you can read is the code you install.

iOS — the complete core of the iPhone app lives at github.com/norsehorse-dev/RelayPonyCore (Swift). The SwiftUI shell stays closed, but everything trust rests on is in the open: the wire protocol, the session layer that ties the age crypto to the framing, pairing and the trust store, the Keychain-backed device identity, discovery, and the network transport. Same idea as PGPonyCore: no marketing, no app chrome, just the part that matters.

What's inside

  • Crypto — both platforms wrap the age protocol (X25519 + ChaCha20-Poly1305 STREAM) from AgePony's open cores, so the transfer encryption is the verified-against-reference implementation rather than something hand-rolled for this app. Neither RelayPony repository contains cipher code, by design.
  • Transport — local network discovery over mDNS (Android NSD, Bonjour on iOS), the direct device-to-device fallback, and a frozen, cipher-agnostic wire protocol that frames the encrypted stream.
  • Pairing — QR-based trust-on-first-use, with device identities held in the phone's secure keystore. Trust is keyed on the public key, never the display name.

A frozen wire protocol, now with a spec

The format that goes over the wire is deliberately frozen and cipher-agnostic. That means a transfer made by one version stays readable by another, and the encryption primitive is a parameter of the protocol rather than baked into it. The goal is a transport you can reason about and that does not quietly change underneath you.

The authoritative specification is published as PROTOCOL.md: frame layouts, session ordering, the encrypted manifest, the QR pairing payload, the short-authentication-string construction, and the versioning rules. The Swift and Kotlin implementations are byte-identical ports of that one document, which is how an iPhone and an Android phone send to each other.

License

Apache-2.0. Use it, modify it, ship it, with attribution and the standard patent grant. The full text is in the repository's LICENSE file.

The sibling cores

RelayPony's cousins publish their cores too. AgePony ships its whole iOS app, AgePonyiOS with AgePonyCore inside, and PGPony publishes PGPonyCore (Swift) and PGPonyCore-Kotlin, all Apache-2.0. Same developer, same habit of putting the crypto in the open.