This project is a React-based Adobe CEP panel extension framework for building panels that talk to ExtendScript host code. It is based on my ExtendScript library, but this version uses React.js for the panel UI and Node-based tooling for the build process.
If you want the non-React version, or prefer a simpler ExtendScript-focused setup, see the original library:
https://github.com/demarcj/extendscript_library
This framework targets Adobe CEP panel development with:
- A React frontend rendered into the CEP panel
- TypeScript source for both the panel and host script
- ExtendScript output for Adobe host applications
- A small utility library under
ts/library/extendscript - esbuild-based bundling for the panel and host script
The current manifest is configured for Adobe After Effects by default, but the extension can be adapted to other CEP-compatible Adobe applications by editing CSXS/manifest.xml.
- React.js panel UI
- TypeScript for panel and host-side source files
- ExtendScript host script output in
jsx/hostscript.jsx - Adobe
CSInterfaceintegration for panel-to-host communication - Theme support through
js/themeManager.js - Separate build steps for the panel bundle and host script bundle
-
Clone or copy this folder into your CEP extensions directory.
Windows:
C:\Users\[YourUsername]\AppData\Roaming\Adobe\CEP\extensions\macOS:
~/Library/Application Support/Adobe/CEP/extensions/ -
Enable CEP debug mode so unsigned extensions can load.
Windows:
C:\Users\[YourUsername]\AppData\Roaming\Adobe\CEP\macOS:
~/Library/Application Support/Adobe/CEP/Add or edit a file so it contains:
PlayerDebugMode=1 -
Make sure the extension folder name matches the bundle ID used by the manifest.
-
Restart the Adobe host application.
- Node.js
- npm
- A CEP-compatible Adobe application
npm install
npm run buildThe project currently exposes these scripts:
npm run buildbuilds both the ExtendScript host file and the React panel bundlenpm run build_hostbuilds onlyjsx/hostscript.jsxnpm run build_mainbuilds onlyjs/main.js
build_hostscript.js bundles ts/hostscript.ts to jsx/hostscript.jsx.
build_main.js bundles tsx/app.tsx to js/main.js.
com.react.framework.panel/
|-- CSXS/
| `-- manifest.xml
|-- css/
| |-- boilerplate.css
| |-- styles.css
| `-- topcoat-desktop-dark.min.css
|-- icons/
|-- js/
| |-- libs/
| | `-- CSInterface.js
| |-- main.js
| |-- main.js.map
| `-- themeManager.js
|-- jsx/
| `-- hostscript.jsx
|-- ts/
| |-- hostscript.ts
| `-- library/
| |-- cep_panel/
| `-- extendscript/
|-- tsx/
| |-- app.tsx
| `-- main.tsx
|-- build.js
|-- build_hostscript.js
|-- build_main.js
|-- index.html
|-- package.json
`-- README.md
The panel UI is built with React, not jQuery.
index.htmlprovides the CEP panel shell and the#rootmount nodetsx/app.tsxcreates the React root and initializes the paneltsx/main.tsxcontains the main React componentjs/libs/CSInterface.jsprovides the Adobe CEP API bridge
The current panel uses CSInterface directly from React code:
const cs = new CSInterface();
cs.evalScript("sayHello()");ts/hostscript.ts contains the host-side ExtendScript source. It is bundled into:
jsx/hostscript.jsx
That file is what the Adobe host application executes through CEP.
- Update the React UI in
tsx/main.tsx. - Initialize app-level behavior in
tsx/app.tsx. - Add or change ExtendScript functions in
ts/hostscript.ts. - Call those functions from the panel with
cs.evalScript(...). - Run
npm run build.
Edit CSXS/manifest.xml to change the host applications supported by the extension. The current setup is aimed at After Effects, but CEP hosts like Photoshop, Illustrator, InDesign, and Premiere Pro can be enabled by adjusting the manifest entries.
- React
- React DOM
- TypeScript
- esbuild
- Babel
- Adobe CSInterface
- Topcoat CSS
- This repository is the React-based companion to the original ExtendScript library
- The original non-React library is here: https://github.com/demarcj/extendscript_library
js/libs/jquery-2.0.2.min.jsmay still exist in older builds or legacy files, but the current panel architecture does not use jQuery- Panel size, icons, and host targeting are configured in
CSXS/manifest.xml
- If the extension does not appear, confirm debug mode is enabled and the folder is in the CEP extensions directory
- If the panel loads but React does not render, check the CEP dev tools console for script errors
- If
evalScriptcalls fail, verify the host app target inCSXS/manifest.xmland confirmjsx/hostscript.jsxwas rebuilt
ISC