Start with the schema#
The protocol is four .proto files. They define identity records, credentials, the message
envelope, and the relay wire format — and they're the contract, not the prose. If the
spec and the schema ever disagree, the schema wins.
Everything else on this site exists to explain them.
Why there's no global directory#
Most decentralised messaging puts identity in a shared overlay: a DHT, a chain, a consensus set. DMCNP doesn't, and the reason is boring rather than ideological. A big enough hostile majority in a shared overlay can quietly withhold records. For something meant to replace email, that's fatal.
So resolution works like mail delivery already does. A domain publishes a _dmcn TXT
record with its trust anchor and a few seed nodes. You read it, dial that domain's own
nodes, fetch the signed record, and check it against the anchor from DNS.
A domain is served by the nodes its own DNS names — its own, or a host it explicitly delegates to — never by a shared pool it doesn't choose. Records sign themselves, so a server that isn't your domain's authority can refuse to answer you; it can't lie to you.
Naming and licence#
Apache-2.0 covers the code and the schema, patent grant included. It does not cover the names. Implement the protocol under whatever name you like — just don't call something DMCNP unless it really conforms, because that name is how people know what they're getting.
Where it's up to#
This is a snapshot, not a frozen standard. The schema moves with the reference implementation, and the implementation wins where they disagree. Formal versioning and a conformance suite aren't done yet.
The wire schema is the compatibility contract. Everything under internal/ is just how one
implementation happens to work, and carries no stability promise.