Teaching the
Web new Tricks
After adding ATProto support, I started to look at nice applications of the protocol. I was especially interested in the capability to store arbitrary data in your data store, with a mix of structured data by default (json records) and opaque blobs. That looks very close to what we need to host web sites, and certainly I was not the only one to think about that!
I serendipitously ended up on Robin Berjon's Web Tiles project. From the horse's mouth:
Tiles are composable web docs and apps that can safely be used in arbitrary contexts and assembled from multiple sources to carry out complex user interface tasks. Their composability, security, and privacy properties make them ideal for use in social media, chat, agents, and malleable software.
Technically, a Web Tile manifest is an ATProto record that bundles generic meta-data about the tile (name, description, banner) and the list of resources used by the tile.
Because of limitations on how PDS treat blobs, tile resources are stored as opaque application/octet-stream content, and the real content type is specified in the tile manifest.
Because of the previously mentioned content-type issue with blobs, we can't directly load a tile with an at:// url. Instead, we implemented a tile:// protocol handler with the following characteristics:
Since manifests are JSON, they are pretty-printed in Beaver. This is good, but we can do better!
We added support to detect some ATProto records formats, and implemented custom elements that are capable of displaying them nicely. For now we have components for tile manifests and user profiles.
Here's a screencast showing how we navigate easily from the at:// url of a manifest to a tile itself:
This stuff is very promising. We can mix UI elements to interact with the various data types found in ATProto lexicons, all on client side. We can store web sites and share location independent urls.
Browsers can be read/write again!
We need to build something as good looking as AetherOS but without relying on someone else backend.
The missing step is to find a solution for private, end to end encrypted data. You should certainly not store your address book or navigation history on your ATProto PDS!
Updated Mar 30 2026