Build Your First Plugin

Scaffold, load, and run a plugin inside your host application, reloading live as you edit: the same loop you'll use for every plugin after this. Examples use Photoshop, but the workflow is identical across every UXP-enabled host.

Prerequisites

Before you start, make sure you have:

1. Scaffold your plugin

UDT can scaffold a ready-to-run plugin from a starter template instead of you starting from a blank folder. Open UDT and click Create Plugin.

The UXP Developer Tool Developer Workspace, showing connected apps and the Create Plugin button

Clicking Create Plugin opens a dialog where you fill in the plugin's details. Find the column for the host you're building for and use the sample values below; they're safe to enter as-is for this first plugin. The values are nearly identical across hosts: only the Host Application and Template rows differ.

Field
Premiere
Media Encoder
Photoshop
InDesign
Name
My first UXP Plugin
My first UXP Plugin
My first UXP Plugin
My first UXP Plugin
Plugin ID
Leave it as is
Leave it as is
Leave it as is
Leave it as is
Host Application
Adobe Premiere Pro
Adobe Media Encoder
Adobe Photoshop
Adobe InDesign
Host Application Version
Leave as detected (keep the app open)
Leave as detected (keep the app open)
Leave as detected (keep the app open)
Leave as detected (keep the app open)
Template
pr-quick-starter
ame-quick-starter
quick-layers-starter
quick-starter

Select a host to see how its values appear in the UXP Developer Tool.

data-orientation=horizontal
data-slots=heading, content
data-repeat=4

Premiere

The Create Plugin dialog configured for Premiere with the Premiere quick starter template selected

Media Encoder

The Create Plugin dialog configured for Media Encoder with the ame-quick-starter template selected

Photoshop

The Create Plugin dialog configured for Photoshop with the quick-layers-starter template selected

InDesign

The Create Plugin dialog configured for InDesign with the quick starter template selected

The table uses a host-specific starter, but the Template dropdown also lists general-purpose ones that work with any host. Pick whichever matches what you want to build:

Click Select Folder and choose where to save the plugin. UDT creates a folder named after the Plugin ID, holding everything the plugin needs to run:

2. Load it into your host application

Start your host application and confirm UDT can see it. It'll show up in the left pane.

In UDT, click Load & Watch in your plugin's row. This loads the plugin into the host and watches for source changes, reloading automatically. Keep the app open, and the panel appears in whichever host you loaded into.

The scaffolded plugin panel loaded inside the host application

The panel appears in the host after UDT loads it. The process is the same for Photoshop, Premiere, InDesign, and Media Encoder: keep the app open, click Load & Watch, and the panel shows up in that app.

data-slots=text
If you've closed the panel, reopen it from your host application's Plugins or Window menu.

3. Edit the plugin's UI

With the panel running, open index.html in your code editor. The quick-layers starter renders a Layers heading; change its text:

<sp-heading>Photoshop Layers</sp-heading>

Save the file. Load & Watch reloads the plugin automatically, and the panel heading changes from Layers to Photoshop Layers:

The starter panel before and after the edit, with the heading changing from Layers to Photoshop Layers

data-slots=heading, text
data-variant=warning

Manifest changes

Manifest changes don't hot-reload, so if you change manifest.json, you must manually unload and reload the plugin. In UDT, click Unload, then Load & Watch again.

4. Explore what your plugin can do

The starter is small but complete: a panel with a control that calls into the host. Click the button in its panel to see it run, then open index.js (or main.js) to see how the code reads from the host and updates the panel.

That same pattern covers real work, whichever host you target. Your plugin talks to two API surfaces: the shared UXP APIs for the file system, network, storage, and more, and the host's own API for its documents, selections, and content. Check your host's reference under Host Apps in the top navigation to see what it exposes.

Next steps

You've got the loop: scaffold, load, edit, reload. Everything else you build follows the same pattern.