Grimoire

a nostr client for magicians

verbiricha

10. Dezember 2025December 10, 2025 · 3 Min. Lesezeit3 min read · Aktualisiert am 29. Januar 2026Updated January 29, 2026

I'm happy to introduce Grimoire, a web-based nostr client for developers, power users and magicians. The code is open source.

Why?#

Grimoire’s goal is to be a sandbox for learning and experimenting with the nostr protocol. It’s inspired by nak, tmux, alphaama, the noStrudel event console & tiling window managers like i3.

How it works#

The user can run commands that spawn windows in a tiling layout, with multiple workspaces available. There's no default feed but a blank canvas for you to create a unique nostr browsing experience.

Kinds and NIPs#

One of the first things I wanted is to be able to introspect the nostr protocol itself. Meaning: I want to quickly know what a kind does, where it's defined, and follow the other stuff rabbit hole from my client. You can figure out what kind 5 does by running KIND 5 and learning about deletion events, which links to the corresponding NIP.

If you are curious about a certain NIP, let's say NIP-29, you just run NIP 29 and you'll be able to read it. The event kinds defined on the NIP are documented too, so everything is linked together.

Requests#

Grimoire would not be very useful if you couldn't interact with relays: enter the REQ command. The REQ allows you to query relays for any event you'd like, with command-line flags to set query parameters. This mimics nak's REQ command giving you a nice CLI interface to nostr's query language. REQ -k 1 theforest.nostr1.com will show you a feed of the notes on the wss://theforest.nostr1.com relay. You can specify multiple kinds or relays, tags, timestamps, etc. Check out MAN REQ for the full documentation.

For instance, REQ -a verbiricha@habla.news -k 30023 -k 9802 will show you a feed of all my long-form and highlight events.

Event encoding and decoding#

I find myself using nak a lot for encoding and decoding nostr bech32 entities. All bech32 id's on Grimoire are copyable, and you can easily decode or encode them. The DECODE command takes a bech32 string and shows you the information in it, allowing you to add or remove relay hints.

Conversely, the ENCODE command can encode a pubkey, event id or address into a bech32 string.

What's missing#

The client is read-only for now, and the only thing logging in does is to set the default relays for reading. There's probably many bugs, missing features and bad UI/UX so I encourage you to try it and report the issues you find.

What's next?#

Grimoire is just a proof of concept at this point. There's still a lot to do and I'll be monitoring user feedback to see what's more important. In no particular order, I want to:


If you give it a try please let me know and don't forget to use the #grimoire hashtag.

#grimoire

Written by

Comments

No comments yet. Start the conversation.

Contents

4 sections

  1. Why?
  2. How it works
  3. What's missing
  4. What's next?