Thanks ! It's the densest place in the world for restaurants. We're working on a v2 of place search by category, soon to come.
Google's task is much easier on this one : they only show those who've paid ads at high zoom (well at least, that's what we can guess). We're trying to be exaustive, but it's too much in this case.
The original Jetstream is really cool - it's incredibly easy to start consuming the Bluesky firehose - you don't even need to use a server, you can consume it directly in the browser.
I wonder if it would be a good idea to remake DNS on top of bluesky. The basic idea is that, if you own a domain name, you post DNS updates in a bluesky feed. The firehose itself is authoritative. DNS servers sit downstream of the firehose. All the updates to domain names get written into a database, and they essentially just respond to queries hitting that database. This would let anyone (with enough bandwidth) run a fast domain name server.
We could use this to fix some of DNS's long running problems. Like, we could add upstream cryptographic signatures to DNS records. And put TLS certificates in there too. We might be able to ditch TTL entries. In a DNS server, records should update via server-push from the firehose. You shouldn't have to wait for TTL to expire.
I'd like to see DNS ownership combined with the time range and an owner-unique key so you can go to the website you intended to visit rather than whoever happens to own the domain at the moment.
We’d need a registry of some sort. And a name space. Register a name, associated to a Bluesky account. Then use that Bluesky account to update dns records.
I'm trying to work out how the OP's system would look like and I was wondering the same.
---
There are at least three parts that you'd need to solve:
1. AFAIK there is no single globally canonical Firehose. Different relays aggregate different sets of PDSes, and some might decide not to include your PDS if they don't like your content. The Firehose also isn't really the authority here. It transports signed updates from account repositories.
2. In theory you could make up a new kind of DNS record instead of NS, called PDS, PLC, or something. You'd ask your TLD registry to publish something like `PLC <did>` instead of the NS records for your DNS server.
The value should probably be the account DID (that's the PLC mentioned above), rather than the address of its PDS. The account DID is the stable identity that signs the repository updates. The PDS is just the server currently hosting that account's repository, and its address can change.
3. You then have a bootstrap problem. To get from an account DID to its PDS, you resolve the DID document and look for its `#atproto_pds` service entry. But `did:web` resolution uses HTTPS and therefore DNS. `did:plc` uses the PLC directory, but reaching that directory and then reaching the PDS URL also normally requires DNS.
So the DNS replacement would depend on the old DNS system to discover the server containing its DNS records.
---
Then, as an example, Google's DNS resolver at 8.8.8.8 would subscribe to one or more Firehoses, index DNS records from account repositories, and verify that their updates were signed by the DID named in the registry record.
Querying would then be something like: you look at the top-level record for the domain, see that there is no NS entry, find the PDS or DID entry, and look in your local Firehose-derived database for DNS entries signed by that account.
If the records aren't there, you might resolve the DID, find the current PDS, and fetch the repository directly. But that brings you back to the bootstrap problem.
Maybe the registry record would need to include both the DID and some kind of glue-like PDS address. Or perhaps the new system would need an independent way of resolving DIDs and locating PDSes without using DNS. I'm not sure what that would look like, especially once you include PDS migration and key rotation, but I think this is an additional part the proposal would need to solve.
Sort of on a tangent to the actual content of the page, but what documentation system/CMS is this particular web page UI? It seems very fast and relatively uncluttered for the menu on the left side, content pane, top horizontal menu bar.
No sure I agree on fast. At least on mobile the sidebar has an show/hide slide animation that takes a sizeable fraction of a second. In fact is one of the slowest animations for this I have seen.
I disable animations entirely on devices I use where possible. They just waste time and that adds up if you use something regularly.
I haven't looked at it on mobile, that's unfortunate to hear. I don't see any animation when interacting with it on a desktop browser, snapping open a left side header menu item to see sub-items seems instant.
Yeah, I see what you mean now, I am looking at it on mobile and that animated slider to show or hide the entire menu seems like it takes unnecessarily long.
If I'm understanding this codebase right, it's a hand-rolled framework based on MDX and Next.js; the UI elements you're referring to were designed from scratch and aren't based on any existing CMS theme.
I'm all for whatever atproto expansion and whatever's going on here, mainly it harks back to early Twitter days (tho also for better or worse, watching them build Bluesky in realtime isn't the best), but when they have outages like last week a good chunk of service unreachable/down for many hours with little update on https://status.bsky.app/ and then whatever history just basically disappears as if nothing ever goes wrong, it's not a good vibe.
Despite all the openness and github repos and what not it's very difficult to get straight answers or just like find a place where issues or changes to the platform are addressed easily.
I've built my own client for Twitter. I'm using a library that a random guy maintains. It has its problems, but all of them can be worked around, and overall it feels solid, especially considering the fact that it's done by a single person.
Then I had to add bsky support when everyone and their mother migrared there. I used the atproto Python library and holy smokes, whener I need to touch that part of the code I feel sad.
Right but that doesn’t mean anything about authorisation. If you’re using a key you ripped from an official app you could easily be blocked tomorrow. Makes the effort considerably less worthwhile.
It's the #6 most popular website in the world. Chances are, someone will fix the libraries or investigate and write about any changes done to the internal API pretty quickly.
I suppose that while your Twitter thing just touches the surface-level client-facing API, your Bluesky thing touches the internals. You could scrape bsky.app the same way you do for Twitter.
Also the VC-backed funding for this infrastructure will run out eventually. It's not self-sustaining, and Bluesky have no viable route to profitability.
[Bluesky proves that for social media, no matter what your technology stack, capabilities, or mission, if your community is awful, growth will never follow.](https://blueskyfeeds.com/bluesky-user-growth?t=3m)
I use Bluesky regularly and have a fine experience. Yes, there’s an irritating minority of users. But so goes any social network, Twitter especially. At least the owners of Bluesky aren’t espousing Great Replacement Theory…
I also have a fine experience, but only by switching to the For You feed full-time and mostly sticking to my compsci-academic-tech-programming neck of the woods. Minority or not, the users GP mentions are so obnoxious that it affects the 'vibe' of the platform as a whole. Look up any "Top Posts" tracker/feed/whatever. No matter that I even (mostly) resonate with the underlying political leanings, I find the tone pretty dreadful.
Of course, the same applies to whatever remains of Twitter now.
Yeah, it's nothing against the platform itself, it just happened to get a population boost from dissatisfied people. It seems so many of them are just miserable and there to create a feedback loop of negativity.
> Of course, the same applies to whatever remains of Twitter now.
I think that’s the key of it for me. Usually this criticism of Bluesky users is part of a justification to stay on Twitter. When the exact same problem exists on there, just with a different type of user.
Great. My map application* has a place review system that was built on Atproto, we don't hold user's reviews, they're public, reusable by others.
In case of data loss, replaying the jetstream was not possible. This v2 with history is perfect.
* https://cartes.app
Chrome Windows, zoomed in on paris, france. Click the restaurant filter for search. The tab froze, tried multiple times. :3
Thanks ! It's the densest place in the world for restaurants. We're working on a v2 of place search by category, soon to come.
Google's task is much easier on this one : they only show those who've paid ads at high zoom (well at least, that's what we can guess). We're trying to be exaustive, but it's too much in this case.
The original Jetstream is really cool - it's incredibly easy to start consuming the Bluesky firehose - you don't even need to use a server, you can consume it directly in the browser.
I updated my browser demo to use the new Jetstream just now - hit "connect" and scroll down the page to see the events flowing past: https://tools.simonwillison.net/bluesky-firehose
New jetstream is fully compatible with old jetstream btw! We just added a bunch of new stuff as well
This is new jetstream:
wss://jetstream.us-east.bsky.network/subscribe
I wonder if it would be a good idea to remake DNS on top of bluesky. The basic idea is that, if you own a domain name, you post DNS updates in a bluesky feed. The firehose itself is authoritative. DNS servers sit downstream of the firehose. All the updates to domain names get written into a database, and they essentially just respond to queries hitting that database. This would let anyone (with enough bandwidth) run a fast domain name server.
We could use this to fix some of DNS's long running problems. Like, we could add upstream cryptographic signatures to DNS records. And put TLS certificates in there too. We might be able to ditch TTL entries. In a DNS server, records should update via server-push from the firehose. You shouldn't have to wait for TTL to expire.
I think it'd make a nice little system.
I think you just invented blockchain DNS (e.g. https://handshake.org/) without the byzantine tolerance.
Yes, exactly. Blockchain DNS minus the blockchain is just good DNS.
Blockchain has some solid properties, don't throw the baby out with the bathwater.
What baby? DNS doesn't have the double spend problem. Why is the blockchain good for this?
An authenticated chain similar to the crts for TLS certificates.
The double spend problem for domains is the double domain purchase problem. I claim example.com and you also claim it, who wins?
Whoever buys it first. With a centralised database, this is trivial.
Usernames are the same. Who gets @example.bsky.social ? Whoever registers it first. Problem solved.
If you have a central database why do you need atproto?
I'd like to see DNS ownership combined with the time range and an owner-unique key so you can go to the website you intended to visit rather than whoever happens to own the domain at the moment.
this is not quite what you are asking for but https://marque.at exists
No A, no B. It's not X, it's Y.
How do you prove you own a domain with no records?
We’d need a registry of some sort. And a name space. Register a name, associated to a Bluesky account. Then use that Bluesky account to update dns records.
I'm trying to work out how the OP's system would look like and I was wondering the same.
---
There are at least three parts that you'd need to solve:
1. AFAIK there is no single globally canonical Firehose. Different relays aggregate different sets of PDSes, and some might decide not to include your PDS if they don't like your content. The Firehose also isn't really the authority here. It transports signed updates from account repositories.
2. In theory you could make up a new kind of DNS record instead of NS, called PDS, PLC, or something. You'd ask your TLD registry to publish something like `PLC <did>` instead of the NS records for your DNS server.
The value should probably be the account DID (that's the PLC mentioned above), rather than the address of its PDS. The account DID is the stable identity that signs the repository updates. The PDS is just the server currently hosting that account's repository, and its address can change.
3. You then have a bootstrap problem. To get from an account DID to its PDS, you resolve the DID document and look for its `#atproto_pds` service entry. But `did:web` resolution uses HTTPS and therefore DNS. `did:plc` uses the PLC directory, but reaching that directory and then reaching the PDS URL also normally requires DNS.
So the DNS replacement would depend on the old DNS system to discover the server containing its DNS records.
---
Then, as an example, Google's DNS resolver at 8.8.8.8 would subscribe to one or more Firehoses, index DNS records from account repositories, and verify that their updates were signed by the DID named in the registry record.
Querying would then be something like: you look at the top-level record for the domain, see that there is no NS entry, find the PDS or DID entry, and look in your local Firehose-derived database for DNS entries signed by that account.
If the records aren't there, you might resolve the DID, find the current PDS, and fetch the repository directly. But that brings you back to the bootstrap problem.
Maybe the registry record would need to include both the DID and some kind of glue-like PDS address. Or perhaps the new system would need an independent way of resolving DIDs and locating PDSes without using DNS. I'm not sure what that would look like, especially once you include PDS migration and key rotation, but I think this is an additional part the proposal would need to solve.
/shrug
Sort of on a tangent to the actual content of the page, but what documentation system/CMS is this particular web page UI? It seems very fast and relatively uncluttered for the menu on the left side, content pane, top horizontal menu bar.
No sure I agree on fast. At least on mobile the sidebar has an show/hide slide animation that takes a sizeable fraction of a second. In fact is one of the slowest animations for this I have seen.
I disable animations entirely on devices I use where possible. They just waste time and that adds up if you use something regularly.
I haven't looked at it on mobile, that's unfortunate to hear. I don't see any animation when interacting with it on a desktop browser, snapping open a left side header menu item to see sub-items seems instant.
I meant showing/hiding the side bar itself, not headings in it. Using the triple dash menu button in the top left corner.
Yeah, I see what you mean now, I am looking at it on mobile and that animated slider to show or hide the entire menu seems like it takes unnecessarily long.
Indeed, and any animation at all is too long for UI elements in my opinion.
Gonna go out on a limb here and say css transitions are not what they are talking about.
It should take time for you too appreciate the main text becoming blurry and unreadable and to prepare your brain for the new batch of text
Agreed. Is there an easy way besides the simple OS feature ?
https://github.com/bluesky-social/atproto-website
If I'm understanding this codebase right, it's a hand-rolled framework based on MDX and Next.js; the UI elements you're referring to were designed from scratch and aren't based on any existing CMS theme.
Some of it looks like tailwind css and they have a syntax highlighting addon that shows up in the homepage source as well.
some modified vercel template by the looks of it
Looks like astro starlight
There’s a next-route-announcer tag on the page, so probably not Astro. (Can’t recommend Astro Starlight enough though!)
This protocol would be a great match for UCAN.
Suppose this would be an example of what they meant by 'expands beyond the app'
Related:
Bluesky's active user base is shrinking as its focus expands beyond the app
https://news.ycombinator.com/item?id=49263461
Do you have a database/ui of all of this story graph labeling you've done? Is there a story behind it?
I'm all for whatever atproto expansion and whatever's going on here, mainly it harks back to early Twitter days (tho also for better or worse, watching them build Bluesky in realtime isn't the best), but when they have outages like last week a good chunk of service unreachable/down for many hours with little update on https://status.bsky.app/ and then whatever history just basically disappears as if nothing ever goes wrong, it's not a good vibe.
Despite all the openness and github repos and what not it's very difficult to get straight answers or just like find a place where issues or changes to the platform are addressed easily.
I've built my own client for Twitter. I'm using a library that a random guy maintains. It has its problems, but all of them can be worked around, and overall it feels solid, especially considering the fact that it's done by a single person.
Then I had to add bsky support when everyone and their mother migrared there. I used the atproto Python library and holy smokes, whener I need to touch that part of the code I feel sad.
> I've built my own client for Twitter.
Didn't they terminate free API access? How does your client work?
It still has an internal GraphQL API. How would the official web app and mobile apps work without an API?
Right but that doesn’t mean anything about authorisation. If you’re using a key you ripped from an official app you could easily be blocked tomorrow. Makes the effort considerably less worthwhile.
It's the #6 most popular website in the world. Chances are, someone will fix the libraries or investigate and write about any changes done to the internal API pretty quickly.
Then you rip the key again from the new version of the app. But they won't do that because it would block the app.
As a researcher who spent most of my graduate program trying to scrape twitter to do sentiment analysis. I do not believe you.
I suppose that while your Twitter thing just touches the surface-level client-facing API, your Bluesky thing touches the internals. You could scrape bsky.app the same way you do for Twitter.
Even from the comments, they just don’t have the right base. Such a shame.
Neat protocol, shame about the users.
Also the VC-backed funding for this infrastructure will run out eventually. It's not self-sustaining, and Bluesky have no viable route to profitability.
[Bluesky proves that for social media, no matter what your technology stack, capabilities, or mission, if your community is awful, growth will never follow.](https://blueskyfeeds.com/bluesky-user-growth?t=3m)
Twitter seemed to have no issue growing so that doesn't seem right.
> no matter what your technology stack, capabilities
We haven't had many of the good sets of these to get any proof
> shame about the users
I use Bluesky regularly and have a fine experience. Yes, there’s an irritating minority of users. But so goes any social network, Twitter especially. At least the owners of Bluesky aren’t espousing Great Replacement Theory…
I also have a fine experience, but only by switching to the For You feed full-time and mostly sticking to my compsci-academic-tech-programming neck of the woods. Minority or not, the users GP mentions are so obnoxious that it affects the 'vibe' of the platform as a whole. Look up any "Top Posts" tracker/feed/whatever. No matter that I even (mostly) resonate with the underlying political leanings, I find the tone pretty dreadful.
Of course, the same applies to whatever remains of Twitter now.
Yeah, it's nothing against the platform itself, it just happened to get a population boost from dissatisfied people. It seems so many of them are just miserable and there to create a feedback loop of negativity.
> Of course, the same applies to whatever remains of Twitter now.
I think that’s the key of it for me. Usually this criticism of Bluesky users is part of a justification to stay on Twitter. When the exact same problem exists on there, just with a different type of user.