The Code Playground documentation has been updated with details about the new Script Mode and Local Persistence features, as well as additional details around existing features. The updates include:
link() method added to the AddOnUISdk.app.document reference and Document Metadata How-to Guide. This method retrieves the document link and triggers a documentLinkAvailable event when the link is available.fromRGB() method reference in the Using Color How-to.hasUnavailableFonts() method is added to TextContentModel class, which returns true if the text contains any fonts unavailable to the current user.IMPORTANT: The hasUnavailableFonts() is currently experimental only and should not be used in any add-ons you will be distributing until it has been declared stable. To use this method, you will first need to set the experimentalApis flag to true in the requirements section of the manifest.json.
The CLI has been updated with the following package versions:
@adobe/ccweb-add-on-manifest: 3.0.0@adobe/create-ccweb-add-on: 3.0.0@adobe/ccweb-add-on-scaffolder: 3.0.0@adobe/ccweb-add-on-analytics: 3.0.0@adobe/ccweb-add-on-core: 3.0.0@adobe/ccweb-add-on-scripts: 3.0.0@adobe/ccweb-add-on-ssl: 3.0.0@adobe/ccweb-add-on-sdk-types: 1.14.0IMPORTANT: As a result of the above, please be aware of the following:
node version: 18npm version: 10SSL for hosting add-ons is now managed from the following locations:
/Users/[user]/Library/Application Support/Adobe/CCWebAddOn/devcertC:\Users\Administrator\AppData\Local\Adobe\CCWebAddOn\devcertAfter updating @adobe/ccweb-add-on-scripts to 3.0.0, developers will be asked to re-create their SSL certificate.
For a new add-on created using npx @adobe/create-ccweb-add-on@3.0.0, a new SSL certificate will be set up one-time.
For removing expired SSL certificate or certificate authority, developers can now run: npx @adobe/ccweb-add-on-ssl purge, and re-create them using npx @adobe/ccweb-add-on-ssl setup --hostname localhost
@swc-react components in the templates based on React has been updated to 1.0.3.@spectrum-web-components components in the templates based on SWC has been updated to 1.1.2.The theme usage has been updated to use the system attribute instead of theme, ie:
<sp-theme system="express" color="light" scale="medium"><Theme system="express" scale="medium" color="light">showColorPicker() and hideColorPicker() methods of the addOnUiSdk.app object.@adobe/ccweb-add-on-sdk-types package (v1.14.0) has been released for the CLI. Run npm update from the root of your add-on project to update to get the latest typings.An FAQ item was added for a known issue found where the CLI is failing on Windows when running certain versions of Node.js. The FAQ provides a workaround for this issue.
The following new properties have been added to the AddOnSdk PageMetadata API:
isBlank: Allows you to check if a page is blank.templateDetails: Retrieves details about the template used to create the document.A new runPrintQualityCheck method has been added to the AddOnSdk App.Document API, which allows you to run a print quality check on the document to ensure that it meets print quality standards.
IMPORTANT: The runPrintQualityCheck() is currently experimental only and should not be used in any add-ons you will be distributing until it has been declared stable. To use this method, you will first need to set the experimentalApis flag to true in the requirements section of the manifest.json.
TextContentModel.characterStyleRanges. The experimentalApis flag is no longer required to use these APIs.The Per Element Metadata APIs have been stabilized. You can refer to the AddOnData class for details. The experimentalApis flag is no longer required to use these APIs.
The Selection Change Notification Events APIs have been stabilized. You can refer to the Context class, which provides two methods: on() and off(). These methods allow you to register and un-register notifications for selection changes and selection properties changes. The experimentalApis flag is no longer required to use these APIs.
New Feature: Add-on Icon Auto-Resizing Support
API paragraphStyleRanges
Added new TextContentModel.paragraphStyleRanges,i.e. ParagraphStyles API as experimental, to apply styles to different paragraphs of text content.
Stabilized registerIframe() and openEditorPanel() APIs. The experimentalApis flag is no longer required to utilize these APIs.
addAnimatedImage() API was not working as expected.Stabilized importPdf() and importPresentation() APIs. The experimentalApis flag is no longer required to utilize these APIs.
Viewport class has been added to the Document APIs. Viewport represents the canvas area currently visible on-screen.bringIntoView have been added which adjusts the viewport to make the node’s bounds visible on-screen, assuming all bounds are within the artboard bounds.Are you an existing developer?
You must provide trader details by February 16, 2025, to keep your add-on visible and available in Adobe Express for users in the European Union as of February 17, 2025. This trader information will be displayed publicly on your listing detail pages when viewed from EU countries.
importPdf() and importPresentation() functions to clarify that when used, the associated PDF or presentation file will be imported as a new Adobe Express document.addAnimatedImage() since it is now stable.author property to MediaAttributes to allow it to be used with the addAudio() API.TextNode.fullContent accessor: returns the TextContentModel containing the complete text string and its styles associated to the Text Flow (Threaded Text or Overflow Text).TextNode.nextTextNode accessor: gets the next node that overflowing text will spill into.TextNode.layout accessor: gets and sets the TextType of the text node frame.TextNode.visualEffects accessor: list of VisualEffectType applied to the text node.TextContentModel.characterStyleRanges accessor: list of character style ranges in the text content, controlling the color, font ranges in the text content, controlling the color, fontSize ranges in the text content, controlling the color, letterSpacing ranges in the text content, controlling the color and underline ranges in the text content, controlling the color properties.AddOnData class and the addOnData accessor for the BaseNode class.Context class will expose two on() and off() methods which can be used to register and un-register selection change and selection properties change notifications.GridCellNode class that represents a cell in a grid.IMPORTANT: This round of new APIs is currently experimental only with the exception of TextNode.fullContent.text, and should not be used in any add-ons you will be distributing until it has been declared stable. To use them, you will first need to set the experimentalApis flag to true in the requirements section of the manifest.json.
GridLayoutNode.allChildren does not include rectangle nodes.TextNode.text is now deprecated; it is still working, but will be removed in a future update. Please use TextNode.fullContent.text instead.addAnimatedImage() method which can be used to add animated GIF images to the document (as long as they fit within certain technical constraints).importPdf() method which can be used to import a PDF as a new Adobe Express document.importPresentation() method which can be used to import a Powerpoint as a new Adobe Express document.IMPORTANT: The importPdf() and importPresentation() methods are currently experimental only and should not be used in any add-ons you will be distributing until it has been declared stable. To use this method, you will first need to set the experimentalApis flag to true in the requirements section of the manifest.json.
replaceMedia() method to the MediaContainerNode class that can be used to replace existing media inline.Stroke APIs.format property to the addOnUISdk.app.ui object that reflects the format used to display dates, times, numbers, etc. in the user’s environment. It supports a "formatchange" event triggered when the format changes—see an example in the Locale, Supported Locales, and Format section.mobile and app as supportedDeviceClass values in the Manifest’s requirements.apps object.openEditorPanel() API to programmatically open and interact with the Editor panel. This method of the addOnUISdk.app.ui allows navigation to specific tabs and collections, as well as performing content searches. The Constants page has been updated accordingly.Cross-Origin-Embedder-Policy FAQ.microphone and camera.VisualNode class has been added to the Document APIs, and represents any node that can be visually perceived in the content.currentPage Context accessor: returns the active page.visualRoot accessor: the highest ancestor that still has visual presence in the document—typically, an Artboard.cloneInPlace() method: clones a Page, all artboards within it, and all content within those artboards.boundsInParent; boundsLocal (for both GroupNode and VisualNode); centerPointLocal; topLeftLocal; boundsInNode(); localPointInNode();The CLI has been updated to release version 2.0.0, and includes the following:
swc-javascript and swc-javascript-with-document-sandbox. Typescript templates have been renamed to swc-typescript and swc-typescript-with-document-sandbox. See this page for details on all the available templates.2.0.0.NOTE: The new version should be installed by default when you create a new add-on. If, for any reason, it doesn’t, you can force it to install by clearing the npx cache first with npx clear-npx-cache or by specifying the version in the command, i.e.: npx @adobe/create-ccweb-add-on@2.0.0 my-add-on.
express-add-on-samples repository, including a newly added audio-recording-addon.addImage() method. (Note: there were no changes to the drag-n-drop APIs).MediaAttributes parameter to the addImage() method for Ps/Ai file types to pass media attributes like title.Mp4RenditionOptions object to support mp4 renditions.VideoResolution constant to set video resolution options.registerIframe() method and unregisterIframe type definition with example usage. NOTE: These APIs are currently experimental.getPagesMetadata(), startPremiumUpgradeIfFreeUser and isPremiumUser have been moved to stable and no longer require the experimentalApis flag to be set.New support for monetization details has been added to the public distribution flow and allows you to provide details around monetization options your add-on supports. A selection will now be required when you submit a new add-on to the marketplace or update an existing one. The options include free, one-time payment, recurring subscription, micro-transactions, and other.
In addition, the monetization guidelines were updated with details to help guide you in communicating your monetization strategy, and include new branding badges you can use to visually indicate when content or features require a purchase or when they are paid and unlocked. Please ensure you review the updated monetization guidelines carefully for specific details. NOTE: Adobe does not currently provide a specific monetization feature, but with this update, provides a way for developers to communicate the monetization details of their add-ons.
id accessor has been added to the BaseNode class in the Document APIs and is inherited by all classes that extend it. The id represents a unique identifier that stays the same when the file is closed and reopened, or if the node is moved to a different part of the document.createPath method is now available for allowing you to create a path with the Document APIs.createRenditions API, including a new print option for RenditionIntent to be be used for generating a print optimized pdf, and an update to PdfRenditionOptions which exposes the ability to customize each PDF Page Box’s (MediaBox, BleedBox, CropBox, TrimBox) dimensions using a pageBoxes property.Added a new tutorial - Building UIs using Adobe’s Spectrum Design System.
startPremiumUpgradeIfFreeUser() experimental API has been added to the addOnUISdk.app object to display the in-app monetization upgrade flow and returns a value indicating whether the user upgraded to premium or not.
isPremiumUser() experimental API has been added to the addOnUISdk.app.currentUser object to determine if the current user is a premium or free user.
IMPORTANT: The above new APIs are currently experimental only and should not be used in any add-ons you will be distributing until declared stable. To use these APIs, you will first need to set the experimentalApis flag to true in the requirements section of the manifest.json.
PdfRenditionOptions object is now available to be used with the the createRenditions() export API and allows a user to specify an optional bleed object (for printing).isPrintReady property has been added to the PageMetadata API to indicate if the page is ready to print.application/pdf (as opposed to text/plain from an earlier update).BREAKING NEWS: The Adobe Express Document Sandbox and all associated APIs have been deemed stable, and no longer require the experimentalApis flag. As a result, some breaking changes with these experimental APIs were introduced before deeming them stable, and they are summarized below. Please read them thoroughly and update your in-development add-ons as needed. If you run into any issues, please reach out to us on our Adobe Express Add-on Developer’s Discord channel for help.
Some items in the following list of changes may have been mentioned in recent updates but are being listed in this summary again to serve as a reminder.
makeColorFill and makeStroke respectively.strokes and fills have been renamed to their singular counterpart. (Express does not support multiple strokes or fills). You should use stroke and fill going forward to access them, and they will no longer be ItemList objects, since they represent only a single stroke or fill.
// Before
rectangle.fills.append(rectFill);
ellipse.fills.append(ellipseFill);
// After
rectangle.fill = rectFill;
ellipse.fill = ellipseFill;
fill and stroke.color are just a color object of the form { red, green, blue, alpha }.stroke is an object of the form { color, width, dashPattern, dashOffset }Color utilities have moved to colorUtils instead of utils.
Old
import { utils } from "express-document-sdk";
const color = utils.createColor(1, 0, 0);
</del>
New
import { colorUtils } from "express-document-sdk";
// any of:
const color = colorUtils.fromRGB(1, 0, 0); // optional alpha
const color = colorUtils.fromRGB({ red: 1 , green: 0, blue: 0 };); // optional alpha
const color = colorUtils.fromHex("#ff0000");
const color = { red: 1, green: 0, blue: 0, alpha: 1 }; // mandatory alpha
fromHex returns a color from a Hex string – e.g., colorUtils.fromHex("#FF8040") or colorUtils.fromHex("#FF8040FF") (including the optional alpha);fromRGB returns a color from a set of RGB(A) values (0-1) – e.g., colorUtils.fromRGB(1,0.5,0.25,1).toHex converts a color object to a Hex string – e.g., colorUtils.toHex(aColor).allChildren returns an iterator, not an Array. However if you want to use array methods (ie: Array#map), you can use Array.from to convert it to an array.Strokes and fills will no longer move if you add an existing stroke/fill to another shape (previously the original shape would lose the corresponding stroke or fill). For example:
// Old way
const greenFill = editor.createColorFill(colorUtils.fromRGB(0, 0, 1));
someRect.fills.append(greenFill);
anotherRect.fills.append(greenFill);
/* oops, someRect no longer has a green fill, because anotherRect is its parent */
versus:
// New way
const greenFill = editor.makeColorFill(colorUtils.fromRGB(0, 0, 1));
someRect.fill = greenFill;
anotherRect.fill = greenFill;
/* both rectangles have a green fill */
opacity or locking (e.g, the document root or an artboard).The translateX and translateY properties have been replaced by a single translation object.
// old
rectangle.translateX = 100;
rectangle.translateY = 20;
// new
rectangle.translation = { x: 100, y: 20 }; // both x,y properties are required
BaseNode class has been introduced, and ContainerNode has been moved from a class to an interface.The key to load APIs that use the Document APIs has changed, as well as the module names you import APIs from in the Document Sandbox. The old ones will still work, but the CLI and templates have all been updated to use the new names. Please update your add-ons to use the new ones shown below:
Adobe Express Document APIs SDK import
For access to the Express document and content authoring APIs:
// Old
import { editor } from "express";
</del>
// New
import { editor } from "express-document-sdk";
Document Sandbox SDK import
For access to the document sandbox runtime APIs:
// Old
import AddOnScriptSdk from "AddOnScriptSdk";
</del>
// New
import addOnSandboxSdk from "add-on-sdk-document-sandbox";
The manifest.json entry point for the document sandbox script code reference was renamed from script to documentSandbox, as shown below:
"entryPoints": [
{
"type": "panel",
"id": "panel1",
"main": "index.html",
"documentSandbox": "code.js" // used to be "script": "code.js"
}
]
apiProxy() method in the addOnSandboxSdk.instance.runtime object now accepts "documentSandbox" as a parameter when referring to the entry point in the manifest where your document sandbox code resides, instead of "script".The RuntimeType constant now uses the value of "documentSandbox" in lieu of "script".
IMPORTANT: The above updates should be considered breaking changes, so any add-ons in development that relied on the experimental APIs may not work correctly until you make changes to use the new/updated ones above. The intention was to ensure these important changes were made prior to marking the APIs stable to 1) make them more intuitive for developers, 2) significantly improve the process of working with colors, strokes and fills, and 3) prevent certain operations from corrupting the document.
The CLI has been updated to release version 1.1.1, and includes the following:
experimentalApis flag has been removed. Please review the updated references and changelog entries thoroughly for details on all of the recent changes. You may also want to refer to the document sandbox code samples for additional help on how to use them.javascript templates to enable intellisense features.NOTE: The new version should be installed by default when you create a new add-on. If, for any reason, it doesn’t, you can force it to install by clearing the npx cache first with npx clear-npx-cache or by specifying the version in the command, i.e.: npx @adobe/create-ccweb-add-on@1.1.1 my-add-on. You can update any existing add-ons to use this new version by updating the version of the ccweb-add-on-scripts in the package.json to 1.1.1.
Known Issue: Please note, there is an edge case where removing a page with your add-on could potentially cause a problem where the UI needs to be reloaded. This will be resolved in the very near future, but please take caution and be aware that it would be best to avoid page removal in the short-term until it’s resolved.
getPagesMetadata() method is now available in the Add-on UI SDK document object and includes an example code snippet. NOTE: This method is still considered experimental only and should not be used in any add-ons you will be distributing until it has been declared stable. To use this method, you will first need to set the experimentalApis flag to true in the requirements section of the manifest.json.createRenditions() export API was updated with the following changes:
Range.specificPages constant value.PageMetadata) including useful information such as the id, page size, pixels per inch, and whether the page has premium or temporal (timeline) content or not, (in addition to the existing blob and title). An example is provided in the reference as well as in the use cases.The Document API’s were updated to add a new ColorUtils class, which replaces the previous utils module that was used as a color helper with a more enhanced utlility. If you’ve used the old utils module in your add-ons, it will require you to update them to use the new named import of colorUtils instead of utils. Color creation should now be done using the new colorUtils module. An example of the old way and new way to create a color are shown below for reference:
// Before
import { utils } from "express-document-sdk";
const color = utils.createColor(1, 0, 0);
// After
import { colorUtils } from "express-document-sdk";
// any of:
const color = colorUtils.fromRGB(1, 0, 0); // optional alpha
const color = colorUtils.fromRGB({ red: 1, green: 0, blue: 0 }); // optional alpha
const color = colorUtils.fromHex("#ff0000");
const color = { red: 1, green: 0, blue: 0, alpha: 1 }; // mandatory alpha
The code samples have also been updated, so please also refer to those for further details on how to use it. Please note, the example code snippets and samples using fills or strokes off a node class were also updated to use a singular Fill or Stroke object instead of as an ItemList object.
// Before
rectangle.fills.append(rectFill);
ellipse.fills.append(ellipseFill);
// After
rectangle.fill = rectFill;
ellipse.fill = ellipseFill;
A new release has landed for the In-App Developer Submission experience in Express. Some highlights from the release:
Create Add-on flow: You can now create an add-on “container” as your first step in building add-ons within the existing in-app distribution workflow. Creating the container gets you access to a few important settings and data (for instance your unique subdomain, see below) before you continue the development process in the CLI. All existing add-ons will automatically receive a parent container with the associated additional features today.
Unique Subdomain retrieval: As part of your add-on container, you will now be able to easily retrieve a unique subdomain for your add-on. Simply choose one of your add-ons in the distribution workflow and navigate to the new “Settings” tab and copy the Add-on URL. This URL is handy for addressing issues with CORS by adding the URL as an allowed origin. See our CORS guide for more details.
Delete Add-ons: The “container” concept allowed us to offer better management and cleanup of your add-ons. You will now find the option to delete an add-on container entirely from the new “Settings” tab of a given add-on.
NOTE: You can only delete add-ons that have not been published publicly or submitted to our Review team. Please contact us if you need to un-publish an add-on.
Supported Languages: The version details step for publishing add-ons publicly now includes fields to indicate which languages are supported by your add-ons (beyond the required English). You can choose from any of the languages Express supports, and your designation will be shown to users when they browse your listing details. See our sample for detecting a user’s locale to localize your add-on.
--template parameter is not explicitly supplied.createRenditions method. In the past it would return application/pdf, but currently it returns text/plain. This is something to be aware of if you are inspecting the mime type in the response and failing if it’s anything other than application/pdf.Updates the names of the SDK imports for the Document Sandbox and the Document API’s SDK:
Document Sandbox SDK import
from:
import AddOnScriptSdk from "AddOnScriptSdk";
to:
import addOnSandboxSdk from "add-on-sdk-document-sandbox";
which also requires the following line to change in the example code to use the new reference:
const { runtime } = addOnSandboxSdk.instance; // runtime object provides direct access to the comm methods
Express Document SDK Import (for accessing the Document APIs
from:
import { editor } from "express";
to:
import { editor } from "express-document-sdk";
NOTE: This includes the named imports for utils and constants modules as well if needed (ie: import { editor, utils, constants } from "express-document-sdk").
Updates the manifest.json entry for the document sandbox script code reference from script to documentSandbox, as shown below:
"entryPoints": [
{
"type": "panel",
"id": "panel1",
"main": "index.html",
"documentSandbox": "code.js"
}
]
apiProxy() now accepts "documentSandbox" as a parameter when referring to the entry point in the manifest where your document sandbox code resides, instead of "script".RuntimeType constant can now have a value of "documentSandbox" in lieu of "script".IMPORTANT: The old import names will continue to be supported for a period of time to allow developers to migrate to the new import names, but we encourage you to update as soon as possible to avoid any future issues.
setTimeout(), clearTimeout and setInterval(), clearInterval).The Document API References were updated with the following additions and changes:
New Classes/Interfaces
queueAsyncEdit method added to the Editor class.Value suffix.Updates to Node Classes
The accessors and methods below were removed or replaced with new names in the Node class and classes that extend it. Please refer to the Document API References specifically to learn more about each.
absoluteRotation accessorabsoluteTransform accessorrelativeRotation accessorrelativeTransform accessortranslateX accessortranslateY accessorrotation accessorrotationInScreen accessortransformMatrix accessortranslation accessorsetPositionInParent methodsetRotationInParent methodUpdated Document API references to include:
addOnUISdk import name (vs AddOnSDK) similar to what’s generated in the templates for consistency.New questions and answers added to the FAQ regarding Adobe’s use of add-on data, where to file feature requests and more.
Updates to the OAuth APIs to allow for a new optional windowSize parameter to be specified in the AuthorizationRequest object and the AuthorizeWithOwnRedirectRequest to set the desired size of the authorization window.
Published new Guidelines and requirements section; including General guidelines, Developer brand guidelines, Monetization guidelines and Generative AI guidelines.
New versions of the CLI packages:
"@adobe-ccwebext/ccweb-add-on-manifest": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-core": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-ssl": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-analytics": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-developer-terms": "1.5.0"
"@adobe-ccwebext/create-ccweb-add-on": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-scaffolder": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-scripts": "1.5.0"
"@adobe-ccwebext/ccweb-add-on-sdk-types": "0.3.0"
which include:
Updated templates for both iframe and document sandbox add-ons:
spectrum-web-components with the Express theme pre-set.swc-react setup.javascript-with-editor-apis template has been removed from the initial template selection in this version but replaced with the option from the CLI to include the document sandbox when creating a new add-on.The Editor API references have been updated with additional descriptions and details as well as some new and modified APIs:
name property is now only available on PageNode, not all node types.Node.locked & Context.selectionIncludingNonEditable properties were added for the locking feature that recently shipped in Express.If you’re using the experimental Document Sandbox APIs in any add-ons currently, we encourage you to check the specific methods and objects you’re using in these updated references to discover anything new or changed.
subdomain support and CORS handling.New Types Package Versions Released
0.1.6 of the @adobe-ccwebext/ccweb-add-on-sdk-types package with the latest typings for the AddOnSDK (iframe), including new experimental APIs, as well as general improvements and bug fixes.0.2.0 of the @adobe-ccwebext/ccweb-add-on-sdk-types package with the latest typings for the document sandbox/Editor APIs.IMPORTANT:
Developers who are NOT using the document sandbox/Editor APIs should update to their types package to 0.1.6 at minimum by changing the version of it to @adobe-ccwebext/ccweb-add-on-sdk-types@0.1.6 in the package.json.
The new types 0.2.0 types package will be used automatically for any new add-ons created. If you would like to update an existing add-on to the 0.2.0 version, you will need to update the ccweb-add-on-sdk-typings.d.ts file in your add-on with the content here.
SharedArrayBuffer.The Communication API in the document sandbox reference section was updated to change the example code importing the SDK to a default import rather than a named import as it was previously:
from:
import { AddOnSdkApi } from "AddOnSdkApi";
to:
import AddOnScriptSdk from "AddOnScriptSdk";
Note that you can now name the imported module whatever you’d like, but for simplicity in the examples, the name is kept the same. Since these APIs are currently experimental, this change will not impact any in-production add-ons, however, it will require you to update any existing usage of these APIs in progress.
</del>
javascript-with-editor-apis template reflecting the default SDK import noted in the first bullet above. The new CLI version will install automatically when you create a new add-on, or you can update existing add-ons by changing the version of the ccweb-add-on-scripts in the package.json to 1.4.2.Added new Audio API documentation. You can now import audio to the current Adobe Express document in two different methods:
addAudio() method, which requires a MediaAttributes object containing the title of the audio content.MediaAttributes object in the DragCompletionData.Please note, in both cases, the MediaAttributes object is required for audio content, but optional for video and image content. A new code sample will be supplied in the near future, but in the meantime, please refer to the example usage snippets provided in the SDK Reference and Implementing Common Use Cases Guide.
Added new code sample to demonstrate how to use SWC-React and set theme properties in add-ons called swc-react-theme-sampler to the Code Samples.
swc-react over React Spectrum and to point to the new sample mentioned above.currentUser API details and usage example to the SDK References and Implementing Common Use Cases Guide.devFlags API details, which can be used to simulate certain behavior during development.There’s currently a bug where addArtboard could crash the application or corrupt the document if there’s no fill specified on the artboard. Please ensure you always add a fill in the same frame as the artboard creation until this issue is resolved. Also note, when this bug is fixed, the ArtboardNode will accept a single fill object, rather than an ItemList of fill(s).
Currently, in the addPage API, a new page is created, but the selected context is not changed to the newly added artboard. As a result, from a UI perspective, the user remains on the previous page. A change will be implemented this week which will change the default context to the artboard child of the newly added page. This results in actual navigation to the newly added page, and all new content which is added using the Editor APIs will be added to this page.
IMPORTANT: We recommend that you only test the use of these experimental Editor APIs against non-essential documents, due to the potential for loss or corruption.
permissions in the manifest.json to allow-popups and allow-popups-to-escape-sandbox to ensure the pricing page can be loaded when needed (and note the addition of the renditionPreview flag in the requirements of the manifest when you want to allow premium content to be previewed).console.log is not an indication of whether that field is supported or documented.Uncaught (in promise) at adobe-internal.js:49). Your add-on panel UI will be visible and continue to be interactive, but it won’t be able to communicate with the document sandbox, resulting in what feels like non-responsive UI (e.g., clicking doesn’t trigger the expected action). You’ll want to configure your editor to highlight any syntax editors so that you can be sure your code is at least syntactically correct before you save.apiProxy() with the wrong argument will do nothing without providing any error feedback. If communication is not working, carefully double-check your UI code is requesting the "script" API proxy and your script sandbox code is requesting the "panel" API proxy.Unexpected behavior
editor.createImageContainer) will be visually reflected, but doesn’t currently update the “Blend mode” field in the property panel.clear() to remove all children from an element as well as when using removeFromParent().While the API supports adding multiple strokes to elements, Express currently only supports editing the first stroke added. If you want to change the stroke of an element, remove the existing strokes and then add the new stroke so that the element continues to have a single stroke. For example:
element.strokes.clear();
element.strokes.append(newStroke);
utils.createColor(). We’re likely to change how you assign colors to objects, so bear this in mind as you use the experimental APIs. Note that this means you cannot just pass a plain JS object of the form {red, green, blue} to the Editor APIs — it must be a color created using utils.createColor.fetch in the document sandbox environment. You can work around this by exposing a method from your panel that your script code can call that does the work of fetching remote content. In the future we may abstract this for you automatically.strokes API is likely to be modified so that it only supports a single stroke.renditionPreview in the requirements section, and the script property to the entryPoints section to support the new experimental document sandbox APIs.DisableDragToDocument and dropCancelReason support to the addonsdk.app reference.requestedSize parameter can now be supplied as part of the JPG and PNG rendition options passed in when exporting content with the createRenditions method.clipboard permission can now be set with the clipboard-write value in the manifest to allow an add-on to write data to the clipboard.