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.
Native apps
Signet ships today — with a messenger, a reader, and more on the way across desktop and mobile. 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
Signet, 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
Signet
ShippedA NIP-46 remote signer for macOS. Your nsec stays in a local daemon; every request waits for your approval.
Learn more →Messenger
PlannedA private DM app — NIP-17 gift-wrapped messages, signing through Signet, rendering instantly from the local store.
Reader
PlannedA read-only outbox client that paints from cache on launch and reconciles live — the clearest “native is faster” demo.
More native apps — and more platforms, desktop and mobile — are 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.3.5.tar.gzconst nostr = b.dependency("nostr", .{ .target = target, .optimize = optimize });
your_module.addImport("nostr", nostr.module("nostr"));zig-nostr is pre-alpha and MIT-licensed — a library plus native showcases, all on one core. Explore the docs →