Proof

What is proven, and what is not.

We would rather tell you the status than oversell it. Two sites run on one loom function today. There are no SEO or AI-visibility numbers yet.

Snapshot

The numbers, as they stand.

  • 181

    tests

    engine, kit hooks, parity

  • 2

    sites, one function

    live on 2026-11-13

  • ≈0.3 s

    loom cache-miss TTFB

    measured 0.28 to 0.38 s. Plain EDS: about 0.09 s

  • —

    SEO and AI uplift

    not measured yet

Claims

Claim by claim, with status.

Claim

Status

Engine, kit hooks and browser-versus-edge parity tests

Delivered: 181 tests

A CDN hit is as fast as plain EDS

Delivered: stated in the README

CDN miss TTFB about 0.28 to 0.38 s, against about 0.09 s for plain EDS

Delivered: measured on the PoC site

Works for one site

Delivered: proven on the PoC site

Works for more than one site

Delivered: proven live on 2026-11-13 with two sites on one function (loom@0.18.0)

/llms.txt and the Markdown twin (/<page>.md)

Delivered: shipped in loom@0.16.0 and loom@0.18.0, with 0.18.0 deployed. The twin was checked live on loom-site on 2026-11-13 (/index.md, /how-it-works.md: 200, text/markdown). No before and after numbers on how AI assistants use them

Raw HTML a non-JS crawler receives, with and without loom (5 pages, 2026-11-13)

Delivered: measured. Header and footer links 0 → 14 per page, and every page gains JSON-LD and <html lang> (none before). Visible text grows 5 to 16 percent. This is a mechanism check on one site, not a ranking or citation result

JSON-LD validity and the Google Rich Results Test

Delivered: the JSON-LD parses, resolves every @id and matches the visible text on all 5 pages, and renders identically for Googlebot Smartphone. In the Rich Results Test the content page /gaps passes. The home page detected no items at all on 2026-11-13: its types (FAQPage, Organization, WebSite) are not rich-result types the test lists, and Google retired FAQ rich results in 2026. An Organization logo was added afterwards, and the test has not been re-run since

Works for any number of sites

Delivered: onboarding a site is config only (sites.yaml plus CDN rules), proven live on two sites

SEO and AI visibility uplift

Possible: no numbers yet. A baseline and an after measurement are planned

Multi-site proof · 2026-11-13

Two sites, two repos, one function.

The second site was onboarded with config only: an entry in sites.yaml plus its CDN rules. Both sites were re-checked live on 2026-11-13 and both serve loom@0.18.0.

Check

edge-poc.wefixyourproject.com

loom.wefixyourproject.com

EDS repo (from sites.yaml)

internal-aem-danone-poc

internal-adobe-edge-loom-site

Served by

x-edge-function: loom@0.18.0

x-edge-function: loom@0.18.0

Content returned

Danone page: “Nourishing the World, One Life at a Time”

loom page: “loom: full-fidelity pages for Edge Delivery Services” (an unmodified boilerplate page when the proof was first run)

<html lang> set at the edge

en

en

JSON-LD @graph in first response

yes (Organization and WebSite)

yes (FAQPage, Organization with logo and WebSite on /; TechArticle on content pages)

Nav rendered at the edge

yes (data-edge="1")

yes (data-edge="1")

Block hooks rendered at the edge

yes

yes

/llms.txt

404

200 (generated from the query index)

Markdown twin (/index.md)

200, text/markdown

200, text/markdown

?branch=main

no-store, noindex, nofollow

no-store, noindex, nofollow

What this shows.

Same function, different site

The same version answers both hosts and each returns content from its own repo, with no cross-over.

The CDN decides the site, not the client

A request with forged x-loom-org and x-loom-repo headers for the other site still returned the correct page, byte for byte identical to the normal response.

Onboarding is configuration

Adding a site is a sites.yaml entry and CDN config, plus the site’s own hooks in its own repo. No function code changed and no redeploy was needed.

Know before you start

Things to know up front.

Site mapping depends on the CDN config

Without the CDN’s site headers loom answers 421, so the function version and the CDN config must be rolled out in a compatible order.

A deploy changes every site at once

Roll back by deploying the previous commit under a new version.

Hook limits

Only relative .js files under /blocks and /scripts, no dynamic import(). A block that imports aem.js cannot run at the edge.

HTML from loom is cached for 60 s

A DA publish did not purge function-wrapped HTML in our tests, which is why the TTL is short.

The Markdown twin converts the origin HTML

Content that only an edge block hook generates, and the nav and footer, are not in it. It is one more render per uncached request, and the response reuses the origin’s cache headers.

The bundler is copied between sites by hand

After a loom release, and a site’s CI checks its own bundle, not the bundler’s version.

Limits of the multi-site proof

The first proof run used loom-site as an unmodified boilerplate, so it only exercised the engine defaults. Since then it has gained its own nav and block hooks, /llms.txt and the Markdown twin, and the table above shows its current state. It is still two sites, not many, and we did not load test. The fail-closed 421 for an unknown host is covered by tests and the design, but was not reproduced live in the first run.

Be the answer, not just a page.

Content unchanged. Authors unchanged. Crawlers and AI assistants finally read all of it.

Read the proof

Back to the overview