An OHTTP relay forwards encrypted requests from clients to relayers. It sees client IP addresses
but cannot read requests; relayers read requests but only see the relay’s address. It is only
useful if it is run by someone other than the relayer operators, which makes it a good way for
another team to contribute to the network.
Run it
Deploy the repository as a service with ROLE=ohttp-relay and PORT=8790, and a domain with
target port 8790.
It holds no keys and no state, and writes nothing to Arkiv. Put it behind HTTPS.
What it forwards
The relay accepts POST /ohttp with an x-arkognito-target header naming a relayer, and forwards
only the encrypted body to <target>/v1/ohttp. It forwards to a target only if:
- the target is announced in a live
arkognito.relayer heartbeat on Arkiv that publishes a gateway key;
- the target uses https on a public host (loopback, private and link-local addresses are refused);
- the target answers
/v1/info with the heartbeat creator’s address and the same gateway key;
- no redirects are followed.
A fake heartbeat naming an internal address (for example a cloud metadata endpoint) therefore
cannot turn the relay into a proxy into your network.
Configuration
Operating it
GET /healthz returns { ok, role, targets }, where targets is the number of verified relayers.
- The relay keeps no logs. Disable access logs in any proxy in front of it.
- Request bodies are limited to 128 KB.
Last modified on October 12, 2026