- speak the compact signing dialect as well as NIP-46 (#87)
- ship the hono CORS ReDoS fix in a published version (deps)
- send the real content type on upload (blossom). Every upload went out as application/octet-stream, which a server that sniffs the body rejects: a valid PNG returned 400 "Content-Type header does not match the file content". Detected from the leading bytes rather than the file name, since the bytes are what the server checks
- say which derivation path switch actually chose (cli). A bare name resolves to
the persona path, so
switch workandderive workare different keys, and printing only the npub made that invisible until something had been signed by the wrong identity - pick up hono 4.13.0 for GHSA-8j4g-w8fx-2239, a ReDoS in its CORS middleware. The release gate refuses to publish with a runtime advisory, so 2.3.1 and the first 2.3.2 attempt could not reach npm
- serve Blossom blob endpoints from the test relay
- NIP-77 --ids-only and --only-missing on req
- nak-style flags and kind names on the event command
- NIP-42 AUTH in the bundled test relay
- gift-wrap and gift-unwrap any event (NIP-59)
- expose the remaining blossom commands on the CLI
- require Node 22, test the floor in CI, and take undici 8
- Node 22.19 or newer is now required. Node 20 and 21 are
- exit the CLI instead of waiting on relay sockets
- resolve @hono/node-server onto 2.x, clearing the advisory that blocked publishing of 1.42.0 and 1.42.1
- bound bunker connect and make startup non-blocking
- add kind-info lookup over the pinned registry
- mine NIP-13 proof of work before signing
- answer NIP-42 AUTH challenges, off by default
- paginate relay queries past the single-REQ cap
- send NIP-86 spec method names and cover the full management API
- end-holds scale to how much the last screen says
- prefer explicit local keys over saved bunker
- add protocol validation, sync, and group foundations
- help brought in step with the real CLI
- command atlas pairs every CLI command with its ask
- story recordings compressed to a watchable pace
- shamir copy says the assistant never sees the shares
- terminal one-liners join the tool panels
- try-it-yourself panels replace the solo demo GIFs
- sanitised story recordings for every demo on the site
- await async vault handlers in MCP tool wrappers
- mint keys before any configuration exists
- guides with real recordings and a humanised front page
- vault config reads follow dominion-protocol kinds (30481)
- send client name metadata on bunker connect (#52)
- bunker --profile , auto-stable connection key, and relay fallback
- add bunker --persona to sign as a derived nsec-tree identity
- route all HTTP fetches through Tor SOCKS proxy when configured
- BIP-327 compliant MuSig2 NonceGen with server-held nonce custody
- wallet subcommands for NIP-47 Nostr Wallet Connect (Phase 4 D)
- Phase 4A trust-aware req variants and trust-rank command
- Phase 4 G — bunker connect/authorize/status subcommands
- Phase 4 F — NIP-29 group admin write ops (create/update/add-user/remove-user/set-roles)
- Phase 4 E+H — output format flags (--jsonl/--csv/--tsv), NIP-65 outbox helpers
- Phase 4 B+C — publish-raw quorum/timeout/report, subscribe streaming
- Items 17-19 — sync pull/push, NIP-86 admin, relay curl
- add nostr-bray/types barrel and @experimental tags on unstable categories
- barrel exports + subpath entry points — Item 9
- add SDK factory (createBray / defaultBray) — Item 8
- normalise CLI verbs to space-separated subcommand style
- add req CLI verb for generic NIP-01 filter queries
- add event CLI verb for arbitrary event construction
- add per-command --relay flag to all publishing commands
- add bunker sign one-shot NIP-46 signing command
- add publish-raw command (sign+broadcast pre-built events)
- update vault + attestation for dominion-protocol 0.1.0 and nostr-attestations API changes
- close security audit deferrals (Batches A, B, C)
- update musig2 2-of-2 flow test for server-held nonce custody
- validate default relays in RelayPool constructor
- add BRAY_ALLOW_PRIVATE_RELAYS opt-in for dev relays
- enforce Blossom upload cap on every input path
- secret zeroisation discipline and .gitignore hardening
- privacy leak in profile-set preview and resolveRecipient errors
- tighten input validation across tool boundaries
- HTTP transport bearer-auth and rate-limit hardening
- harden SSRF validation and relay URL checks
- bunker --profile , auto-stable connection key, and relay fallback
- add bunker --persona to sign as a derived nsec-tree identity
- route all HTTP fetches through Tor SOCKS proxy when configured
- BIP-327 compliant MuSig2 NonceGen with server-held nonce custody
- wallet subcommands for NIP-47 Nostr Wallet Connect (Phase 4 D)
- Phase 4A trust-aware req variants and trust-rank command
- Phase 4 G — bunker connect/authorize/status subcommands
- Phase 4 F — NIP-29 group admin write ops (create/update/add-user/remove-user/set-roles)
- Phase 4 E+H — output format flags (--jsonl/--csv/--tsv), NIP-65 outbox helpers
- Phase 4 B+C — publish-raw quorum/timeout/report, subscribe streaming
- Items 17-19 — sync pull/push, NIP-86 admin, relay curl
- add nostr-bray/types barrel and @experimental tags on unstable categories
- barrel exports + subpath entry points — Item 9
- add SDK factory (createBray / defaultBray) — Item 8
- normalise CLI verbs to space-separated subcommand style
- add req CLI verb for generic NIP-01 filter queries
- add event CLI verb for arbitrary event construction
- add per-command --relay flag to all publishing commands
- add bunker sign one-shot NIP-46 signing command
- add publish-raw command (sign+broadcast pre-built events)
- update vault + attestation for dominion-protocol 0.1.0 and nostr-attestations API changes
- close security audit deferrals (Batches A, B, C)
- update musig2 2-of-2 flow test for server-held nonce custody
- validate default relays in RelayPool constructor
- add BRAY_ALLOW_PRIVATE_RELAYS opt-in for dev relays
- enforce Blossom upload cap on every input path
- secret zeroisation discipline and .gitignore hardening
- privacy leak in profile-set preview and resolveRecipient errors
- tighten input validation across tool boundaries
- HTTP transport bearer-auth and rate-limit hardening
- harden SSRF validation and relay URL checks
- bunker --profile , auto-stable connection key, and relay fallback
- add bunker --persona to sign as a derived nsec-tree identity
- route all HTTP fetches through Tor SOCKS proxy when configured
- BIP-327 compliant MuSig2 NonceGen with server-held nonce custody
- wallet subcommands for NIP-47 Nostr Wallet Connect (Phase 4 D)
- Phase 4A trust-aware req variants and trust-rank command
- Phase 4 G — bunker connect/authorize/status subcommands
- Phase 4 F — NIP-29 group admin write ops (create/update/add-user/remove-user/set-roles)
- Phase 4 E+H — output format flags (--jsonl/--csv/--tsv), NIP-65 outbox helpers
- Phase 4 B+C — publish-raw quorum/timeout/report, subscribe streaming
- Items 17-19 — sync pull/push, NIP-86 admin, relay curl
- add nostr-bray/types barrel and @experimental tags on unstable categories
- barrel exports + subpath entry points — Item 9
- add SDK factory (createBray / defaultBray) — Item 8
- normalise CLI verbs to space-separated subcommand style
- add req CLI verb for generic NIP-01 filter queries
- add event CLI verb for arbitrary event construction
- add per-command --relay flag to all publishing commands
- add bunker sign one-shot NIP-46 signing command
- add publish-raw command (sign+broadcast pre-built events)
- update vault + attestation for dominion-protocol 0.1.0 and nostr-attestations API changes
- close security audit deferrals (Batches A, B, C)
- update musig2 2-of-2 flow test for server-held nonce custody
- validate default relays in RelayPool constructor
- add BRAY_ALLOW_PRIVATE_RELAYS opt-in for dev relays
- enforce Blossom upload cap on every input path
- secret zeroisation discipline and .gitignore hardening
- privacy leak in profile-set preview and resolveRecipient errors
- tighten input validation across tool boundaries
- HTTP transport bearer-auth and rate-limit hardening
- harden SSRF validation and relay URL checks
- add bunker --persona to sign as a derived nsec-tree identity
- route all HTTP fetches through Tor SOCKS proxy when configured
- BIP-327 compliant MuSig2 NonceGen with server-held nonce custody
- wallet subcommands for NIP-47 Nostr Wallet Connect (Phase 4 D)
- Phase 4A trust-aware req variants and trust-rank command
- Phase 4 G — bunker connect/authorize/status subcommands
- Phase 4 F — NIP-29 group admin write ops (create/update/add-user/remove-user/set-roles)
- Phase 4 E+H — output format flags (--jsonl/--csv/--tsv), NIP-65 outbox helpers
- Phase 4 B+C — publish-raw quorum/timeout/report, subscribe streaming
- Items 17-19 — sync pull/push, NIP-86 admin, relay curl
- add nostr-bray/types barrel and @experimental tags on unstable categories
- barrel exports + subpath entry points — Item 9
- add SDK factory (createBray / defaultBray) — Item 8
- normalise CLI verbs to space-separated subcommand style
- add req CLI verb for generic NIP-01 filter queries
- add event CLI verb for arbitrary event construction
- add per-command --relay flag to all publishing commands
- add bunker sign one-shot NIP-46 signing command
- add publish-raw command (sign+broadcast pre-built events)
- update vault + attestation for dominion-protocol 0.1.0 and nostr-attestations API changes
- close security audit deferrals (Batches A, B, C)
- update musig2 2-of-2 flow test for server-held nonce custody
- validate default relays in RelayPool constructor
- add BRAY_ALLOW_PRIVATE_RELAYS opt-in for dev relays
- enforce Blossom upload cap on every input path
- secret zeroisation discipline and .gitignore hardening
- privacy leak in profile-set preview and resolveRecipient errors
- tighten input validation across tool boundaries
- HTTP transport bearer-auth and rate-limit hardening
- harden SSRF validation and relay URL checks
- route all HTTP fetches through Tor SOCKS proxy when configured
- BIP-327 compliant MuSig2 NonceGen with server-held nonce custody
- wallet subcommands for NIP-47 Nostr Wallet Connect (Phase 4 D)
- Phase 4A trust-aware req variants and trust-rank command
- Phase 4 G — bunker connect/authorize/status subcommands
- Phase 4 F — NIP-29 group admin write ops (create/update/add-user/remove-user/set-roles)
- Phase 4 E+H — output format flags (--jsonl/--csv/--tsv), NIP-65 outbox helpers
- Phase 4 B+C — publish-raw quorum/timeout/report, subscribe streaming
- Items 17-19 — sync pull/push, NIP-86 admin, relay curl
- add nostr-bray/types barrel and @experimental tags on unstable categories
- barrel exports + subpath entry points — Item 9
- add SDK factory (createBray / defaultBray) — Item 8
- normalise CLI verbs to space-separated subcommand style
- add req CLI verb for generic NIP-01 filter queries
- add event CLI verb for arbitrary event construction
- add per-command --relay flag to all publishing commands
- add bunker sign one-shot NIP-46 signing command
- add publish-raw command (sign+broadcast pre-built events)
- close security audit deferrals (Batches A, B, C)
- update musig2 2-of-2 flow test for server-held nonce custody
- validate default relays in RelayPool constructor
- add BRAY_ALLOW_PRIVATE_RELAYS opt-in for dev relays
- enforce Blossom upload cap on every input path
- secret zeroisation discipline and .gitignore hardening
- privacy leak in profile-set preview and resolveRecipient errors
- tighten input validation across tool boundaries
- HTTP transport bearer-auth and rate-limit hardening
- harden SSRF validation and relay URL checks
- route all HTTP fetches through Tor SOCKS proxy when configured
- BIP-327 compliant MuSig2 NonceGen with server-held nonce custody
- wallet subcommands for NIP-47 Nostr Wallet Connect (Phase 4 D)
- Phase 4A trust-aware req variants and trust-rank command
- Phase 4 G — bunker connect/authorize/status subcommands
- Phase 4 F — NIP-29 group admin write ops (create/update/add-user/remove-user/set-roles)
- Phase 4 E+H — output format flags (--jsonl/--csv/--tsv), NIP-65 outbox helpers
- Phase 4 B+C — publish-raw quorum/timeout/report, subscribe streaming
- Items 17-19 — sync pull/push, NIP-86 admin, relay curl
- add nostr-bray/types barrel and @experimental tags on unstable categories
- barrel exports + subpath entry points — Item 9
- add SDK factory (createBray / defaultBray) — Item 8
- normalise CLI verbs to space-separated subcommand style
- add req CLI verb for generic NIP-01 filter queries
- add event CLI verb for arbitrary event construction
- add per-command --relay flag to all publishing commands
- add bunker sign one-shot NIP-46 signing command
- add publish-raw command (sign+broadcast pre-built events)
- update musig2 2-of-2 flow test for server-held nonce custody
- validate default relays in RelayPool constructor
- add BRAY_ALLOW_PRIVATE_RELAYS opt-in for dev relays
- enforce Blossom upload cap on every input path
- secret zeroisation discipline and .gitignore hardening
- privacy leak in profile-set preview and resolveRecipient errors
- tighten input validation across tool boundaries
- HTTP transport bearer-auth and rate-limit hardening
- harden SSRF validation and relay URL checks
First public release. Covers CLI parity with nak, the SDK surface, and trust-aware extensions.
| Command | Description |
|---|---|
publish-raw |
Sign and broadcast a pre-built event from stdin (NIP-01) |
bunker sign |
One-shot NIP-46 signing without storing a bunker session |
bunker connect |
Start a persistent bunker session |
bunker authorize |
Approve a pending NIP-46 authorisation request |
bunker status |
Show active bunker session |
event |
Construct and publish an arbitrary Nostr event |
req |
Generic NIP-01 filter query |
subscribe |
Long-running subscription with streamed output |
trust-rank |
Compute and display WoT trust rank for a pubkey |
wallet connect |
Register a NIP-47 NWC connection URI |
wallet disconnect |
Remove a stored NWC connection |
wallet status |
Show active wallet connection |
wallet pay |
Pay a Lightning invoice via NWC |
wallet balance |
Query wallet balance |
wallet history |
List recent payment history |
outbox-relays |
Fetch NIP-65 outbox relay list for a pubkey |
outbox-publish |
Publish to a pubkey's outbox relays |
sync-pull |
Pull events from a relay into local storage |
sync-push |
Push locally-held events to a relay |
relay-curl |
Raw relay WebSocket probe |
admin-* |
NIP-86 relay admin commands (allow/ban pubkey, kind, IP) |
group-create |
NIP-29 group creation |
group-update |
NIP-29 group metadata update |
group-add-user |
Add user to NIP-29 group |
group-remove-user |
Remove user from NIP-29 group |
group-set-roles |
Set roles on a NIP-29 group member |
musig2-key |
MuSig2 BIP-327 key aggregation |
musig2-nonce |
MuSig2 nonce generation |
musig2-partial-sign |
MuSig2 partial signature |
musig2-aggregate |
MuSig2 signature aggregation |
--relay <url>— per-command relay override on all publishing commands--min-trust <score>— filterreqresults by minimum trust score--report— print per-relay outcome afterpublish-raw--timeout <ms>— relay timeout forpublish-raw--quorum <n>— requirenrelay confirmations forpublish-raw--jsonl/--csv/--tsv— output format on every command
Verb style: compound verbs now use space-separated subcommand style everywhere. Pass the noun and subverb as separate arguments — bray key encrypt rather than bray key-encrypt. Both forms are accepted; the space form is canonical.
Migration table for callers that previously passed a hyphenated single argument:
| Old (single hyphenated arg) | New (space-separated) |
|---|---|
key-encrypt |
key encrypt |
key-decrypt |
key decrypt |
dm-read |
dm read |
proof-publish |
proof publish |
profile-set |
profile set |
encode-npub |
encode npub |
encode-note |
encode note |
encode-nprofile |
encode nprofile |
encode-nevent |
encode nevent |
encode-nsec |
encode nsec |
trust-read |
trust read |
trust-verify |
trust verify |
trust-revoke |
trust revoke |
trust-request |
trust request |
nip-publish |
nip publish |
nip-read |
nip read |
relay-set |
relay set |
ring-prove |
ring prove |
ring-verify |
ring verify |
cli.ts split: the monolithic 947-line src/cli.ts has been split into per-category modules under src/cli/commands/. No user-visible change.
nostr-bray now exports a full SDK surface. Import patterns:
// Full factory
import { createBray, defaultBray } from 'nostr-bray'
const bray = await defaultBray()
const result = await bray.identity.whoami()
// Category subpath (tree-shakeable)
import { whoami } from 'nostr-bray/identity'
import { dmRead } from 'nostr-bray/social'
// Types only
import type { BrayConfig, IdentityResult } from 'nostr-bray/types'Subpath exports: nostr-bray/identity, nostr-bray/social, nostr-bray/trust,
nostr-bray/relay, nostr-bray/zap, nostr-bray/vault, nostr-bray/dispatch,
nostr-bray/signet, nostr-bray/moderation, nostr-bray/privacy,
nostr-bray/marketplace, nostr-bray/workflow, nostr-bray/types.
Package is marked "sideEffects": false for bundler tree-shaking.
Categories marked @experimental in TSDoc may change shape in 0.1.x patches.
loadConfig() now accepts a NOSTR_BUNKER_URI environment variable as a
fallback when no NOSTR_SECRET_KEY is present. The CLI picks this up
automatically; SDK callers can pass { bunkerUri } to createBray().