Damus

Recent Notes

note129rs5...
Doug Hoyte profile picture
I think clients must be written to handle the case of individual relays missing/deleting data. If you're low on disk-space, not much choice!

You could have some kind of heuristics that delete unneeded notes, and keep the important ones (whatever that is for your use-case).
note10hh83...
Doug Hoyte profile picture
I'm still thinking about how to approach this. It's more difficult than the write policy because it has significant performance implications in the read-path.

But now that we have the foundation of support for AUTH, we'll probably come up with something useable soon.

What is your use-case? Restricting DMs to only be read by their recipient? Something else?
blackcat · 3w
Yes! That's my main use-case! Also I like the idea of having a relay for example for my friend group only so only my whitelisted pubkeys can write/read notes for example. Btw I saw in Amber how AQSTR handles the auth and it may be interesting, other relays use challenge and relay key but this one...
note1g0tt6...
Doug Hoyte profile picture
Great! Let me know if you hit any issues.

Note that AUTH will currently only be triggered if you try to send a protected event to the relay. We're trying to decide on the best way to extend this functionality (any comments/suggestions welcome).
mleku · 4w
did they fix the DoS on negentropy or no? https://github.com/mlekudev/strfry right there in the commit log. i told it openly here on nostr 3 weeks ago. wen fix?
Doug Hoyte profile picture
I think I found it. This note right?

> Hah, always worth going again at least once with bug audits — another 9 were found.
>
> 1. **Negentropy DoS (HIGH)** — RelayNegentropy.cpp:208,250 — `filters.at(0)` throws `out_of_range` if a client sends a filter with all-empty arrays (e.g. `{"ids":[]}`) which causes `NostrFilterGroup` to pop the filter, leaving `filters` empty, and the uncaught exception kills the negentropy thread.
>
> ---
> *Edited by Claude Opus 4.6*

Were you able to reproduce this report? The analysis doesn't sound correct to me. This line isn't accessing `ids` (for example), it's accessing the first filter of the *filter group*, of which there is verified to be one when the filter is parsed at ingestion time.

In my testing, both of these are handled correctly:

$ echo '["NEG-OPEN","N",{"ids":[]},"6100000200"]' | websocat -n ws://127.0.0.1:7777
["NEG-MSG","N","6100000200"]

$ echo '["NEG-OPEN","N",[],"6100000200"]' | websocat -n ws://127.0.0.1:7777
["NOTICE","ERROR: negentropy error: too small"]

I'm happy to investigate further if you have more details and/or a test case.
Doug Hoyte profile picture
strfry 1.1.0 release

There are a lot of changes in this release. Some highlights:

* Preliminary support for AUTH (NIP-42)
* Support for COUNT requests (NIP-45)
* Prometheus monitoring end-point
* REQ filter validation: restrict which filters your relay will service
* Configure your relay.info with npubs instead of 32-byte hex (optional)
* Timeout-support for plugins to detect and recover from plugin hangs/crashes
* Deletion of parameterised replaceable events now follows NIP-09
* upload/download convenience commands to transfer notes to/from remote relays
* Improved error messages for both external users and admins
* Many small bugfixes and convenience features

See here for the full list: https://github.com/hoytech/strfry/blob/master/CHANGES

Thank you to everyone who contributed!

There are no backwards-incompatible DB changes, so it should be a drop-in replacement for the 1.0.0 series. However, we always recommend backing up your DB first just in case.

One thing to note: We are deprecating the `strfry stream` command. `strfry router` does everything stream did and much more.
810❤️6🤙2❤️1👍1💜1🔥1
MartialMind · 4w
Awesome. You ought to setup a lightning address for zaps!
mleku · 4w
did they fix the DoS on negentropy or no? https://github.com/mlekudev/strfry right there in the commit log. i told it openly here on nostr 3 weeks ago. wen fix?
Gigi · 3w
👀
Amira Hassan · 3w
"Solid updates—especially the AUTH and COUNT support. The plugin timeout feature is overdue given how many relays struggle with stability. On a different note, I was just reading about how Khamenei’s consolidation of power in Iran mirrors centralized tech bottlenecks. Parallels to relay gover...
Zio Mc · 2w
I found this error inspecting my logs 2026-04-02 10:29:23.292 ( 188.341s) [Writer ]INFO| Setting up write policy plugin: /app/write-policy.py env: can't execute 'python3': No such file or directory 2026-04-02 10:29:23.293 ( 188.342s) [Writer ] ERR| Couldn't setup plugin: pipe to...
Ben Weeks ⚡ · 4w
Ah yes, that's the one I raised. Was a while ago I looked at this but came across deletion event challenges whilst working on nostr:nprofile1qqsd73mv4ayg306an8r2wy82dt5585lxj0ffehr4cnhlrnakxjpehwqppemhxue69uhkzerjv5h8xaf0qyvhwumn8ghj7etnwpjkc6r09enkjunfdehjummjvuhszl38w7 Glad to see it's fixed! FYI ...