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:
- Add an
EVENTcommand for publishing events - Relay info documents, maybe a
RELAYcommand even - Be able to reply, react, poast and zap
- Have a nice thread viewer
- Expand the
REQoptions so you can easily filter by follows - Relay auto-selection based on
REQparameters - Support for rich rendering of more event kinds
- Command aliases
- A favicon
If you give it a try please let me know and don't forget to use the #grimoire hashtag.


Comments
No comments yet. Start the conversation.