3 min read

Introducing Trusted Relays

Introducing Trusted Relays

Today, I am introducing Trusted Relays into the Nostr ecosystem, an implementation of my proposed Trusted Relay Assertions which I have been discussing on Nostr for a few weeks that aims to determine trust scores for relays. Trusted Relays was originally conceived months ago as an alternative to sites to like nostr.watch, due to some personal frustrations with their metrics, but really began to take shape when Vitor Pamplona introduced NIP-85: Trusted Assertions. I have been fascinated with the ideas of web of trust on Nostr since their introduction, but it wasn't until I read Vitor's take on them that it really started to click.

Around the same time, In mid-December 2025, I had begun developing a proof-of-concept Nostr web client based on vinney...axkl's nostr-hypermedia, called Hyper. While working on Hyper's outbox implementation, I ran into quite a few issues with relay connectivity, particularly with popular relays like nostr.band which unbeknownst to me (and seemingly much of the Nostr community) had been essentially abandoned. I spent quite a bit of time checking Nostr for other user reports on nostr.band's issues, and even more, troubleshooting my implementation; time which could have been much better spent on developing my project instead.The goal of Trusted Relays is simple: give users the ability to see if a relay is reliable and safe to use, and provide developers with the ability to surface that information to their users easily.

Relay Details

If you follow my other work, I have been developing Signet, a new take on remote signers originally forked from . As of version 1.8.0, released today, relay trust scores are integrated into Signet so you can catch issues before they become a problem, a feature which is particularly important to determine if new NostrConnect sign-ins could be problematic. I forwarded some information to greenart7c3 for review, so maybe we'll get to see this in gold-standard signers like Amber (and of course, others) as well.

Signet

I won't dive into the specifics of the trust score methodology here for brevity, but we break down scores with three simple categories: reliability, quality, and accessibility, each carrying their own weight, and each having several subcategories also carrying their own weight. The final score is determined through a simple calculation which can be configured by anyone choosing to run their on instance of Trusted Relays:

Trust Score = (40% × Reliability) + (35% × Quality) + (25% × Accessibility)

If you would like full details on the NIP as well as the current algorithm, feel free to read the documentation on the Github repo. All relays are probed once per hour, and trust assertions (kind 30385, if you want to poke around for those events) are published immediately after and tracked for 90 days on the site to provide a history of trust scores.If you are a developer and want to include relay trust scores, there's plenty of documentation to get you started in the repo, but the simplest way to get scores is to call:

https://trustedrelays.xyz/api/score?url=wss://relay.nip46.com (replace with your relay of choice of course)

This will get you basic information like scores, score categories, online status, URL, last score timestamp, etc. Full attestation data can be ingested by replacing "score" with "relay" in the link above. Currently, rate limiting is set to 60 requests per minute with no token requirements, and no cost (ever). If the API starts getting abused by bots, I'll consider a new approach, but there still never be any costs associated.

This is still very much an early implementation of what I hope to accomplish with Trusted Relay Assertions so the current implementation still gathers most of its data from ingesting NIP-11 and NIP-66 data. Within the next few weeks, I'll continue implementing some of the remaining ideas such as NIP-32 reporting for relays, user login for additional web of trust features, and more. Remember that the relays currently have only about 2 or 3 days of history so while I am confident of the current results, the more data the system has, the better the results will be (hence the "confidence" column in the reports). Eventually, I would love to see dozens or hundreds of instances of Trusted Relays running and consuming each other's data to create a more distributed system, but this has not been implemented yet (soon tm!).

Happy to hear thoughts and ideas, and of course, feel free to post issues and pull requests on the Github repo If you want to donate to the project, just zap me on Nostr.

This post and comments are published on Nostr.