Edge Delivery Services · 11 of 29
Overview of EDS capabilities: authoring models, dynamic blocks, query API usage, experimentation, multi-site support, metadata handling, performance, and the cases where EDS is stronger than traditional AEM.
This chapter covers:
Before comparing EDS to AEM (next chapter), you need to understand EDS on its own terms. Evaluating a tool against what it was not designed to do leads to unfair conclusions.
EDS was designed for one primary use case: delivering editorial content at web-native performance. It excels at this. Understanding where it excels — and why — is the foundation for making good architecture decisions.
EDS supports two fundamentally different authoring experiences. They are not interchangeable — each has a different use case and capability set.
Document Authoring uses da.live as the authoring environment. Authors write content in a document-like editor (similar to Google Docs or Word) and the EDS framework converts that document structure into web-ready HTML.
Best for:
How content is structured: Tables in the document define blocks. Plain text, headings, and images become "default content." The document structure IS the page structure.
Content is stored in: da.live cloud storage (Adobe-managed), backed by AEM Assets
Universal Editor provides an in-browser visual editor. Authors see the page exactly as it will appear and click on components to edit their properties in a properties panel.
Best for:
Content is stored in: AEM Cloud author instance (JCR), same as traditional AEM content
The critical difference: DA content lives in da.live and goes through the EDS content pipeline. UE/xwalk content lives in AEM JCR and is served through the bin/franklin.delivery servlet.
Both DA and UE support rich text:
What rich text does NOT support in EDS:
Images:
<picture> elements with multiple <source> at different breakpoints are generated automaticallyVideo:
<video> support via a block that wraps a DAM-stored video filePage-level metadata (title, description, OG tags, canonical URL, hreflang) is authored in a Metadata block at the bottom of each page:
| Metadata |
|---------------------|
| Title | My Page Title |
| Description | Page description... |
| Image | /media/og-image.jpg |
| Template | article |
This metadata is read by scripts.js and placed in <meta> tags in the page <head>.
Template metadata is particularly powerful — it allows different page types to load different CSS or block combinations without any server-side routing logic.
In traditional AEM, a listing component (news archive, blog index, product list) uses a Sling Model or servlet to run a JCR query and return results. This is server-side computation.
EDS has no server-side computation. Instead, it uses the Query API — a pre-built JSON index of all pages in the site with their metadata.
/{path}/query-index.json// blocks/news-list/news-list.js
export default async function decorate(block) {
const response = await fetch('/news/query-index.json');
const data = await response.json();
const articles = data.data
.filter((article) => article.template === 'article')
.sort((a, b) => new Date(b.date) - new Date(a.date))
.slice(0, 10);
block.innerHTML = '';
articles.forEach((article) => {
const card = document.createElement('article');
card.innerHTML = `
<a href="${article.path}">
<h3>${article.title}</h3>
<p>${article.description}</p>
<time>${article.date}</time>
</a>
`;
block.append(card);
});
}
The fields that appear in query-index.json are configured in helix-query.yaml:
version: 1
indices:
articles:
include:
- /news/**
exclude:
- /news/index
target: /news/query-index.json
properties:
title:
select: head > meta[property="og:title"]
value: attribute(el, 'content')
date:
select: head > meta[name="publication-date"]
value: attribute(el, 'content')
author:
select: head > meta[name="author"]
value: attribute(el, 'content')
Capabilities of the Query API:
Limitations:
EDS has a built-in experimentation framework provided as a plugin. This is one area where EDS is more capable out of the box than traditional AEM.
The experimentation plugin provides:
/page-a against /page-bConfiguration is done in page metadata — no backend required:
| Metadata |
|---------------------------|
| Experiment | hero-test-01 |
| Instant Experiment | true |
And in a separate experiment configuration page:
| Experiment Config |
|--------------------------------------|
| Experiment | hero-test-01 |
| Variant | control |
| Split | 50 |
| | |
| Variant | challenger |
| Split | 50 |
| URL | /home-challenger |
The plugin intercepts page loads and serves the appropriate variant based on the configured split.
This is client-side experimentation — no server-side component. This means:
For more sophisticated personalization (real-time audience data, AI-driven recommendations), EDS integrates with Adobe Target:
// scripts/delayed.js
import('../plugins/target/target.js');
The Target plugin runs in the delayed phase to not impact LCP.
EDS has a lightweight multi-site model that differs significantly from AEM's MSM (Multi-Site Manager).
Multi-locale is handled by folder structure:
/en/ ← English
/fr/ ← French
/de/ ← German
/es/ ← Spanish
Each locale folder contains its own content pages. There is no inheritance or live copy relationship between them.
Locale-specific metadata: Each page declares its language in metadata:
| Metadata |
|---------------------------------|
| Locale | fr |
| hreflang | /en/page, /de/page |
The hreflang metadata is converted to <link rel="alternate"> tags automatically.
Multiple brand sites can share a single GitHub repository using a path-based structure:
/brand-a/
/brand-b/
/shared/ ← Shared blocks and components
Brand-specific CSS themes can be loaded based on the template metadata:
// scripts/scripts.js (modified)
const template = getMetadata('template');
if (template) {
loadCSS(`/themes/${template}/theme.css`);
}
This is less powerful than AEM's overlay system but works for many multi-brand scenarios.
EDS does not have a built-in cross-repository dependency system equivalent to AEM's dependency management. For shared components or themes across repositories, the options are:
None of these are as elegant as AEM's overlay system or Maven dependency management. This is a genuine limitation.
EDS's defining claim is a guaranteed 100 LHS (Lighthouse Score) or equivalent Core Web Vitals performance.
This guarantee is structural — it is built into how the framework works:
| Technique | Effect |
|---|---|
| LCP block prioritization | LCP image/text renders before any other JS/CSS runs |
| No render-blocking resources | JS and CSS load after first paint |
| Edge-side delivery | Pages served from CDN edge nodes, not origin servers |
| Automatic WebP | Smaller image payloads |
| Responsive images | Right-sized images for each viewport |
| Lazy loading | Images below fold load after LCP |
| Minimal JS payload | No framework JS (no React, no Angular) |
| No server-side rendering latency | Static HTML from edge cache |
The guarantee breaks when:
head.html (render-blocking)<img src="external-url">)The 100 LHS guarantee is real, but it is the developer's responsibility not to break it.
| Capability | EDS Advantage |
|---|---|
| Time to first page | Authoring a new page takes minutes. No template creation, no component policy configuration. |
| Performance | Structural 100 LHS guarantee. Traditional AEM requires significant optimization effort to reach the same scores. |
| Authoring simplicity | DA authoring requires zero CMS training. Authors already know how to use a document editor. |
| Deployment speed | git push is deployment. No Cloud Manager pipeline required for code changes. |
| Experimentation | Built-in A/B testing without Adobe Target licensing. |
| Developer experience | Hot reload, no build step, changes visible in seconds. |
| Cost | Lower infrastructure cost for read-heavy sites (edge CDN, no persistent publish tier). |
| Scalability | CDN edge delivery scales horizontally with zero configuration. |
da.live) for editorial simplicity, UE (xwalk) for visual precisionIn the next chapter, we cover the comparison that matters most for experienced AEM developers: EDS vs AEM Feature Comparison.
We will cover every major AEM capability — Sling Models, editable templates, parsys, multifield, workflow, inheritance, ClientLibs, OSGi — and map each one to its EDS equivalent, workaround, or honest acknowledgment that there is no equivalent.
Get an email when I publish the next chapter. No spam — just new technical deep-dives.
Comments
Share feedback or questions about this blog post.
No comments yet. Be the first to share your thoughts.