Skip to content

Browser extension

The Diazoma extension opens the site you are on as a wall. It uses the same wall and the same adapters as the rest of Diazoma, so a site that already speaks the spec needs nothing from you or from the extension’s author.

Chrome 137 or later, or a recent Edge. Install it from the Chrome Web Store and pin the Diazoma button to the toolbar. The extension is Chromium only for now.

Click the button on a page. The popup names the level it found and what it will do.

LevelMeaningWhat happens
3The site has its own wall (window.__diazoma)“Open the site’s wall” takes you to it. Nothing is added to the page.
2The site publishes a manifest“Open as wall” shows the wall over the page.
0A recipe in a subscribed list covers the site“Open as wall” opens the wall in its own tab.
1The page has a list of pictures and links“Open as wall” reads the page and shows the wall over it.

The order is the one above: a site’s own wall first, then its manifest, then a recipe, then the page itself. A site that publishes policy: "deny" gets no wall, and the popup says “This site opted out”. A site with recipes-only also gets none from the extension, because a list recipe is not the site’s own.

You can switch Diazoma off for one site in the popup. The badge on the button shows the level for sites where the extension is allowed to look (recipe sites you have allowed, or the tab you just clicked on).

The extension subscribes to the core list at diazoma.app. It checks for a new version once a day and when you press “Check for updates” in the options. Each list is signed. The extension checks the signature against public keys that are built into it and ignores a list that fails, keeps the last good copy, and refuses an older revision than the one it has. Recipes marked revoked never run.

In the options you can add another list by address. It must be served over https and signed by a key the extension trusts; unsigned lists are refused.

Install-time permissions:

PermissionWhy
activeTabRead the page you clicked on (manifest link, items) and show the overlay on it. Only after your click.
scriptingStart the extension’s own bundled scripts in that tab. No code is loaded from the internet.
storageSettings, downloaded lists, queued usage counts, on your device.
alarmsThe daily list check and the periodic sending of usage counts.

There is no access to all sites. Hosts are requested one group at a time, from a button, as optional permissions: the API and picture hosts of the core recipes. The extension needs no permission for diazoma.app itself.

A web page cannot use a picture as a WebGL texture unless its host sends cross-origin headers. Some archives (NASA Images, the Cleveland Museum of Art) do not. A recipe says so with media.needsPrivilegedFetch: true. The wall for such a recipe runs on the extension’s own page, and an extension page that has permission for a host can read that host’s pictures. When you open such a wall the extension asks for the host with “Allow access and open as wall”, or shows a bar with “Allow pictures” if a host is missing. The pictures are read in your browser and are not sent to anyone.

Per recipe the extension counts pages loaded, pages with no items and pages with failed pictures, and sends the counts to diazoma.app. They contain no addresses and no identifiers. They help find recipes that stopped working. They are on by default and you can switch them off in the options. See the privacy policy.

The wall page uses the same WebXR entry as the wall on a website. On a desktop with a WebXR headset connected, the wall page can start a headset session where the browser allows it. This has not been tested on a headset for this version.

  • “Diazoma cannot read this page”: browser pages and the store are closed to extensions.
  • Cards that show only a title: the picture could not be loaded. If a bar says pictures are blocked, press “Allow pictures”; otherwise the site refuses to share them.
  • No wall for a site you like: press “Request a recipe” in the popup. It sends the site’s address, nothing else.