Two years ago I committed to learning UXP seriously. Adobe had been pushing it as the future of Creative Cloud extensibility since 2021, ExtendScript was officially deprecated, and I wanted to be building on a platform that would still work in five years.
Here's what I actually found.
What UXP does better
The JavaScript runtime is modern. You get actual ES2020 features — async/await, destructuring, template literals, proper Promises. After years of writing ExtendScript in ES3, this alone was worth the migration pain.
The UI framework is real HTML and CSS. Your panels look like actual user interfaces instead of the ScriptUI grid layout that's been frozen in time since InDesign CS3.
The networking APIs work. Making HTTP requests from an ExtendScript was a custom-socket-connection nightmare. In UXP it's just the standard Fetch API.
What UXP does worse, or just differently
The DOM API is different. If you have years of ExtendScript muscle memory — app.activeDocument.pages.item(0).textFrames, all of it — you have to relearn the equivalent UXP calls. The InDesign DOM is largely the same, but the access patterns change.
The debugging story is immature. The UXP Developer Tool is improving but I still spend more time console-logging than I'd like. ExtendScript Toolkit was clunky but it worked.
Performance: for tight loops over large documents, ExtendScript is still faster in my testing. UXP adds overhead that matters when you're iterating over 10,000 objects.
The version compatibility problem
This is the real constraint for consultants. UXP requires InDesign 2021 (v16.0) or later. Not every client has updated.
I have two clients still on CC 2019 because they can't upgrade until they replace hardware that can't run newer versions. Any tool I build for them has to be ExtendScript.
My actual recommendation
If you're building tools exclusively for your own use, or for clients you know are on recent versions: learn UXP. The modern JavaScript environment is significantly better to work in, and it's where Adobe is investing.
If you're building tools to sell or distribute broadly: support both. UXP for users on 2021+, ExtendScript for everyone else. It's extra work but the install base matters.
If you're inheriting or maintaining existing scripts: stay in ExtendScript. Migrating working code to UXP to get modern syntax is rarely worth it unless you're doing a complete rewrite anyway.
The hard truth about timeline
Adobe has been saying "ExtendScript is deprecated" since 2021. It's still fully functional in 2026. I don't think it's going away in the next two years — the transition has been slower than Adobe originally communicated. Plan for the long tail.