CEP extensions (Common Extensibility Platform) have been around since the start of the Creative Cloud days, but they weren’t, and still aren’t widespread amongst developers and users. Even today, most extensions in my opinion are mostly Photoshop and InDesign related stuff – hardly anything for After Effects. Despite this, there has been a growth in AE devs switching from traditional ScriptUI stuff and moving over to CEP. I am one of these dabblers, and although this isn’t a “Getting Started” post, I will briefly talk about my initial impression and experience developing CEP extensions.

I’d like to mention first that I am no programmer by trade. I took a few programming classes at my university, have a decent background in general programming, and have developed a decent amount of traditional After Effects scripts in the past.

Pain to Even Get Started

Getting started with CEP development is a huge pain. You don’t just open your IDE and start typing away on a blank document like you would traditionally. There’s a file structure you need to follow, which you can grab via official CEP samples, or with a generator (Sublime / Brackets). I opted for the Sublime generator, it works and gives you basic styling. There’s an XML file you have to modify to specify which apps, app versions, and other details your extension supports. You also can’t even run your extensions in your host apps by default, you’ll need to do some registry or terminal commands to enable running unsigned extensions first.

Two Engines

When developing extensions, it’s important to note that there are two engines you’re going to work with. The CEP engine, which handles all the Javascript and UI stuff, and the JSX or ExtendScript engine which handles operations within your CC app (this is the engine traditional scripting developers are used to working in). Working with the individual engines aren’t a problem, but it’s a hassle to pass objects and variables from one engine to another using callback functions and whatnot. The process of sending data back and forth between the two engines is what I found to be very annoying, especially for big objects where you’ll probably need to use JSON and stringify that stuff. To make matters worse, each version of the CC app supports a different version of CEP, so you really need to watch out which CEP version you’re developing for because it’s not backwards compatible.

My biggest issue is my lack of knowledge in web development and how to efficiently connect all the Javascript, HTML, CSS, and libraries together. I had to refresh my HTML and CSS knowledge, and with so many files everywhere, it leaves more opportunity for errors. If you have some background in web development though, CEP development will be extremely familiar so you can just focus on the Adobe specific stuff.

Lack of Clarity

Lastly, the lack of documentation and information is what makes CEP development a little difficult. With strange behaviors and bugs, you don’t know if it’s your mistake or something wrong with the engines. There’s only two or three resources out there that talk about CEP, one being the official GitHub repo with sample extensions. I’ll cover more about these resources and how to get started in another post. If you thought scripting lacked documentation, you’ll find that CEP has a ton less information that makes you question what this particular snippet does, etc. It’s not that the lack of information will be a huge issue per se, but it just makes the idea of CEP a little unclear. You don’t want to try to understand everything there is to know, because a lot of it isn’t documented.

Conclusion

Overall, the experience of developing a CEP extension has been a rough, yet pleasant one. I’ve always wanted to dabble more into web development, and this is a great excuse to do so. Since extensions are pretty much a mini Chrome window inside your host app, this opens up many possibilities for unique UI’s and experiences, and this is all useful knowledge you can apply to web apps as well. If you have web development experience, I think you’ll find the CEP experience more enjoyable than traditional scripting, especially if you’re a UI freak. At the current state, I’d only recommend CEP extension development for more fancy and complex scripts that really require a unique interface. For simple stuff involving buttons and basic inputs, I believe traditional ScriptUI is still the faster and easier way to go. Of course, I will keep you guys posted as I progress in this CEP journey, and will probably do more informative posts about CEP as I go.