Remix.run Logo
Show HN: s@: decentralized social networking over static sites(satproto.org)
91 points by remywang 3 hours ago | 29 comments
neilv 17 minutes ago | parent | next [-]

> By convention, the client looks under /satellite/ by default. If that path is already taken, place a satproto_root.json file at the domain root containing { "sat_root": "my-custom-repo" } — the client checks this first.

Would a `/.well-known/` be helpful here?

https://en.wikipedia.org/wiki/Well-known_URI

noman-land 8 minutes ago | parent [-]

.poorly-known

_pdp_ an hour ago | parent | prev | next [-]

Long ago there was this thing called foaf https://en.wikipedia.org/wiki/FOAF and also https://en.wikipedia.org/wiki/Pingback ... it was the closest I've seen to completely decentralised social media.

notpushkin a minute ago | parent [-]

Webmention is the modern counterpart: https://indieweb.org/Webmention

(The IndieWeb wiki is probably the best resource for exploring the personal website-based social networking tech nowadays. I recommend the author check it out and maybe iterate on that instead :)

Retr0id an hour ago | parent | prev | next [-]

I wish I could share a graph of my eyebrow height over time as I read through this part:

> sAT Protocol (s@) is a decentralized social networking protocol based on static sites. Each user owns a static website storing all their data in encrypted JSON stores.

nine_k 19 minutes ago | parent | next [-]

Your app picks up a bunch of feeds and composes them into a nice page for you, much like an RSS feed reader. The twist is that each feed is encrypted in a way that only you can decrypt, so the cryptography also gives strong identity guarantees, and allows for private messaging.

It's basically PGP + RSS, only mapped to a bunch of files of specific structure. Those could be RSS/ATOM feeds instead of JSON, to reuse an existing format. The reuse of the ideas is good, these ideas are time-proven.

As any PGP-lookalike, this thing has the key distribution problem, and won't scale to billions of users due to that. Key rotation and revocation is another problem. But for a small-scale network it should be fine, and can run on very tiny, very low-power devices, maybe even with intermittent connectivity.

Retr0id 18 minutes ago | parent [-]

> The twist is that each feed is encrypted in a way that only you can decrypt

Not true, the "content key" is common to all viewers of all posts, from a particular author. (hence the need to re-encrypt the world when you unfollow someone...)

Retr0id an hour ago | parent | prev | next [-]

But in all fairness it seems like a reasonable system, given the narrow scope of its goals. It does not scale, but that's on purpose. Although I could still see "Feed Aggregation" becoming impractical even with a small number of friends with a modest number of posts.

Cryptographically, a problem is that it makes ciphertexts publicly enumerable, protected by a X25519-derived key. This makes it very vulnerable to harvest-now-decrypt-later attacks, if you believe quantum computing will ever happen.

RobRivera an hour ago | parent | prev | next [-]

So a database, that you can send a network response or request with that data, that when received by a client, builds a static website.

I see.

I see...

behehebd 24 minutes ago | parent | prev [-]

> Key Rotation (Unfollow)

    _  /
    .  .
MattCruikshank 9 minutes ago | parent | prev | next [-]

Amazing. I'm building almost the exact same thing. I'll share mine when it's mature enough. :D

est 2 hours ago | parent | prev | next [-]

Seems a bit complicated.

Why not use git for social networking ;)

https://github.com/est/gitweets

givemeethekeys 10 minutes ago | parent | prev | next [-]

This needs a YouTube demo video.

evbogue 42 minutes ago | parent | prev | next [-]

This obviously needs some iteration on the protocol design as other commenters have mentioned, but I'd still be up for partnering up over here at https://anproto.com/

vexnull an hour ago | parent | prev | next [-]

Interesting approach. The static-site constraint is clever for self-sovereignty but I wonder how feed aggregation scales once you follow more than a handful of people - you're polling N sites with no push mechanism.

Nostr solved the discovery/aggregation problem with relays but introduced its own tradeoffs (relay trust, spam). This sits at the opposite end - zero infrastructure dependencies but O(N) polling. Feels like there's a middle ground waiting to be found.

8organicbits 5 minutes ago | parent | next [-]

That should scale pretty well. The HTTP fetch of posts/index.json could use conditional get requests to avoid downloading the body when there are no changes. Static files are dirt cheap to serve.

iamnothere an hour ago | parent | prev | next [-]

Does the polling need to be fast? I think back to mailing lists and the huge delays involved in those conversations. Yet they were/are often very productive. Somewhere between Twitter/X speed and mailing list speed might be acceptable.

Maybe this would be better with a LiveJournal style interface. Medium length posts with threaded comments/replies are an underrated format.

bandrami 38 minutes ago | parent | prev [-]

Maybe that's a feature rather than a bug

flaxxer 13 minutes ago | parent | prev | next [-]

Nostr https://nostr.com/

DANmode 5 minutes ago | parent [-]

Real question for people who know what they’re talking about:

is perfect forward secrecy no longer considered valuable?

koolala an hour ago | parent | prev | next [-]

Signed JSON reminds me of Nostr. I wish Nostr was somehow more mainstream.

extraduder_ire 44 minutes ago | parent | prev | next [-]

Seems like a missed opportunity to not put a /satellite/satproto.json file on that site.

dharmatech 2 hours ago | parent | prev | next [-]

See also org social:

https://github.com/tanrax/org-social

iamnothere an hour ago | parent [-]

Thanks for this, nice concept. This would be good on a Tor onion service.

superkuh 2 hours ago | parent | prev [-]

satproto's implementation involves complex cryptographic signing and that makes it very not static. One needs to run a program of some sort to use satproto. The only static part is that the json that's operated upon.

This is not true of indieweb's web mention: https://indieweb.org/Webmention

It just uses HTTP POST (like pingback/trackback/etc, except it has a second step verifying the page sending the webmention actually has a link to a URL on the website). You can them them with a browser or cURL or some complex backend script. Receiving them is as easy as logging POSTs to a specific URL endpoint or even using someone else's community backend your site interfaces with via javascript (ie, https://webmention.io/ - not static since it uses JS). Or anything in between.

Totally decentralized and very simple. I implemented a simple nginx POST logging format in the config to receive on my static site. And HTML forms on my static site can send. http://superkuh.com/blog/2019-12-11-3.html

koolala an hour ago | parent | next [-]

I wonder what the signing is for if you already have a domain name to verify your authorship.

Retr0id 21 minutes ago | parent [-]

It doesn't use signing, aside from the signing that exists within TLS

notpushkin 2 minutes ago | parent [-]

I think they mean in s@.

...which doesn’t do signing, but does do E2E encryption? So it’s more like DMs-over-HTTPS.

isodev an hour ago | parent | prev [-]

Webmention is cool indeed. Also one of few techniques that’s currently free of some corp’s greedy roadmap