About appbuilder-workfront
appbuilder-workfront is a skill for developing Workfront UI extensions with an App Builder front end and cloud Runtime actions. It covers project setup, extension points, testing, deployment, and publishing, with API calls routed through the back end.
Key features
- 01Build a React/Spectrum front end
- 02Handle back-end logic with Runtime actions
- 03Integrate Workfront extension points
- 04Test locally and deploy the app
- 05Manage authentication and API calls
Use cases
- 01Create a Workfront Main Menu extension
- 02Embed a UI in an object panel or custom form
- 03Test and deploy a Workfront UI extension
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ adobe/ skills --skill appbuilder-workfrontAfter installing, type/appbuilder-workfrontin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
evals/evals.jsonreferences/commands.mdtroubleshooting.mdworkfront-actions/assets/action-boilerplate.jsworkfront-actions/evals/evals.jsonworkfront-actions/references/integrations.mdworkfront-local-testing/evals/evals.jsonworkfront-ui-extension/assets/ExtensionRegistration.example.jsworkfront-ui-extension/evals/evals.jsonDetails
From the project READMEWorkfront UI extensions on App Builder
A customized Workfront UI, built as an App Builder app. It has two halves:
- a front end — the screens the user sees. Built with React/Spectrum (Adobe's UI toolkit); in App Builder terms it's the SPA ("single-page app"). →
workfront-ui-extension - a back end — small functions that run in Adobe's cloud (Runtime actions; "serverless" = you write the function, Adobe runs it, no server to manage). They hold the credentials and call the Workfront / Planning / Adobe APIs. →
workfront-actions
The front end plugs into Workfront at fixed spots called extension points: a Main Menu button, an item in an object's left panel, or a widget embedded inside a custom form.
End-to-end flow → which skill
| Step | What you do | Skill |
|---|---|---|
| 0–1. Set up + create project | Node 20, install @adobe/aio-cli, aio login, pick IMS org, stage vs prod, create the project (Developer Console or aio console project create) | appbuilder-project-init |
| 2. Scaffold | aio app init with template @adobe/workfront-ui-ext-tpl; pick extension points | appbuilder-project-init + this skill's references/commands.md |
| 3. Build front end | Extension points (Main Menu, secondaryNav, widgets), routing, shared context, actionWebInvoke | workfront-ui-extension |
| 4. Build back end | Action anatomy, config, auth, inputs; call Workfront (Public API v21) / Planning / services | workfront-actions |
| 5. Run + test in Workfront | aio app dev, then extensionOverride (local build) or Extension Manager / BYO (deployed app, no publish) | workfront-local-testing |
| 6. Deploy | aio app deploy | references/commands.md |
| 7. Publish (org-wide) | Submit for approval from the Production workspace; make sure Production has every API/service your actions need. Not required for BYO/override testing. | — (see below) |
Publishing makes the app available to everyone in the IMS org without an
extensionOverride. Deploy from the Production workspace (aio app deploy), then submit for approval in the Developer Console / App Builder distribution UI (guide:https://developer.adobe.com/uix/docs/guides/publication/). To use a deployed app in one org without approval, register its URL in Workfront's Extension Manager (Bring Your Own extension) instead — seeworkfront-local-testing. After deploy, the app's direct link is the Experience Cloud shell URL…/workfront/custom-applications/<extensionId>/<menuRoute>(not the bare CDN) — build and hand it over perworkfront-local-testing.
Hit a wall? A symptom → cause → fix table of the real gotchas (Node/
aioerrors, the Main Menuidtrap,401 Org Id undefined, BYO testing, and more) is inreferences/troubleshooting.md. The fullaiocommand catalog is inreferences/commands.md.
Plain-language glossary
| Term | In plain words |
|---|---|
| SPA / front end | The app screens the user sees inside Workfront. |
| Runtime action / "serverless" | A small function in Adobe's cloud that does the real work (fetching/saving data) and keeps credentials off the user's browser. |
| Extension point | A spot where your app appears in Workfront: the Main Menu, an object's left panel, or a custom-form widget. |
| Shared context | Info Workfront hands the app automatically — who's signed in, which object they're on, the instance URL. |
actionWebInvoke | How the front end calls a back-end action. |
| IMS org | Your Adobe organization (identity / login). |
| Developer Console / workspace | Adobe's web admin where the project and its Production / Stage environments live. |
| Layout template | The Workfront admin setting that decides where an app actually shows up for users. |
Invariants for the whole family
- Auth comes from
sharedContext(imsToken, hostname) — Workfront hands the app the signed-in user and instance, so never build a custom login. - The browser never calls Workfront/Adobe APIs directly — always through a Runtime action via
actionWebInvoke, so login tokens stay on the server. (The IMS org id is already insharedContextatauth.imsOrgID— no WF call needed.) - Actions are CommonJS (
exports.main; not ESM); secrets/inputs flow.env→ actioninputs→params, and are never read fromprocess.envat runtime. - Node 20. The default environment is prod (live); targeting stage (test) needs
AIO_CLI_ENV=stageplus a re-login. - Workfront Public API is v21.0; custom
DE:fields need{field}_Mod=notblankon search/count.