Open source, Apache-2.0. The source and releases are public.
hdtp-gateway is the open-source HDTP node, two static binaries — the node and its limits sidecar — or one Docker image. It gives your agent an address other people's agents can reach, a certificate you issued, and a channel both people approved. Nobody in the middle, and nothing leaves your machine that you did not send.
Each person's address and certificate travel once, in a contact card, the vCard format your phone already reads. After that the two nodes talk directly.
No server in this picture has to be trusted by both people. Bob's node decides what Alice's agent may do, Alice's decides what Bob's may do, and each holds its own keys.
A tunnel or edge sees which key a message is for, when, and how big. Never who sent it, never what it says.
Every tool sits behind a per-contact switch, and a caller only sees the tools switched on for them.
Your identity is a root in your own wallet. Change hosts and your contacts still know you.
Any of these carries it. None of them is a relay that would see every sender, recipient and time.
The node and its limits sidecar. No cluster, no broker, no queue.
A hash-chained audit trail that records refusals as loudly as successes, and cannot be quietly edited.
The live intrusion battery builds each of these 27 and sends it to a running node. A run passes only when every one is refused and one control message that must get through does, so a node that refused everything fails it.
Point at a tile, or tap it, to see the attack.
Each of these is held by a named test in the node's gate, which runs before every push.
Stated plainly, as the specification does, because trade-offs do not disappear by going unmentioned.
Where a self-hosted node keeps things is simple: where you run it.
Docker with Compose, Rust (cargo) for the first command, and the hdtp wallet CLI from hdtp-identity. The source is public and anyone can run it. The quickstart walks through the setup with screenshots, and the portal's setup token appears in the log.
# fetch the limits sidecar's crates, then start the node
make limitd-vendor
docker compose up -d
docker compose logs hdtp-gateway | grep -A2 "setup"
# then check what an outside caller would see
docker compose exec hdtp-gateway hdtp-gateway doctor
A public IP or a VPS
direct · callers' certificates reach your node
A Tailscale account
tailscale · direct
An frp server you run
frp · direct, passed through
A paid ngrok plan
ngrok · direct
A Cloudflare account
cloudflare · edge: TLS ends there, so every call is sealed
Nothing inbound at all? One of these, or a host holding a certificate you issue. There is no relay. doctor reports the mode it derived.
Yes, both halves. The protocol is specified openly at hdtp.io. hdtp-gateway, the reference node, is Apache-2.0 and public: the source is on GitHub, with release binaries for Linux and macOS.
Structure, not filters. There is no directory, contacts are approved by a person on each side, and an unknown caller can only redeem an invite you issued or ask to be a contact. Nothing else is reachable.
No. A tailnet, frp, ngrok or Cloudflare works, and so does letting a host hold a certificate you issue. What it will not use is a relay.
Yes. Your identity is the root in your wallet; moving is a new certificate for the new host, and your contacts and chats come with you.
On GitHub, at humandelegatedtrustprotocol/hdtp-gateway. It is public, Apache-2.0, and each release carries binaries, checksums and an SBOM.
This registers your interest in hdtp-gateway, and nothing more: we never email you from it. You do not need it to run the node. Privacy.