Skip to main content

DNS Mesh Protocol

End-to-end encrypted messaging delivered over DNS. No central server, no app store, no gatekeeper — runs on the same infrastructure the internet already runs on.

Documentation · Getting started · Protocol spec · 5-min training deck

Status: non-certified yet, pre-external-audit. Wire format, federation, identity / key rotation, multi-tenant auth, and the formal protocol spec are shipped. Don't route confidentiality-critical traffic through DMP until the cryptographic audit lands. See SECURITY.md.

What it is

DMP is an open protocol for moving end-to-end encrypted messages between two people, using DNS as the transport. The recipient looks your records up the same way any computer looks up google.com.

Instead of trusting one company to relay your messages, you trust the DNS recursive chain — which is already what every device on the internet does for every other lookup, all day, every day. That chain has no single owner.

If DNS works on your network, DMP works on your network.

Try it (5 min, against the public node)

pipx install dnsmesh

# Set a passphrase. This is the ONLY thing protecting your identity
# keys — back it up like you'd back up an SSH key. The CLI reads it
# from $DMP_PASSPHRASE first, then a file at the path you set in
# config (~/.dmp/passphrase, mode 0400), then an interactive prompt.
read -rs DMP_PASSPHRASE                      # silent — not in shell history
export DMP_PASSPHRASE

dnsmesh init alice --domain dmp.dnsmesh.io --endpoint https://dnsmesh.io
dnsmesh tsig register --node dnsmesh.io     # one HTTPS hop, mints a TSIG key
dnsmesh identity publish                     # DNS UPDATE + TSIG, no more HTTPS
dnsmesh identity refresh-prekeys             # forward-secret first messages

# Add a contact you know (someone who's already published):
dnsmesh identity fetch bob@dmp.dnsmesh.io --add

# Send + receive
dnsmesh send bob@dmp.dnsmesh.io "hi bob"
dnsmesh recv

The passphrase derives your Ed25519 + X25519 keypair via Argon2id. Lose it and you lose the identity — there is no recovery. Persist it in a password manager or a 0400-permission file. See Getting Started → "Set a passphrase" for the file-based and persistent setups.

Curious what a node currently publishes:

dig _dnsmesh-heartbeat.dmp.dnsmesh.io TXT +short

A live, signature-verified directory of every DMP node currently advertising itself on the public DNS chain: https://ovalenzuela.com/DNSMeshProtocol/directory/. Rebuilt every 30 minutes by an aggregator that queries _dnsmesh-heartbeat.<seed> + _dnsmesh-seen.<seed> from a federated seed list (directory/seeds.txt); anyone can run their own aggregator off the same data.

Full walkthrough with troubleshooting in Getting Started.

Self-host (one VPS)

curl -fsSL https://raw.githubusercontent.com/oscarvalenzuelab/DNSMeshProtocol/main/deploy/native-ubuntu/install.sh \
    | sudo DMP_NODE_HOSTNAME=dmp.example.com bash

After install you need to delegate a DNS subzone to the node so public resolvers can find the records it serves. One NS record at your registrar, one env var on the node. Full walkthrough: Deployment → DNS subdomain delegation.

For a clustered HA deployment (3+ nodes with anti-entropy): Deployment → Cluster.

How the trust model works

After M9 (0.5.x), the protocol speaks DNS in both directions:

  • Reads — plain DNS TXT queries. Anyone can resolve any user's identity, mailbox slots, or chunks via the public recursive chain.
  • Writes — RFC 2136 DNS UPDATE signed with RFC 8945 TSIG. Each user holds a per-user TSIG key (minted via one HTTPS call to /v1/registration/tsig-confirm) scoped to their own DNS owner patterns. Two users sharing a node can't overwrite each other.

The only HTTPS the protocol uses for normal operation is that one TSIG-key registration step. Everything else is DNS. Cluster anti-entropy between same-operator nodes stays HTTPS as a documented HA-only exception (design note).

End-to-end encryption is X25519 ECDH + ChaCha20-Poly1305, with Ed25519 sender authentication and one-time prekeys for forward secrecy. Wire format and crypto details: Protocol → Wire format.

Not a good fit for

  • Real-time chat (DNS caching gives propagation in seconds-to-minutes)
  • File transfer or media payloads
  • Anonymity from traffic analysis (DMP hides content, not metadata)

Contributing

See CONTRIBUTING.md. Substantial test suite; security-sensitive changes get an extra review round.

License

AGPL-3.0 — if you host DMP as a service you must publish your changes.

Metadata

Release files for dnsmesh 0.7.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dnsmesh 0.7.5
File Size Uploaded Provenance
dnsmesh-0.7.5.tar.gz 673.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for dnsmesh 0.7.5
File Interpreter ABI Platform
dnsmesh-0.7.5-py3-none-any.whl Python 3 none any Details

Total release size: 1.1 MB

Release files / dnsmesh-0.7.5.tar.gz

Download URL dnsmesh-0.7.5.tar.gz
Size 673.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d68b26f7e374b50a1951dac52845d75437612d85f5ae31c45c11c48d9ec3ca85
BLAKE2b-256 checksum
How to use checksums
e87f399ad4d23db54244ee3809d39ab2b81fb807578f4a0c449fe58339e6e9ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 15, 2026.

Transparency log

Release files / dnsmesh-0.7.5-py3-none-any.whl

Download URL dnsmesh-0.7.5-py3-none-any.whl
Size 420.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1403c268479a45c4cc6131ffdea92397dae20f2aaaa37024af4d3d669ad3bb69
BLAKE2b-256 checksum
How to use checksums
8b6c8913cfe1770a8dea7f37e459875e2a82e85a202ac66d240a5c93cd59b904
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 15, 2026.

Transparency log

Security for dnsmesh 0.7.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dnsmesh-0.7.5.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 15, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.7.5 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page