My Contributions on Nostr in 2023
- Feb-Mar: The beginning
- Apr-May: First tech-book contribution
- Jun-Jul: Construction of My Own Relay
- Aug-Sep: Client development a little off the beaten path
- Oct-Dec: Further niches and struggles
- Conclusion
- Appendix: Comprehensive list of my contributions on Nostr in 2023
Hello, I’m jiftechnify (a.k.a. かすてらふぃ, pronunced as castella-fee). Since my first experience with Nostr in February of this year, I have been contributing to Nostr in any way I can while living my life as a humble software engineer. Now that I think about it, I’ve come a long way, so I’d like to take a look back at what I’ve accomplished in the 10 months since I discovered Nostr.
Feb-Mar: The beginning
The first time I saw the name “Nostr” was at the end of 2022, in the news that Twitter has banned links to competing SNS. I remember seeing an unfamiliar name, Nostr, mixed in among the big names like Facebook and Mastodon, and thinking, “What the heck is this…?” However, at that time I did not get start with the Nostr.
What led me to try my hand at decentralized SNS such as the Nostr was the Twitter’s mass account suspension at February 3, 2023. Fortunately, my Twitter account was not suspended, but I have been dissatisfied with the service since the transition to Elon Musk’s regime, and have had some very personal feelings like, “No matter what I say on Twitter, no one will listen me.” I thought it wouldn’t be a bad idea to go outside around here. However, when I created a private key for Nostr, all that appeared before me was a barrage of spam in Chinese, or at best, tweets in English. I felt this was a little harsh, so I decided to try Misskey.io at this time, for a moment.
On February 6th, I started to get a little tired of Misskey.io’s glittery look, I suddenly remembered and looked at the Nostr, and noticed that a movement was taking place: “Let’s connect Japanese people with the #japan tag!” I did. Through this opportunity, I was able to get connected with many Japanese people who came to the Nostr at the same time. I also feel happy that even my innocent comments get a response, and that I feel like I can do something interesting with them. With this strange premonition, I became obsessed with the Nostr, as an SNS.
In the beginning, while other developers were interested in developing custom clients, I was motivated to do something a little different, specifically implementing relays, so I read NIPs. A Scrapbox, which collects information on Nostr, was launched, and I saw that someone there was compiling Japanese translations of NIPs, so I decided to contribute as well. I spent my free time at work working on the translation, and received many words of gratitude and Zaps from many people. I believe that the reason I have been able to continue contributing here until today is the joy I felt at that time.
Meanwhile, on February 22nd, the first Nostr online study session (#0) was held. Even though it’s only been a little over two weeks since the community was formed, I saw so many interesting ideas being created, and I couldn’t help but feel like I wanted to create something interesting myself. The first thing that came to mind was the idea of a follow-list organizer 1. I thought it would be interesting to be able to display the last post date and time of each follower and the number of posts in the past few days as reference information for organizing followers. But when I started implementing it, I realized that sometimes events could not be retrieved from relays as specified. If there are many events that match the filters, only some of them will be returned. As I experimented and read the source code to understand the behavior of various relays, I realized that retrieving past events stored in a relay as desired is much more difficult than it looks, and there should be a library that solves the problem well. I thought, wouldn’t I and other developers be happy if We had the “magic wand”?
This is how nostr-fetch was born, which is now a masterpiece of my OSS activities about Nostr. Now, this is not only used in the applications authored by me, such as a web client Nosaray that allows you to retrieve past timelines, and a CLI tool nosdump, but also used behind the scenes of nostr.watch, a site where you can view Nostr relay information from all over the world. It has become an unsung hero who plays an unsung role, such as helping Kojira-san with Nostr data analysis and Kirino-san’s data migration of his relay.
After that, Nostr online study session #1 was held on March 10th, just two weeks after the last session. I decided to take the plunge and announce this result. This was my first time speaking at a technical study session. I was unable to prepare the slides at the last minute, and when I actually tried to present them, I couldn’t fit them all in the time frame and disrupted the meeting schedule…. However, I was able to realize the joy of asking many people about things.
Apr-May: First tech-book contribution
After the study session, I worked on translating NIPs for a while, nitpicked NIPs that caught my attention while translating, added features to nostr-fetch, and took a look at Bluesky.
(Image of myself managed to appear in the list of NIPs contributors)
One day, a voice called out: let’s publish technical fanzine featuring Nostr at the 14th TechBookFest (技術書典14), which will be held in May! Ever since I participated in TechBookFest several years ago, I had a vague desire to publish something in such an event, so I decided to contribute to it. Needless to say, it was my first experience in my life.
Well, what should I write…? TechBookFest is “a festival where you can discover new technologies”. So, this is a great opportunity for a wide range of developers to learn about Nostr. I thought that if I created exercises that allow people to understand the basics of the Nostr protocol while crafting things that actually work (bots), the Nostr community would expand its base of developers and become a more interesting place. What I ended up writing was an article in “Hello, Nostr!” titled “Learn Nostr protocol by crafting a thing (手を動かして学ぶNostrプロトコル)”, and coding exercises.
(The cover of “Hello, Nostr!”. Nostr-chan(by Aogi-san) is very cute!)
In the end, the original plan was not achieved, and instead the project reached a people that was already using the Nostr and did not normally write software. However, I think it has had a positive impact on the community, with many unique bots being created and TL becoming more lively than ever before, and people using this as an opportunity to create what they want on Nostr.
Jun-Jul: Construction of My Own Relay
A question suddenly comes to mind: “Is it possible to set up a Nostr relay and have everyone use it even on my hobbyist, Raspberry Pi-based home server?”
At the same time, a new relay implementation called rnostr was announced, so I initially ran that implementation. However, since it had just been released at the time, its behavior was quite questionable, and there were times when it would return events that the client had not requested, disrupting everyone’s timeline. This is really annoying, so I decided to move to the more proven relay implementation strfry.
I made a little ingenuity here, in addition to creating a relay that limits access only to those within Japan based on Geo IP(similar to the existing relay for Japanese), a “followers-only” relay that only accepts posts from accounts that follow me, the relay administrator. I was able to create unique value by being able to deliver a timeline that is spam-free to some extent to Japanese Nostriches who live overseas or are temporarily abroad.
By the way, I summarized the knowledge I got at that time and wrote an article: “Home-made Nostr Relay: simple setup with Raspberry Pi (ラズパイで簡単! 一家に一台おうちNostrリレー)” for the fanzine “Hello Nostr! Yo Bluesky!”, published at the 15th TechBookFest in November.
(The cover of “Hello Nostr! Yo Bluesky!”. nos-chan and sora-chan(personification of Bluesky) (by Stok-san) are very kawaii!)
Aug-Sep: Client development a little off the beaten path
If you have read this article up to this point, you may have a vague idea that I am the type of person who sees value in doing things that are a little off the beaten track2. At this stage this tendency also appears in the policies of development activities.
vscode-nostr-client
If there was a Nostr client as an extension for a text editor, you could use Nostr while pretending to work…? In response to this question, I created the Nostr client as an extension for Visual Studio Code: vscode-nostr-client. At the moment, It can only post notes and set status (described in detail later), but it should be enough to secretly do Nostr at your office(?) This is also my first time developing a VSCode extension, and it was an exciting experience.
nostatus
Around the same time, at the suggestion of Will-san, the developer of Damus, a specification that allows Nostr clients to set and display one’s current status (such as “at work” or “out of home”), like Slack or Discord, have been included in NIPs. In an ordinal client, it is just displayed casually under the name, but wouldn’t it be interesting to have a timeline with just the status listed…? This idea crystallized to a Nostr client: nostatus.
(The logo of nostatus. Thanks to Anzu-san, taught me how to bend lines in Figma. Until then, I could only draw circles and squares with Figma…)
It was actually just a trial project for web front-end technology at first, and I didn’t have any plans to make much of it. However, once we released it, the response was unexpectedly great, and we received positive responses from big names, such as verbiricha-san(author of Habla.news), Vitor-san(author of Amethyst), and Will-san, the originator of the user status spec. This made me refresh my mind; I decided to work seriously on it.
Contribution to “Software Design” magazine
“Software Design” is a comprehensive magazine on software technology that every Japanese software engineer knows. It was also during this period that I wrote the article for it.
It was in March that a plan for a series on Nostr was launched, led by mattn-san. Although I was interested, I missed the topic and ended up being left behind… But one day, one of the people who was scheduled to contribute declined to write. An opportunity that may never come again, I can’t afford to miss it…! With this in mind, I decided to write on behalf of him. Just a few months after my first contribution to a tech-fanzine, I was able to make my debut in a commercial magazine.
The theme of the article I am responsible for is “Nostr Protocol”. Although this was a topic I had experience writing about, it was not easy to write while being aware of differences in readership and word count constraints. However, the joy I felt when I turned over the completed book and saw what I had written printed on it, was indescribable.
(Heading of my article in Software Design. Pretty ostrich!)
Oct-Dec: Further niches and struggles
During this period, I was driven by a technical interest and was constantly creating things that I came up with, but at the same time I often wondered if this would really be of use to people.
hono-nostr-auth
https://github.com/jiftechnify/hono-nostr-auth
There is a specification called NIP-98 that applies Nostr’s mechanism to HTTP authentication. I thought it would be COOL if I could implement this in one-liner using the recently popular web server framework called Hono, so I created it. However, I have not been able to find a good way to apply NIP-98(except for authentication for image uploader)…
strfrui
https://github.com/jiftechnify/strfrui
strfry, which is also used in the aforementioned my own relay, has a function called event-sifter that checks whether some conditions are met for each event that enters the relay, and only passes events that meet the conditions. You can use arbitrary program to implement the condition check, allowing much more flexible filtering than other relay implementations. I made strfrui, because I thought it would be COOL if I could make event-sifters easy to implement.
Immediately after its release, there was a positive response mainly from overseas Nostr relay operators, and it was also featured in the Nostr Report, which summarizes daily/weekly events in the Nostr community. However, due to the nature of the product, it did not resonate with the “ordinary people” who use Nostr just as a SNS. At that time, I realized that I’m a person who feels happy when something I created used by many people rather than when satisfy my technical interests.
Shiritori Relay
https://srtrelay.c-stellar.net/
This is a very restrictive relay that cannot be posted unless Shiritori connection is established for the previous post. It was created with the simple motive of wanting to do something interesting by applying strfry’s event-sifter.
At the beginning, there was no point in going through the trouble of endless Shiritori on Nostr, so it didn’t get very popular, but after adding support for the pronunciation of kanji and English words and I started importing posts from other relays. It became a strange but somehow interesting place to enjoy Shiritori connections by chance.
(Ritrin(りとりん), the guardian of the Shiritori Relay. How cute she is! Huge thanks to Targoyle-san!)
Conclusion
Looking back, I realize that I have done a lot of things and experienced many “firsts in my life” over the past 10 months. The reason I’ve been able to work so hard is definitely the kind words and reactions from the Nostr community, and of course, Zaps. I would like to take this opportunity to thank you: from the bottom of my heart!
I don’t know how Nostr will develop from next year onwards, but nothing would make me happier than being able to play a part in its development!
Appendix: Comprehensive list of my contributions on Nostr in 2023
Nostr Clients
| Name | App URL | Repo URL | Description |
|---|---|---|---|
| Nosaray | https://nosaray.vercel.app/ | https://github.com/jiftechnify/nosaray | “Wayback machine” for Nostr |
| nostatus | https://nostatus.vercel.app/ | https://github.com/jiftechnify/nostatus | A client specialized in browsing user status |
| vscode-nostr-client | https://marketplace.visualstudio.com/items?itemName=jiftechnify.nostr-client | https://github.com/jiftechnify/vscode-nostr-client | A Nostr Client for VSCode |
Libraries/Tools for Nostr
| Name | Repo URL | Description |
|---|---|---|
| nostr-fetch | https://github.com/jiftechnify/nostr-fetch | A utility library that allows apps to effortlessly fetch past events from Nostr relays |
| nosdump | https://github.com/jiftechnify/nosdump | A CLI tool which dumps events stored in Nostr relays |
| hono-nostr-auth | https://github.com/jiftechnify/hono-nostr-auth | Nostr HTTP auth middleware for Hono |
| strfrui | https://github.com/jiftechnify/strfrui | A framework for writing strfry’s event-sifter plugin in Go |
Operating Nostr Relays
| Relay URL | Description |
|---|---|
| wss://nrelay.c-stellar.net | Relay that only accept events from followers of me |
| wss://nrelay-jp.c-stellar.net | Relay that can be accessed from within Japan (Geo IP restricted) |
| wss://srtrelay.c-stellar.net | Shiritori-only relay |
Lightning Talks
| Session | Live Streaming Archive URL | Slide Deck URL | Description |
|---|---|---|---|
| Nostr online study session #1 | https://www.youtube.com/live/J6wgG4epGK0 | https://speakerdeck.com/jiftechnify/nostrnorirekaralou-renakusubetenoibentowoqu-tutekuruji-shu | About nostr-fetch |
| Nostr online study session #2 | https://www.youtube.com/live/j7IZeAzL67M | https://speakerdeck.com/jiftechnify/think-about-feasibility-of-scheduled-posts-on-nostr | Thinking about feasibility of scheduled posts on Nostr |
| Nostr online study session #3 | https://www.youtube.com/live/t3VkJpr1_sA | https://speakerdeck.com/jiftechnify/cryptography-101-for-understanding-nostr | Brief explanation of cryptography supporting Nostr |
Writing Activities
| Book Name | Book Info URL | Article Title | Description |
|---|---|---|---|
| Hello Nostr! | https://nip-book.nostr-jp.org/book/1/ | 手を動かして学ぶ Nostrプロトコル | Learning Nostr protocol by crafting a bot |
| Hello Nostr! Yo Bluesky! | https://nip-book.nostr-jp.org/book/2/ | ラズパイで簡単! 一家に一台 おうちNostrリレー | The way to operate Nostr relays on Raspberry Pi |
| Software Design Oct. 2023 | https://gihyo.jp/magazine/SD/archive/2023/202310 | 詳説 Nostrプロトコル | Explanations of important NIPs, especially NIP-01 |
The reason why I decided to create a follow-list organizer at that time is because “following too many people” were suspected to be the cause of the phenomenon where the follow list suddenly became empty. The actual cause seems to be simply a flaw in the client’s implementation. By the way, the follow organization tool was not completed until today. ↩
In other words, simply I tend to avoid standing on a stage with many rivals. ↩