AEMaaCS vs AEM 6.5
Most of this site applies to both AEM as a Cloud Service (AEMaaCS) and AEM 6.5, because they share the same core stack - JCR (Oak), Sling, OSGi, HTL, Sling Models, Core Components. But a handful of operational and architectural differences genuinely change how you build, deploy, and debug. This page consolidates them so you do not have to rediscover them chapter by chapter.
If you deploy through Cloud Manager and there is no crx-quickstart folder you control, you are on
AEMaaCS. If you run a JAR / installed instance you administer yourself (on-prem or AMS), you are on
6.5. AEM 6.5 also has an LTS track with extended support.
At a glance
| Topic | AEM as a Cloud Service | AEM 6.5 |
|---|---|---|
| Hosting | Adobe-managed, auto-scaling containers | Self-managed (on-prem) or AMS |
| Topology | Author cluster + horizontally-scaled publish + CDN | Fixed author/publish instances you size |
| Releases | Continuous (Adobe updates the runtime) | Versioned service packs you install |
| Repository | Split into immutable (/apps, /libs) and mutable (/content, /conf, /home) | Single mutable repository |
| Deployment | Git + Cloud Manager pipelines only | Package Manager, Maven -PautoInstall, CI of your choice |
| Dev environment | Local SDK + RDE; no prod filesystem | Full local install; filesystem access |
| Replication | Sling Content Distribution (managed) | Replication agents (/etc/replication) |
| Asset processing | Asset Compute microservices | DAM Update Asset workflow |
| Java | Adobe-managed JDK (Java 11/17/21 class support) | You choose the JDK |
| CRXDE Lite | Local SDK only; blocked in cloud envs | Available everywhere |
| Custom OSGi config | Git-deployed .cfg.json; secrets via $[secret:...] | Web console or .cfg.json |
| Dispatcher | Flexible mode, validated in pipeline | Classic config, manually managed |
Repository mutability (the big one)
On AEMaaCS the repository is split:
- Immutable -
/appsand/libsare read-only at runtime and replaced only by a deployment. You cannot write to them from running code, and you cannot overlay/libs. - Mutable -
/content,/conf,/home,/varare writable at runtime.
Consequences for your code:
- No runtime writes to
/apps. Patterns that wrote nodes under/appsat startup must move to/confor/var. - No
/libsoverlays. Customize viasling:resourceSuperType, render conditions, and supported extension points instead of overlaying/libs. repoinitis the supported way to create service users, paths, and ACLs deterministically on every startup (see Security & Permissions).
On 6.5 the repository is a single mutable tree, so these restrictions do not apply - which is exactly why migrated code often breaks on AEMaaCS.
Deployment & development workflow
| AEMaaCS | AEM 6.5 | |
|---|---|---|
| Code path to prod | Git -> Cloud Manager pipeline (build, code quality, deploy) | Build package, install via Package Manager / Maven |
| Fast iteration | RDE (Rapid Development Environment) - push code in seconds | Local instance + mvn -PautoInstallSinglePackage |
| Config & secrets | .cfg.json in Git; $[env:VAR] / $[secret:VAR] placeholders | Web console or .cfg.json |
| Quality gate | Mandatory code-quality + security + (optional) UI tests in pipeline | Whatever your CI enforces |
See Deployment & Cloud Manager and the Cloud Manager documentation.
Publishing: replication vs content distribution
- AEM 6.5 uses replication agents under
/etc/replication(Agent on author, Dispatcher Flush) that you configure and monitor. - AEMaaCS uses Sling Content Distribution through Adobe-managed infrastructure - there are no replication agents to configure, and CDN/Dispatcher invalidation is automatic.
The authoring actions (Activate/Deactivate) and the Replicator API are the same on both. See
Publishing & Replication and the AEMaaCS
Replication operations reference.
Asset processing
- AEMaaCS: Asset Compute microservices generate renditions (fast, cloud-native, modern formats like WebP/AVIF), configured via Processing Profiles. See Asset microservices.
- AEM 6.5: the DAM Update Asset workflow (ImageMagick/Sling) generates renditions on the instance.
See Assets & DAM.
Search & indexing
Both use Oak indexes under /oak:index, deployed as content. The difference is the deployment
contract:
- AEMaaCS requires the
<indexName>-custom-<N>naming convention so the pipeline can merge custom indexes with out-of-the-box ones with zero downtime. - 6.5 lets you deploy/modify indexes directly and trigger reindexing yourself.
See Search & Indexing.
Dispatcher
- AEMaaCS: Dispatcher config lives in your repo in flexible mode, is validated by the pipeline, and the CDN sits in front. See Dispatcher in the Cloud.
- 6.5: you manage the Apache + Dispatcher module configuration on your own web tier.
See Dispatcher & Caching.
Security & access
- AEMaaCS: author login is via Adobe IMS / Admin Console (you do not manage author passwords in
AEM); in-repository authorization (ACLs, groups) is still defined as usual, ideally via
repoinit. CRXDE Lite and/system/consoleare not available in cloud environments. - 6.5: you manage users/passwords in AEM (or via LDAP/SAML), with full console access.
What stays the same
If you are learning AEM, the overwhelming majority of skills transfer between both platforms:
- JCR / Sling / OSGi fundamentals
- Components: HTL, Touch UI dialogs, Sling Models, Core Components
- Editable templates and policies
- Content Fragments and the GraphQL API
- Multi-Site Manager, translation, and i18n
- The
Replicator,QueryBuilder,WorkflowSession, and DAMAssetAPIs
The differences are concentrated in operations and deployment, not in day-to-day component code.
See also
- AEM as a Cloud Service - the cloud platform in depth
- Deployment & Cloud Manager
- Publishing & Replication
- Search & Indexing
- AEM as a Cloud Service Overview (Experience League)
- Migrating from AEM 6.x - Content Transfer Tool and Cloud Manager onboarding