Skip to Content

The Nostr protocol, natively in Zig

A native Nostr ecosystem in Zig, a foundational protocol library, utility libraries built on it, and fast native apps that keep your keys on hardware you control.

0.28 ms
500-note feed query @ 100k events
149k/s
event ingest
19/19
BIP-340 test vectors

One core, many surfaces

📦

Core library

The foundation, keys, events, transport, the outbox model, and a local-first store. Actively growing toward full Nostr coverage, milestone after milestone.

🧩

Utility libraries

Focused building blocks layered on the core, so every app shares one audited, well-tested base instead of reinventing crypto and storage.

🖥️

Native apps

Notary and Plaza both ship today: a remote signer and a local-first client you can download and use. Private messages, zaps and groups land inside them. Real products, all on one core.

What the core gives you

🔑

Credible crypto core

secp256k1 keys and BIP-340 Schnorr signatures via bitcoin-core’s libsecp256k1, passing the full official test-vector suite.

Local-first store

A zero-copy, memory-mapped LMDB event store with a bounded, newest-first query planner, sub-millisecond feeds that stay flat as the store grows.

🛡️

Native remote signer

Notary is a NIP-46 bunker that signs for any client while your nsec never leaves the daemon. A downloadable macOS app.

🧭

Outbox model

NIP-65 relay lists with read/write routing and zero hardcoded relays, events go where they belong.

🔒

Encrypted payloads

NIP-44 v2 authenticated encryption (ChaCha20 + HMAC-SHA256), verified against the official vectors, the basis for private messaging.

🔐

Portable keys

NIP-06 mnemonic derivation and NIP-49 ncryptsec encryption at rest, NFKC-normalized for cross-app interop.

Native apps

Notary

Shipped

A native NIP-46 signer for macOS: Zig, no Electron. Your nsec stays in a local daemon, and nothing gets signed quietly.

Learn more →

Plaza

Shipped

A fast, local-first client: read without an account, post in four clicks, with the feed rendered from disk. A downloadable macOS app.

Learn more →

Private messages

Planned

NIP-17 gift-wrapped DMs on the local store, signing through Notary. A milestone inside Plaza rather than a separate app: a messenger you have to switch to is one you stop using.

What comes next, and what is deliberately not being built, is on the roadmap.

Install the core

Add the library to your Zig project:

zig fetch --save https://github.com/zig-nostr/nostr/archive/refs/tags/v0.12.0.tar.gz
const nostr = b.dependency("nostr", .{ .target = target, .optimize = optimize }); your_module.addImport("nostr", nostr.module("nostr"));

zig-nostr is early and MIT-licensed: a library, plus two native apps you can download today, all on one core. Explore the docs →