this post was submitted on 10 Dec 2025
51 points (98.1% liked)
Fediverse
38242 readers
507 users here now
A community to talk about the Fediverse and all it's related services using ActivityPub (Mastodon, Lemmy, Mbin, etc).
If you wanted to get help with moderating your own community then head over to !moderators@lemmy.world!
Rules
- Posts must be on topic.
- Be respectful of others.
- Cite the sources used for graphs and other statistics.
- Follow the general Lemmy.world rules.
Learn more at these websites: Join The Fediverse Wiki, Fediverse.info, Wikipedia Page, The Federation Info (Stats), FediDB (Stats), Sub Rehab (Reddit Migration)
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Yes this is a great discussion. Generally speaking I see how user local-first posting mirrored by relays under e2ee can help solve some of the downsides of instance based federation, however it seems like the actual implementation makes or breaks the utility.
I have a concept that came up in reading the comments on lobster, which is that the issue of incomplete data due to asynchronous/intermittent downtime push and pull by users to/from the relays as well as inconsistent relays behavior leads to inevitable incomplete/non-consensus/out of date data access (something federation also suffers from).
My idea is that relays, bothe standard and specialized, could host a dedicated encrypted ledger for each user/key that has posted to it (potentially within a time limit, or with approval) that holds only a sequential identifier (counted since the first event by the key) of the user's most recent activity and a unique identifier/key associated with the event the activity was associated with (so that edits would be associated with the UI of the post being edited for example, or a new message to an ongoing thread would use the UI of the thread and the UI of the message.) Limit this log to very few entries and replace it every time it is updated, say between 1 and 10, and you would keep the size of the file very small, and the pushed update from the user/key would also be very small.
This way a user could push activity log updates to a broader set of hosts/relays than the actual content/event was sent to while keeping the cache/data burden on the broader network down. Ideally this would mean that not only the Relays but also users following the user/key could hold the log (enabling gossip without large cache burden). Unlike a blockchain where the ledgers would need to cross-sync with each-other and seek consensus on larger data chunks, in this case the reader of the ledger can always default to the most recent sequential identifier, and that identifier would be generated by publishing key/user.
This way time code variance isn't an issue, and at time of login a user can pull the logs for all users/keys they follow from relays OR peers they follow and determine the number of events posted by each user/key since they last pulled updates. Then the client could crawl the relays for the actual events with sequential identifiers between those AND stop crawling once they are found.
One issue I see with this sort of system is in the case of deleted events, so perhaps the log would also need to include a string of the sequential identifiers of events which have been deleted within a given time period.
I don't actually know how nostr deals with messages if you're offline, if at all, not that familiar with the protocol. But your idea sounds workable.
I tend to come at it from the other side, I like the federated model, but think the "supernodes" could behave more like dedicated relays. Like, a lemmy server right now does a lot of things, like serve a frontend, do expensive database queries to show a sorted feed, etc. and a lot of that does not scale very well. So having different kinds of nodes with more specialization, while still following a federated model makes sense to me. Right now if one of my users subscribes to some community, that community's instance will start spamming my instance with updates nonstop, even though that user might not be active or might not even read that community anymore. It would be nicer if there was some kind of beefy instance I could request this data from if necessary, without getting each and every update even though 90% of it might never be viewed. But keeping individual instances that could have their own community and themes, or just be hosted for you and your friends to reduce the burden on non-techies having to self-host something.
Or put another way, instead of making the relays more instance-y, embrace the super instances and make them more relay-y, but tailor made for that job and still hostable by anyone, if they want to spend on the hardware. But I'm still not clear on where you'd draw the line/how exactly you'd split the responsibility. For lemmy, instead of sending 100's of requests in parallel for each thing that happens, a super-instance could just consolidate all the events and send them as single big requests/batches to sub-instances and maybe that's a good place to draw the line?