Own your identity. No registrars. No platforms. Just your keys.
PKARR turns Ed25519 public keys into domain names that you truly own. Publish DNS records to the Bittorrent peer-to-peer network with 10+ million nodes. No registrar can seize your domain. No platform can deplatform your identity.
Where we are going, this https://o4dksfbqk85ogzdb5osziw6befigbuxmuxkuxq8434q89uj56uyy resolves everywhere!
cargo add pkarr
use pkarr::{Client, Keypair, SignedPacket};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Generate your identity
let keypair = Keypair::random();
println!("Your public key: {}", keypair.public_key());
// Create and sign DNS records
let packet = SignedPacket::builder()
.txt("_hello".try_into()?, "world".try_into()?, 3600)
.sign(&keypair)?;
// Publish to the network
let client = Client::builder().build()?;
client.publish(&packet, None).await?;
println!("Published! Resolve at: https://pkdns.net/?id={}", keypair.public_key());
Ok(())
}
| Guide | Description |
|---|---|
| Introduction | Philosophy, concepts, and why PKARR exists |
| Quickstart | Get started in 5 minutes |
| Integration Guide | Embedding Pkarr in your application |
| Feature Reference | Cargo feature flags and configurations |
| API Reference | Full Rust API documentation |
| Examples | Code samples |
| Specifications | Protocol design documents |
Try the web app to resolve records in your browser.
sequenceDiagram
participant Client
participant Relay
participant DHT
Client->>Relay: Publish signed packet
Relay->>DHT: Store (BEP44)
Client->>Relay: Resolve public key
Relay->>DHT: Query
DHT->>Relay: Signed packet
Relay->>Client: Verified response
PKARR uses the Mainline DHT, the same peer-to-peer network that powers BitTorrent. Records are stored using BEP44 (mutable items). With 15 years of proven reliability and 10+ million active nodes, there’s no need to bootstrap a new network.
PKARR is the I/O library that reads and writes DNS records to the DHT.