Adobe's shift from Common Extensibility Platform (CEP) to Unified Extensibility Platform (UXP) is the most significant change to plugin development in a decade. If you're maintaining a CEP-based extension, here's what you need to know — and why rushing to migrate might be a mistake.
Why Adobe Is Killing CEP
CEP was built on Chromium Embedded Framework — essentially, each panel ran as a full Chrome browser instance. This architectural choice had consequences:
- Memory bloat: A single panel could consume 200-500 MB RAM
- Slow startup: Loading HTML/CSS/JS through Chromium added 2-3 seconds per panel
- Security risks: Full Node.js access meant malicious plugins could wreak havoc
For creative apps already pushing hardware limits (looking at you, After Effects), this was unsustainable. Enter UXP.
UXP: Faster, Lighter, More Restrictive
UXP replaces Chromium with a native JavaScript engine. The benefits are immediate:
- ~70% reduction in memory usage
- Instant panel loading
- Consistent UI (Adobe Spectrum Design)
But there's a catch: UXP is far more restrictive. Features that were trivial in CEP now require workarounds or are impossible.
What You Lose in UXP
- Arbitrary file system access: Users must manually grant folder permissions
- External libraries: No npm modules that rely on Node.js internals
- Advanced networking: WebSocket support is limited
- DOM manipulation freedom: Must use Adobe's Spectrum components
When to Migrate vs. When to Wait
Migrate to UXP If:
- Your plugin is UI-focused (color pickers, asset browsers)
- Performance complaints are common (users report lag)
- You target Photoshop or XD (UXP-native apps)
Stick with CEP (For Now) If:
- You need deep file system integration (media asset management)
- Your plugin relies on specific Node.js modules
- You're targeting Premiere Pro's export pipeline
The Hybrid Approach (Our Recommendation)
The smartest strategy for complex plugins: UXP for UI, C++ for backend.
Here's how it works:
- Build your panel UI in UXP (fast, lightweight)
- Write performance-critical logic in C++ as a native plugin
- Communicate between them via Adobe's scripting bridge
This gives you UXP's performance benefits while bypassing its limitations. Kreative Core's Vision plugin uses this exact architecture.
File System Access: The Biggest Pain Point
In CEP, you could read/write anywhere:
In UXP, users must grant explicit permission:
This adds friction but improves security. Power users appreciate the control.
UI Changes: Spectrum or Bust
CEP let you use any CSS framework (Bootstrap, Tailwind, custom). UXP enforces Adobe Spectrum:
Pro: Your plugin looks native.
Con: Less design freedom.
For SaaS-like plugins (where brand identity matters), this can be limiting. But for utility tools, Spectrum is perfect.
Migration Timeline: Plan for 6-12 Months
Here's a realistic migration path:
- Month 1-2: Audit current codebase. Identify UXP blockers.
- Month 3-4: Build prototype UI in UXP. Test performance gains.
- Month 5-6: Migrate core logic. Write C++ modules if needed.
- Month 7-10: Beta testing with power users. Fix edge cases.
- Month 11-12: Public release. Maintain CEP version for legacy users.
Our Experience: Kreative Core Vision
When building Vision, we initially tried pure UXP. We hit walls immediately:
- Needed GPU access for ONNX inference (impossible in UXP)
- Required deep frame export control (CEP-only API)
- Wanted background processing (UXP panels pause when hidden)
Solution: UXP panel + Node.js backend running as a separate process. Best of both worlds.
Key Takeaways
- UXP is the future, but CEP isn't dead yet
- Hybrid (UXP + C++) is the best architecture for complex plugins
- Migrating blindly can break critical features — audit first
- Users care about performance and reliability, not platform buzzwords
Kreative