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.
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.
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
ShippedA native NIP-46 signer for macOS: Zig, no Electron. Your nsec stays in a local daemon, and nothing gets signed quietly.
Learn more →Plaza
ShippedA 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
PlannedNIP-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.gzconst 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 →