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 ( |
| Delivered: shipped in |
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 |
JSON-LD validity and the Google Rich Results Test | Delivered: the JSON-LD parses, resolves every |
Works for any number of sites | Delivered: onboarding a site is config only ( |
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 |
|
|
Served by |
|
|
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) |
|
|
|
JSON-LD | yes (Organization and WebSite) | yes (FAQPage, Organization with logo and WebSite on |
Nav rendered at the edge | yes ( | yes ( |
Block hooks rendered at the edge | yes | yes |
| 404 | 200 (generated from the query index) |
Markdown twin ( | 200, | 200, |
|
|
|
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.