AEM Shift — AEM Migration Co-Pilot
Scan, diagnose, and auto-fix AEM codebases for any migration path.
AEM Shift automatically detects AEM projects in your workspace, scans every Java, XML, pom.xml, JSP, and config file against a battle-tested set of migration rules, and shows you exactly what will break — with fix guidance for every issue.
Features
Automatic AEM Detection
Open any AEM project and AEM Shift instantly detects it. No configuration needed — it reads your pom.xml and knows exactly what it's looking at.
Deep Migration Scanning (Free)
- Scans all
.java, pom.xml, .xml, .html, .jsp, .cfg, .config files
- 40+ rules covering every known AEM 6.5 → LTS breaking change
- Results in VS Code Problems panel (red squiggles in your code)
- Full report dashboard with filtering, search, and export to CSV
SP1 & SP2 Aware
Rules are tagged to the exact service pack they apply to. Target SP2 and only see SP2-relevant issues. Target SP1 and see SP1 issues. No noise.
Java Version Aware
Detects your current Java version from pom.xml or the system. Shows extra rules for Java 8 → 17 (JAXB removed, Nashorn removed, JAX-WS removed) vs Java 11 → 17 (SecurityManager, strong encapsulation).
Ask anything about AEM migration directly in the sidebar — no AI subscription needed for AEM knowledge questions:
- "What changed in AEM 6.5 LTS?"
- "How do I fix the Guava error?"
- "What is the PowerMock issue with Java 17?"
AI Auto-Fix (Pro)
One-click fix for every issue, powered by Claude AI. The AI understands AEM deeply — it doesn't just replace imports, it refactors the logic correctly.
Migration Rules Covered
Critical — Breaks Build or Runtime
| Rule |
What breaks |
| Guava Removed |
com.google.common.* throws ClassNotFoundException |
| UberJar Classifier |
Must use apis classifier with version 6.6.0 |
| Social Bundles Removed |
com.adobe.cq.social.cq-social* gone |
| RequestResponseFactory Removed |
Use Sling Request/Response Builders |
| PropertiesUtil Deprecated |
Use OSGi DS annotations instead |
| Commons Collections 3.x |
Migrate to Collections4 |
| Commons Lang 2.x |
Migrate to Lang3 |
| /systemalive Removed |
Replace with /system/health |
| Handlebars Removed |
Migrate to HTL/Sightly |
| We-Retail References |
Remove all /content/we-retail paths |
Test Framework
| Rule |
What breaks |
| PowerMock + Java 17 |
Tests fail with InaccessibleObjectException |
| Mockito Version Conflicts |
Mixed 4.x / 5.x causes failures |
| Surefire Plugin Too Old |
Upgrade to 3.0.0+ |
| JMockit Conflicts |
Upgrade to 1.41+ |
Java 8 → 17 Specific
| Rule |
What breaks |
| JAXB Removed |
ClassNotFoundException for javax.xml.bind.* |
| JAX-WS Removed |
SOAP client code breaks |
| Nashorn Removed |
JavaScript engine gone since Java 15 |
| javax.activation Removed |
DataHandler, MimeType break |
| sun.misc.* Removed |
Internal JDK API access blocked |
SP1 / SP2 Specific
| Rule |
SP |
| S3 Datastore JDK 21 crash |
SP1 fix |
| JSP scripting bundle bug |
SP1 fix |
| Content Fragment REST API deprecated |
SP2 |
| New CF OpenAPI endpoints |
SP2 |
How to Use
- Open your AEM project folder in VS Code
- AEM Shift detects it automatically and shows a popup
- Click Scan now
- Answer two quick questions (Java version + target SP)
- View results in the report panel and Problems panel
Right-click scanning
Right-click any folder in the Explorer → AEM Shift: Scan for LTS Upgrade
Command Palette
Ctrl+Shift+P → search "AEM Shift"
Settings
| Setting |
Default |
Description |
aemshift.showStartupNotification |
true |
Show popup when AEM project detected |
aemshift.migrationPath |
aem65-to-lts |
Active migration path |
aemshift.targetServicePack |
SP2 |
Target LTS service pack (SP1 or SP2) |
aemshift.javaSourceVersion |
unknown |
Current Java version |
aemshift.javaTargetVersion |
21 |
Target Java version after migration |
aemshift.scanOnSave |
false |
Auto-scan on file save |
aemshift.excludePatterns |
target/**, node_modules/** |
Folders to skip |
Pro License
Free tier includes full scanning, report panel, fix guidance text, and CSV export.
Pro unlocks AI-powered auto-fix for every issue.
Enter your key: Ctrl+Shift+P → AEM Shift: Enter License Key
Supported Migration Paths
| Path |
Status |
| AEM 6.5 → AEM 6.5 LTS |
✅ Full rules |
| AEM 6.4 → AEM 6.5 |
Coming soon |
| AEM 6.5 → AEM Cloud |
Coming soon |
| WordPress → AEM |
Coming soon |
Feedback & Issues
Found a false positive? Missing a rule? Open an issue on GitHub.