Skip to content

Validation and compat levels

LevelThe site doesThe site gets
0nothingwhatever a recipe or a heuristic could read
1marks up its existing listing with data-wall-* attributesan exact wall that survives redesigns, with no recipe
2serves a JSON feed, and optionally a manifestcursor paging, search, filters, image variants, actions, brand
3embeds the wall itselfits own route, its own analytics, and no injection by extensions

A site can offer several levels. A program uses the highest one it finds.

A program checks in this order and stops at the first match:

  1. window.__diazoma is present: Level 3. A checker that does not run scripts looks for a <script> with a data-manifest attribute or a src ending in wall.iife.js.
  2. <link rel="wall-manifest"> in the page, or a manifest at /.well-known/wall.json: Level 2. The well-known path is checked even when there is no <link>.
  3. <link rel="wall-feed"> without a manifest: Level 2 without a manifest.
  4. [data-wall-item] in the page: Level 1.
  5. A recipe for the origin: Level 0.
  6. Heuristics: Level 0.
diazoma-spec validate https://example.com
diazoma-spec validate https://example.com --json

The validator (the @diazoma/spec package) does this:

  • detects the level in the order above;
  • validates the manifest and one page of each non-search feed against the schemas;
  • requests one image from each media.hosts host with an Origin header, and requires Access-Control-Allow-Origin to be * or that origin;
  • checks that brand.accent has a contrast of at least 4.5:1 against white;
  • prints policy;
  • prints the ladder with pass or fail per level and per check.

The exit code is 0 when the highest detected level passes, 1 when it fails or nothing is detected, and 2 on bad usage.

The schemas are served at their $id URLs, so any JSON Schema 2020-12 validator can use them:

For recipes there is also diazoma-recipe run. See Recipes.