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.
