Creating ccx packages in Windows without UXP Developer Tool

I’ve developed a Photoshop plugin that’s solely for internal use at my company. Everything works fine if I package the plugin with the UXP Developer Tool.

I’d like to be able to automate the creation of the ccx file to tie it into my company’s automated software distribution system. Basically, right now, when I save a specific file in Visual Studio Code several Powershell commands run that do things like update version numbers and then call a small C# program that handles packaging and uploading to the distribution site.

My understanding is that the ccx files are just standard zip files with the extension changed, however I’m having trouble getting this to work.

I’ve zipped the contents of my plugin folder with both the Windows built in zip capability and with 7zip. In both cases the resulting zip has the same file/folder structure as the ccx file from the developer tool, but when I rename the zip to ccx and double click it, Creative Cloud gives me a “Couldn’t install plugin, please try again. Error Code -4” error.

I’m assuming that there is something I’m doing wrong during the zip process, but I’m not familiar enough with the underlying format of zip files to tell if there is some setting or option that I need that I’m not supplying.

The 7zip command I’m using to zip is just: 7z.exe a -tzip “{destination}” “{toZip}” where destination is the directory and filename for the resulting ccx and toZip is the wildcard contents of my plugin’s source folder.

Any tips on fixing this or suggestions for another way to package the plugin via Powershell commands or in C#?


I think I have solved the issue and it doesn’t seem to be related to the zipping process as I first assumed.

It turns out that the packaging process in the UXP Developer Tool modifies the manifest file. In my source manifest file, the host entry is an array of objects containing only the PS app object. In the packaged ccx, host only contains the PS app object, not an array.

After changing my source manifest file to match this, everything else works as expected.

I figured I’d share the fix in case anyone else encounters something similar.

I found the solution from this thread:

1 Like

This is an example how I solved it with webpack config and webpack plugin: alchemist/webpack.config.js at dev3 · jardicc/alchemist · GitHub

And yes… that thing with manifest is as you said.

1 Like