For AEM people
AEM → Sanity
Every AEM concept, its Sanity (and Strapi) equivalent, how Sanity provides it, and where to see it in this demo. Editable in the Studio.
- Native
- 22
- Equivalent
- 21
- Partial
- 7
- Gap
- 1
Tried in Sanity
- Tested
- 43
- Built
- 6
- Try in Studio
- 0
- Not on our plan
- 2
Content modelling
Content modelling| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Content Fragment Models / Content FragmentsStructured, channel-neutral content defined by a model | Document types (schema as code) and documents | NativeBuilt in | Collection types | Tested15 document types; 161 documents pass `sanity documents validate`; website tests render them |
|---|
| Experience FragmentsReusable groups of components shared across pages and channels | "Reusable section" documents referenced from any page; edit once, update everywhere | EquivalentCustom | Components / dynamic zones (copied, not shared) or relations | TestedOne shared CTA rendered on 4 pages (Playwright) |
|---|
| Component dialogs (cq:dialog)Author form for a component, defined in XML | Fields, groups, fieldsets and conditional fields in TypeScript | NativeBuilt in | Content-Type Builder fields | TestedEditor flow fills grouped fields, reference picker, PT editor, select, date; publish blocked until valid (Playwright) |
|---|
| Page propertiesMetadata tabs on a page (title, SEO, thumbnail…) | Field groups (e.g. SEO tab) on the page document | NativeBuilt in | Fields on the type | TestedSEO tab with custom snippet-preview input + page template choice (Playwright) |
|---|
| Tags / taxonomy (cq:tags)Central tag namespaces | Taxonomy as documents and references; tag fields; media tags for assets | EquivalentBuilt in | Relations to a tag type | TestedMedia browser shows tagged assets; article tags rendered (Playwright) |
|---|
| Validation (component/field constraints)Required fields, patterns in dialogs | Validation rules with custom async logic (e.g. max 3 featured, slug unique per language) | NativeBuilt in | Basic field validation | TestedValidation rules + template policy caught by `sanity documents validate` (docs/tries/08) |
|---|
Authoring experience
Authoring experience| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Page Editor / Universal EditorWYSIWYG editing on the rendered page | Presentation tool: click-to-edit on your own frontend with live draft preview | EquivalentBuilt in | Live Preview (Growth) | TestedPresentation: overlays over every editable element, live draft preview (public site unchanged), navigation follows (Playwright) |
|---|
| Templates and editable templatesPage structure + initial content defined by template authors | Initial value templates: "Landing page" and "Campaign page" (EN/IT) prefill sections | EquivalentBuilt in | None (manual) | TestedCampaign page created from the template; landing/campaign templates in + New |
|---|
| Template policies (allowed components)Which components are allowed in a container | Array member types + validation rules per template (e.g. campaign pages: max one hero) | EquivalentBuilt in | Dynamic zone allowed components | TestedPolicy violation reported by validation (docs/tries/08) |
|---|
| Components (apps/…/components)HTL + Sling Model + dialog per component | Schema object (content) + React component (rendering) in the frontend | EquivalentBuilt in | Components + frontend code | Tested14 page-builder blocks rendered; 18 pages pass axe WCAG 2.2 AA |
|---|
| Rich Text EditorHTML-based RTE with plugins | Portable Text: structured rich text with custom blocks (code, tables, callouts, video) | NativeBuilt in | Blocks editor | TestedArticle with callout, table, code (Playwright) |
|---|
| Real-time collaborationPage locking; one author at a time | Native co-editing with presence | NativeBuilt in | Not native | TestedTwo browser sessions co-edit one document live, no locking (Playwright) |
|---|
| Annotations / Inbox tasksComments and tasks on pages | Comments and Tasks | NativeHigher plan | None | TestedTask and field comment created in the Studio UI, stored in production-comments (Playwright) |
|---|
Assets (DAM)
Assets (DAM)| AEM | Sanity | Fit | Strapi | Tried |
|---|
| AEM Assets (DAM)Enterprise DAM: folders, metadata schemas, renditions, workflows | Image and file assets (PDF fact sheet on the CMS service) + Media plugin (tags, search, metadata); Media Library on Enterprise | PartialPlugin | Media Library | TestedPDF file asset downloadable from CDN; images + media tags (Playwright) |
|---|
| Renditions / Dynamic MediaPre-generated or dynamic image renditions | Image pipeline: crop, resize, format, blur, hotspot on the fly by URL | NativeBuilt in | Formats generated on upload | Tested6 on-the-fly renditions checked (Playwright) |
|---|
| Asset metadata extractionXMP/EXIF, colour, dimensions | Automatic metadata: dimensions, palette, LQIP, EXIF (opt-in) | NativeBuilt in | Basic metadata | TestedDimensions, palette, LQIP shown on /image-pipeline (Playwright) |
|---|
| Video (Dynamic Media)Video encoding and streaming | Media Library video (Enterprise) or Mux / YouTube embeds | PartialHigher plan | Upload or providers | BuiltVideo embed block (YouTube/Vimeo); Media Library video is Enterprise |
|---|
Sites & languages
Sites & languages| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Sites console / multiple sitesSeveral sites in one instance | Datasets or a site field + Studio workspaces | EquivalentBuilt in | Separate instances or custom field | TestedProduction and Staging workspaces on two datasets (Playwright) |
|---|
| Language copiesA page tree per language | Document-level localisation (one document per language, linked) | NativePlugin | i18n (built in) | TestedEN/IT documents linked; switcher follows translated slugs (Playwright) |
|---|
| Live copies / MSM rolloutInherit and roll out changes from a blueprint | A Function rolls shared fields (image, services, dates) from EN to IT on publish | PartialCustom | None | TestedRollout Function e2e: IT copy updated in ~5 s, IT text untouched |
|---|
| Translation integration frameworkConnectors to translation vendors | AI Assist translate, Agent Actions Translate, Function automation; vendor connectors via API | EquivalentBuilt in | Strapi AI localisation (Growth) | TestedTranslate Function e2e: IT draft in ~6–12 s; AI Assist configured |
|---|
Publishing & workflow
Publishing & workflow| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Activate / deactivate (replication)Push content author → publish tier | Publish / unpublish; the same API serves drafts and published | NativeBuilt in | Draft & Publish | TestedPublish via API → page updates without reload (Live API test) |
|---|
| Page versioning / timelineVersions, restore, compare | History: every change tracked, compare and restore (3/90/365 days by plan) | NativeBuilt in | Content History (Growth, 14 days) | TestedAccidental edit restored from history by point in time (docs/tries/04) |
|---|
| LaunchesPrepare a future version of many pages | Content Releases: create, add versions, publish together. Worked on our Growth trial; pricing lists it as Enterprise | NativeHigher plan | Releases (Growth) | TestedRelease created, version added, published (docs/tries/03, staging) |
|---|
| Scheduled activationPublish at a date/time | Scheduled drafts / scheduled releases (published automatically at the set time) | NativeHigher plan | Releases scheduling | TestedScheduled release published automatically at the set time (docs/tries/09) |
|---|
| Workflows (Granite)Approval and processing workflows | Contributor role (write, no publish) + Tasks; Workflows in beta; Functions for automation | PartialHigher plan | Review Workflows (Enterprise) | BuiltFunctions automation + Contributor role; Workflows beta not used |
|---|
Search & SEO
Search & SEO| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Search with Oak indexesLucene/property indexes you define and maintain | GROQ match + score, indexed automatically; semantic search via dataset embeddings (4/4 questions answered, keyword search: 0) | EquivalentBuilt in | Filters; external search engine | TestedKeyword search (Playwright) + semantic search on staging (docs/tries/07) |
|---|
| Sitemap / SEOSitemap generator, SEO properties | SEO fields with live snippet preview; sitemap.xml and robots.txt generated from content | EquivalentCustom | Plugins | Testedsitemap.xml (40+ URLs) and robots.txt (Playwright) |
|---|
| Vanity URLs / redirect managerRedirects maintained by authors | Redirect documents enforced by the website | EquivalentCustom | Plugin | Tested307 and 308 redirects from Studio documents (Playwright) |
|---|
Development
Development| AEM | Sanity | Fit | Strapi | Tried |
|---|
| ui.apps / apps componentsComponents, HTL, Sling Models | Schema types in git + React components in the frontend | EquivalentBuilt in | API code + frontend | BuiltschemaTypes/ + React components; built in CI |
|---|
| ui.frontend / clientlibsFrontend build and client library categories | Any frontend framework (here Next.js + Tailwind) | NativeBuilt in | Any frontend | TestedNext.js build (66 pages) in the local CI run |
|---|
| Custom Sling servletsServer endpoints bound to paths/resource types | Frontend route handlers + Sanity Functions (event-driven serverless) | EquivalentBuilt in | Custom controllers/routes | Tested/api/revalidate (signed), /api/switch-language, Functions |
|---|
| Custom authoring UI (Granite/Coral)Custom consoles, dialogs widgets | Studio is React: custom tools, inputs, actions, dashboards; App SDK for full apps | NativeBuilt in | Admin panel plugins | TestedDemo guide tool, SEO preview input, "Open on website" action (Playwright) |
|---|
| OSGi bundles / installed packagesJava bundles and content packages | npm plugins in the Studio (package.json); Sanity Exchange | EquivalentBuilt in | npm plugins / Marketplace | BuiltStudio plugins in package.json (media, assist, table, code, colour, dashboard) |
|---|
| GraphQL / headless deliveryGraphQL for Content Fragments, persisted queries | GROQ (typed with TypeGen) and a deployable GraphQL API | NativeBuilt in | REST + GraphQL | TestedGraphQL API deployed; query test (Playwright) |
|---|
Configuration & environments
Configuration & environments| AEM | Sanity | Fit | Strapi | Tried |
|---|
| OSGi configurations (run modes)Service configs per environment | sanity.config.ts + environment variables (SANITY_STUDIO_*); Functions env | EquivalentBuilt in | config/*.ts + env | TestedSANITY_STUDIO_ENABLE_VISION=false build for self-hosting; env-driven preview origin |
|---|
| Environments (dev / stage / prod)Cloud Manager environments | Datasets per environment + Studio workspaces; hot swap with aliases on Enterprise | EquivalentBuilt in | Separate deployments | Testedstaging dataset + workspace; migration run on staging only |
|---|
| Environment variables and secretsCloud Manager variables and secrets | API tokens with roles, CORS origins, Functions env vars; app secrets in your host | EquivalentBuilt in | Env vars | TestedFunction runtime variables read from env (docs/tries/06); tokens with roles |
|---|
| Cloud Manager pipelinesBuild, test and deploy pipelines | Any CI: schema deploy, Studio deploy, Blueprints deploy; example GitHub Actions workflow | EquivalentCustom | Any CI | TestedPipeline steps pass locally in 160 s, 48 tests (docs/tries/11); GitHub runner not used |
|---|
Delivery & performance
Delivery & performance| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Dispatcher (cache + security filters)Apache module caching and filtering publish | Global API CDN + frontend caching (ISR/Live API); security via tokens, CORS, CSP | EquivalentBuilt in | Your CDN/proxy | Testednginx + CSP served locally: 0 CSP errors |
|---|
| Publish tier / CDNPublish instances behind CDN | No publish servers: Content Lake + CDN serve content globally | NativeBuilt in | Your servers | TestedContent served from Sanity API CDN; no publish servers |
|---|
| Edge Delivery ServicesDocument-based authoring with edge rendering | No direct equivalent; frontend of choice on any edge host | GapNot available | None | Not on our planNo equivalent |
|---|
Operations & tooling
Operations & tooling| AEM | Sanity | Fit | Strapi | Tried |
|---|
| CRXDE LiteBrowse and edit the JCR | Vision (GROQ), document Inspect (raw JSON), CLI "documents get/query" | EquivalentBuilt in | Database client | TestedContent inspected and queried via CLI/API throughout (Vision in the Studio) |
|---|
| Package ManagerExport/import content packages | Dataset export/import (NDJSON + assets), migration scripts in code; cloud copy is Enterprise (refused on our plan) | NativeBuilt in | Transfer / export tools | TestedExport 173 docs → import into staging; cloud copy refused on plan (docs/tries/10) |
|---|
| Adobe Admin/Developer ConsoleProducts, users, API credentials | sanity.io/manage: members, roles, tokens, CORS, datasets, webhooks, usage | NativeBuilt in | Admin settings | TestedCORS, tokens, datasets, members managed via CLI |
|---|
| Upgrades / service packsPlanned upgrades (6.5) or continuous (AEMaaCS) | Content Lake is managed; Studio auto-updates | NativeBuilt in | Your upgrades | BuiltStudio auto-updates enabled (Studio v6.16) |
|---|
| Guides / onboardingIn-product guides | Custom "Demo guide" Studio tool; Sanity Learn | EquivalentCustom | Docs | Tested"Demo guide" Studio tool renders all steps (Playwright) |
|---|
Security & governance
Security & governance| AEM | Sanity | Fit | Strapi | Tried |
|---|
| Users and groupsUsers, groups, IMS | Project members with roles; no groups below Enterprise | PartialBuilt in | Users + roles | TestedMembers listed with roles (docs/tries/01a); groups need Enterprise |
|---|
| Permissions / ACLsFine-grained ACLs per path | Roles per plan; custom roles and GROQ-filtered content resources on Enterprise | PartialHigher plan | RBAC custom roles (all tiers) | TestedViewer/anonymous writes → 403, Editor → 200 (docs/tries/02); custom roles Enterprise |
|---|
| SSO (Adobe IMS / SAML)Enterprise identity | SAML SSO | NativeHigher plan | SSO add-on / Enterprise | Not on our planEnterprise only (pricing) |
|---|
| Audit logWho changed what | Document history for everyone; full audit trail on Enterprise | PartialHigher plan | Audit logs (Enterprise) | BuiltDocument history tested; full audit trail Enterprise only |
|---|