From 1cd4e96f97f4a4cec8c7fb38ac069436ea603d97 Mon Sep 17 00:00:00 2001 From: sepehr-safari Date: Thu, 6 Aug 2026 23:11:19 +0300 Subject: [PATCH] Bring every page up to date with what actually ships Both apps are downloadable now and the site still described one of them as unfinished. The Plaza page said "Plaza is not tagged for download yet", which stopped being true at v0.2.0. Corrected across the site: - Plaza is shipped, with the install one-liner, on the home page, the ecosystem page and its own page. - The library snippet installs v0.3.8, not v0.3.5. - "pre-alpha" becomes "early". Two apps you can download is past pre-alpha. - The messenger stops being a separate planned app. Private messages are a milestone inside Plaza, which is what the roadmap says. - Nothing promises mobile or more platforms any more. The roadmap says those are deliberately not being built, and three pages were still advertising them. The performance table was wrong, not just stale. Its third column was labelled "Profile query" and held the timeline numbers, understating the profile query by about thirty times. It now carries all four columns from the library's own benchmark, and says plainly that a profile read costs eight microseconds regardless of how much history sits behind it. The NIP page listed reply threading as planned under a milestone name that no longer exists, while Plaza has been threading replies for months. Library NIPs and app NIPs are now separate tables, because they are different claims. Every row in the app table was checked against the source: NIP-45 and NIP-51 are not there despite being mentioned in comments, so they are not listed. --- content/ecosystem.mdx | 11 ++++++----- content/getting-started.mdx | 4 ++-- content/index.mdx | 18 +++++++++--------- content/nips.mdx | 26 +++++++++++++++++++++----- content/performance.mdx | 13 ++++++++----- content/plaza.mdx | 31 +++++++++++++------------------ 6 files changed, 59 insertions(+), 44 deletions(-) diff --git a/content/ecosystem.mdx b/content/ecosystem.mdx index 9b0238f..d044403 100644 --- a/content/ecosystem.mdx +++ b/content/ecosystem.mdx @@ -28,7 +28,7 @@ A native NIP-46 signer for macOS: Zig, no Electron, no WebView. Your key lives i a local daemon, nothing gets signed quietly, and your `nsec` never leaves it. โ†’ [`zig-nostr/notary`](https://github.com/zig-nostr/notary) ยท [read more](/signer) -### Plaza: in progress +### Plaza: shipped The flagship client: browse and post within two minutes, with the feed rendered from disk and reconciled in the background. Your key lives in Notary, a separate @@ -37,11 +37,12 @@ process, or in your own signer. ### On the roadmap -- **A private messenger**: NIP-17 gift-wrapped DMs, signing through Notary. -- **A document app**: Nostr-native notes and long-form (NIP-23). -- **More NIPs, payments, and platforms**: the ecosystem expands across desktop and mobile. +Both apps are downloadable and both keep growing. What comes next lands inside +them rather than as new apps: private messages, zaps and a wallet, groups, search +and media all belong to the client people already have. -See the [roadmap](/roadmap) for the full sequence. +See the [roadmap](/roadmap) for the order, and for what is deliberately not being +built. --- diff --git a/content/getting-started.mdx b/content/getting-started.mdx index 58fb491..ba94b54 100644 --- a/content/getting-started.mdx +++ b/content/getting-started.mdx @@ -1,14 +1,14 @@ # Getting Started `zig-nostr` is a Nostr protocol library for [Zig](https://ziglang.org). It -targets Zig **0.16** and is **pre-alpha** (`v0.3.5`). +targets Zig **0.16** and is **early** (`v0.3.8`). ## Install Fetch the library into your project's `build.zig.zon`: ```sh -zig fetch --save https://github.com/zig-nostr/nostr/archive/refs/tags/v0.3.5.tar.gz +zig fetch --save https://github.com/zig-nostr/nostr/archive/refs/tags/v0.3.8.tar.gz ``` Then wire the module in `build.zig`: diff --git a/content/index.mdx b/content/index.mdx index 0f37314..5d85601 100644 --- a/content/index.mdx +++ b/content/index.mdx @@ -40,7 +40,7 @@ title: The Nostr protocol, natively in Zig
๐Ÿ–ฅ๏ธ

Native apps

-

Notary ships today, Plaza is the flagship client in progress, and a messenger and more are on the way across desktop and mobile. Real products, all on one core.

+

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.

@@ -93,21 +93,21 @@ title: The Nostr protocol, natively in Zig

Plaza

- Building + Shipped
-

A fast, local-first client: browse and post within two minutes, with the feed rendered from disk.

+

A fast, local-first client: browse and post within two minutes, with the feed rendered from disk. A downloadable macOS app.

Learn more โ†’
-

Messenger

+

Private messages

Planned
-

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

+

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.

-

More native apps, and more platforms, desktop and mobile, are on the roadmap.

+

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

Install the core

@@ -116,7 +116,7 @@ title: The Nostr protocol, natively in Zig

```sh -zig fetch --save https://github.com/zig-nostr/nostr/archive/refs/tags/v0.3.5.tar.gz +zig fetch --save https://github.com/zig-nostr/nostr/archive/refs/tags/v0.3.8.tar.gz ``` ```zig @@ -124,7 +124,7 @@ 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 โ†’](/getting-started) +zig-nostr is **early** and MIT-licensed: a library, plus two native apps you can +download today, all on one core. [Explore the docs โ†’](/getting-started) diff --git a/content/nips.mdx b/content/nips.mdx index 8f9a4d8..04cb5c4 100644 --- a/content/nips.mdx +++ b/content/nips.mdx @@ -17,9 +17,25 @@ official specification vectors. | [46](https://github.com/nostr-protocol/nips/blob/master/46.md) | Nostr Connect, remote signing | โœ… done | | [49](https://github.com/nostr-protocol/nips/blob/master/49.md) | Private key encryption (`ncryptsec`) | โœ… done | | [65](https://github.com/nostr-protocol/nips/blob/master/65.md) | Relay list metadata (outbox) | โœ… done | -| [17](https://github.com/nostr-protocol/nips/blob/master/17.md) | Private direct messages | ๐Ÿšง planned (A6) | -| [59](https://github.com/nostr-protocol/nips/blob/master/59.md) | Gift wrap | ๐Ÿšง planned (A6) | -| [10](https://github.com/nostr-protocol/nips/blob/master/10.md) | Reply threading | ๐Ÿšง planned (A7) | +| [17](https://github.com/nostr-protocol/nips/blob/master/17.md) | Private direct messages | ๐Ÿšง planned | +| [59](https://github.com/nostr-protocol/nips/blob/master/59.md) | Gift wrap | ๐Ÿšง planned | -The planned NIPs land with the [showcase apps](/roadmap): a NIP-17 private -messenger (A6) and a read-only outbox client (A7). +Private messages and gift wrap land together, in [Plaza's private messages +milestone](/roadmap). + +## In the apps + +The library gives an app the protocol. These are implemented above it, in +[Plaza](/plaza), and are listed separately because they are client behaviour +rather than library surface. + +| NIP | Title | Where | +|----|----|----| +| [02](https://github.com/nostr-protocol/nips/blob/master/02.md) | Contact lists | reading and writing your follows | +| [05](https://github.com/nostr-protocol/nips/blob/master/05.md) | DNS identifiers | the verified handle on a profile | +| [10](https://github.com/nostr-protocol/nips/blob/master/10.md) | Reply threading | threads, and replies you post | +| [25](https://github.com/nostr-protocol/nips/blob/master/25.md) | Reactions | likes, in the feed and notifications | +| [27](https://github.com/nostr-protocol/nips/blob/master/27.md) | `nostr:` mentions in content | names instead of raw base32 | +| [89](https://github.com/nostr-protocol/nips/blob/master/89.md) | Application handlers | the `client` tag on notes you post | +| [92](https://github.com/nostr-protocol/nips/blob/master/92.md) | Media attachments | `imeta` dimensions, so an image reserves its box before it loads | +| [57](https://github.com/nostr-protocol/nips/blob/master/57.md) | Zaps | receipts are read and shown. Sending is a milestone away | diff --git a/content/performance.mdx b/content/performance.mdx index a9936f2..e3d6059 100644 --- a/content/performance.mdx +++ b/content/performance.mdx @@ -10,13 +10,16 @@ Measured on an Apple Silicon Mac, `ReleaseFast`, warm cache, best of 50 runs. Events are spread across 100 authors; the feed query is a 20-author, `kind:1` home timeline returning 500 notes. -| Store size | Feed query (500 notes) | Profile query | Ingest | -|----|----|----|----| -| 20,000 events | 0.26 ms | 0.09 ms | ~135k events/s | -| 100,000 events | 0.28 ms | 0.25 ms | ~135k events/s | +| Store size | Feed query (500 notes) | Timeline query (1 author) | Profile query | Ingest | +|----|----|----|----|----| +| 20,000 events | 0.25 ms | 0.09 ms | 0.007 ms | ~170k events/s | +| 100,000 events | 0.28 ms | 0.24 ms | 0.008 ms | ~149k events/s | The headline isn't just that a feed query takes **~0.28 ms**: it's that going -from 20k to 100k stored events barely moves it. That's the **bounded query +from 20k to 100k stored events barely moves it. The profile query makes the same +point sharply: fetching one account's `kind:0` out of a hundred thousand events +reads a single index entry, so it costs **8 microseconds** and does not care how +much history sits behind it. That's the **bounded query planner**: it walks the indexes newest-first and stops at `limit`, so latency tracks the page size you ask for, not the size of the store. diff --git a/content/plaza.mdx b/content/plaza.mdx index a66dcc7..a55b341 100644 --- a/content/plaza.mdx +++ b/content/plaza.mdx @@ -114,30 +114,25 @@ See [performance](/performance) for the library numbers underneath. ## Getting it -Plaza is not tagged for download yet. Build it from source today: - ```sh -git clone https://github.com/zig-nostr/plaza -cd plaza -npm install -g @native-sdk/cli -native build . # a ReleaseFast binary in zig-out/bin/ -scripts/package-macos.sh # or the same artifact as Plaza.app +curl -fsSL https://raw.githubusercontent.com/zig-nostr/plaza/main/scripts/install-macos.sh | bash ``` -macOS on Apple Silicon. A one-line installer lands with the first tagged -release. +macOS on Apple Silicon. The installer verifies the download's SHA-256, installs +`Plaza.app`, clears the download-quarantine flag so it opens without a Gatekeeper +detour, and launches it. Your key, session and local store live in `~/.plaza` and +survive every upgrade. Plaza is ad-hoc signed and not notarized on purpose. It signs notes with your key, so the trust anchor is a build you can reproduce rather than an Apple -signature you cannot inspect. - -Linux builds and tests in CI on every change. Windows is not in the matrix yet: -the relay transport resolves hostnames through libc `getaddrinfo`, which Zig's -standard library does not declare for Windows, so nothing depending on the -library links there. That is a gap in the protocol library rather than in Plaza. -Packaged releases for either come later anyway: the toolkit renders through a -software rasteriser off macOS today, and shipping one now would misrepresent how -Plaza performs. +signature you cannot inspect. Read the +[installer](https://github.com/zig-nostr/plaza/blob/main/scripts/install-macos.sh), +or build the same artifact yourself: + +```sh +git clone https://github.com/zig-nostr/plaza +cd plaza && scripts/package-macos.sh +``` ## Built on the core