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
135k/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

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

Shipped

A NIP-46 remote signer for macOS. Your nsec stays in a local daemon; every request waits for your approval.

Learn more →

Messenger

Planned

A private DM app — NIP-17 gift-wrapped messages, signing through Signet, rendering instantly from the local store.

Reader

Planned

A 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.gz
const 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 →