Announcing UXP Hybrid Plugins in Photoshop v24.2
Create Plugins with UI in UXP and Delegate Heavy Computational Tasks to C++

This article is for developers who are proficient in C++, familiar with UXP plugins, and are interested in writing plugins for Photoshop.
If you aren’t familiar with UXP plugins, please begin here.
What is a UXP Hybrid plugin?
UXP Hybrid plugins add the goodness of C++ code to your UXP plugins. You can create plugins with UI in UXP and delegate heavy-computational tasks, such as processing and manipulating images, to C++.
Build
In order to write a UXP Hybrid plugin, you will need the new UXP SDK. Get started by downloading the SDK from the Developer console.
Once you have downloaded the SDK, follow the instructions explained in the README carefully. Be sure to pay close attention to the instructions to:
- Update your plugin’s manifest.json file.
- Organize your folder structure and keep the binaries in the correct location.
- Follow the correct naming conventions.
Test/Debug using UDT (UXP Developer Tool)
You can test your hybrid plugin in Photoshop, like any regular UXP plugin, using UDT. If you need to become more familiar with UDT, read the instructions here.
For debugging JavaScript code, use the ‘Debug’ option to launch the debug tool in UDT and set breakpoints.
For debugging C++ code, use the methods below.
In Windows (using Visual Studio)
Add breakpoints in the C++ module in your IDE and attach the `photoshop.exe` process through the debug menu as shown in the screenshot below.
In macOS (using Xcode):
The debugging steps are similar to Windows but because of code-signing restrictions, you must perform additional steps before attaching the Photoshop process. Follow the instructions here.
Once you’ve followed the code-signing instructions, add breakpoints in the C++ module in your IDE and attach the `photoshop.exe` process through debug menu as shown in the screenshot below.
Load the plugin through UDT, and you will be able to see your breakpoints work.
Distribute in Adobe Marketplace
The support for UXP hybrid plugins in Adobe’s Marketplace will be available via the new distribution platform. Please look out for the announcement. Sign up for our Creative Cloud developer newsletter here.
Important note: Plugin users will be required to enter admin credentials to install hybrid UXP plugins.
If you decide to list your plugin on the Exchange Marketplace, please note the following requirements:
- The maximum bundle size allowed for Marketplace submission is currently 50 MB.
- Your plugin must support Mac M1, Mac Intel, and Windows Intel architectures. Partial architectures are not allowed for now. (Windows ARM is not supported at the time of this writing.)
- macOS mandates signing and notarizing your executables with a valid certificate. Self-signed/test certificates will not be allowed. To find more details read these two pages of Apple’s developer documentation.
— Ensure that the certificate you use is valid for at least one year.
— You only need to sign and notarize the executables — no need to sign the entire plugin bundle.

A Hello World Example
Once you have compiled the above C++ code, you are required to rename the extension of the executable to `uxpaddon`. Please make sure to read all the instructions in the SDK README. Now you can call the function from JavaScript like below:`
FAQs
How is the UXP SDK different from the Photoshop C++ SDK?
The two SDKs serve different purposes. The new UXP SDK lets you write any generic C++ code alongside JavaScript. The PS C++ SDK helps you extend Photoshop capabilities such as filters, the color-picker, etc.
We have seen a few examples where the PS C++ plug-in uses UXP for UI. However, there are some challenges with that approach:
- Such plug-ins demand a custom installer that installs two separate plugins on the user’s machine (one for UXP and the other for the C++ plug-in).
- Communication between the two plugins is only possible in strings.
The hybrid plugin you build using the new UXP SDK will let you bundle C++ code and JavaScript in the same plugin package and provide you with more efficient options to communicate between the two worlds.
However, for extending Photoshop capabilities, further enhancements to UXP Hybrid Plugins are in the works.
Are UXP hybrid plugins compiled or uncompiled?
Only the source code written in C++ needs to be compiled into an executable. Your plugin bundle must include the executable.
The portion of the code written in JavaScript does not need to be compiled as JavaScript is an interpreted language.
Do I need an Apple Developer ID (cost in $USD) to sign/notarize hybrid plugins?
Yes. macOS only recognizes Developer ID-signed certificates (signed with your Apple Developer ID). Find the details here.
How can I prepare the binaries?
You need to prepare binaries for all three architectures: Mac M1, Mac Intel, and Windows Intel.
For the OS that is not available to you natively, you can use a virtual machine, such as VMware Fusion, to compile and test your plugin.
For creating binaries that work for both — Mac Intel and M1 architectures, refer to this for some tips.
Are they plug-ins or plugins? (Hyphen or no hyphen?)
Since 1992, a plug-in has been broadly understood as a “compiled code library, compatible with a host application’s binary interface, loaded for execution at runtime.”
Since the Flex API, extensions have been “scripting code, NOT compiled but instead loaded and interpreted by a host application.”
Since 2017 we started interchangeably referring to extensions and plug-ins as the same thing, “plugins” with no hyphen.
Find the docs on the Photoshop UXP website here.
Known issue(s)
Loading your plugin via the UXP Developer Tool (UDT) may not show your plugin in Photoshop automatically. You might have to uncheck and check the plugin name from the ‘Plugin’ menu item. The fix for this is expected in a future macOS release.
For questions, discussion, and feedback please join the UXP forums, or follow the #uxp slack channel in the Adobe Devs Slack community (please note that the community is not owned by Adobe).