XD Plugin API Known Issues
General Issues
- Icons may be blurry or missing in the plugin panel if you don't include the full set of sizes (24px, 48px, 96px, 144px, 192px) in your plugin bundle and manifest.
- Developer/Side-loading Specific
- Plugin menus and handlers may not be in-sync across documents during development
- If someone modifies a plugin's files on disk while XD is running, and then opens more windows in XD, any windows that were open before reflect the old version of the plugin while windows that were opened later reflect the new version of the plugin. The menu bar will always reflect the old version of the plugin regardless of which window is current.
- Plugin menus and handlers may not be in-sync across documents during development
Plugin Management
- If Plugin Manager is open when you invoke Reload Plugins, it will not reflect any changes to the manifest (plugin name, description, icon) until you close & reopen it.
Scenegraph
- It is possible to set nodes to 0 width or 0 height.
- Scenenode setters block negative size values but allow 0 size, even though in many cases it is equally nonsensical. We do block 0 size in the UI.
- In the past, XD's renderer would fail asserts (possibly even crash) with 0-size objects. I couldn't repro that any more, but unless we're covering it well as an officially supported case, it could easily regress again. There are some other minor bugs though, e.g. sharing fails if you have any 0-width/height artboards and bitmap export fails if any of the top-level items you're trying to export are 0-width/height.
- Longer plugin command names may be truncated in the menu on Windows
- Workaround: keep your plugin command names short!
- Some types of interactions are not visible to plugins yet: keypress/gamepad, scrolling, hover, component state transitions, or non-speech audio playback.
Assets Panel
- Plugins can modify the Assets panel contents while running in the background. Do not rely on this - in a future release, it will be blocked. Only make modifications to the document (including Assets panel) while the plugin is running a user-invoked command.
User Interface
- When the mouse cursor is changed, it may not revert back to its original state in UWP.
- It is not possible to trigger the emoji selector in a text field on macOS.
- Many SVGs are known to render in odd ways in the UI. These issues will be addressed in the future, but we would love to hear your reports of any SVGs that don't work, and how you fixed it.
- When tabbing in a scroll view, the scroll view is not automatically scrolled to ensure the target control is in view (macOS Only).
- When using
<input type="radio" />
, be sure to include aname
attribute. If you forget, you'll get different behavior on macOS and Windows 10. On macOS, radio buttons will not be exclusive to each other just because they are in the same container, whereas on Windows 10, radio buttons will be exclusive within the same container. As such, you should always usename
to determine radio button exclusivity. - Emojis are rendered in the font color on Windows 10, instead of using the emoji's colors.
- When a control in a panel is disabled and enabled, it is no longer reachable via TAB. This may also impact controls added after a panel is shown for the first time.
HTML Elements
<option>
tags must have avalue
attribute, or referencing theselect
'svalue
property will returnundefined
.<select value="…"/>
does not show the value as selected. Instead, get a reference to the element and callsetAttribute("value", …)
or use theselected
attribute on theoption
tags.- If you don’t specify a width for your
form
, block elements inside may not take up the entire width. Workaround: always set a width for yourform
elements. form
s only supportmethod="dialog"
. They do not submit to a URL automatically.- It is not currently possible to specify the tab order.
- The size of a
<textarea>
cannot be set withrows
orcols
. Use CSS stylesheight
andwidth
respectively. - HTML5 input validation is not supported.
- Images that fail to load will not render any “broken icon” image in place.
- Input elements do not accept
defaultValue
. <option>
tags do not supportdisabled
attributes.<label for="id"/>
is not supported. Wrap<label>
around the control instead.<input type="file" />
is not supported.<input type="color" />
is not supported.- Using unitless values in
width
andheight
attributes are not supported in UXP 3.1. Usepx
, or CSS styles. <label>
usesinline-flex
layout semantics in UXP 3.1 mode, withflex-wrap: wrap
enabled. If you need to prevent wrapping, useflex-wrap: nowrap
on these elements. Note that the default layout behavior is now horizontal not vertical.
Layout
- When rendering text on a screen that is not HiDPI, descenders may be clipped when using
overflow: hidden
. The workaround is to add a little bit ofpadding
to the bottom of the element. - When rendering inline elements in plugins with a
host.minVersion
of21
or better, spaces between elements may be ignored. This is most obvious when using constructs like<p><b>Click this link:</b> <a href="#">link</a></p>
. Currently UXP will ignore the space between theb
tag and the anchor, resulting in the following visual rendering:Click this link:link
instead ofClick this link: link
. This will be addressed in the next release.- To work around this issue, include a space inside one of the tags, like so:
<b>Click this link: </b><a href="#">link</a>
- To work around this issue, include a space inside one of the tags, like so:
- When rendering inline text that wraps, borders, outlines, and backgrounds only apply to the first line. You should place borders, outlines, and backgrounds on elements with block layout semantics.
- Mixing inline text with UI controls is unlikely to result in a pleasant appearance.
vertical-align
is not yet supported, which makes it difficult to properly align widgets and labels. As such, you should useflex
orinline-flex
when using UI elements.
CSS
- It is not currently possible to assign multiple border colors to a container.
- Do not use
position: fixed
in panels for now; a future update will change its behavior. :active
is not currently supported.baseline
alignment is not currently supported.- The
font
shorthand CSS rule is not supported. text-transform
is not supported- In order to clip an image (say, with
border-radius: 10px
), you must also specifyoverflow: hidden
. - CSS transitions and animations are not supported.
- A solid
outline
will not render unless a color is also provided. When usingoutline: solid
, be sure to supply an outline color as well. - Font sizes do not adjust to dynamic units like
vh
. As such, if you usefont-size: 1vh
, and the viewport changes size, the font size will not adjust. - Setting a
border-color
tounset
may not reset the color to its initial value. - Borders and backgrounds are not drawn correctly when coupled with
object-fit
. - The bottom border may not always render with the same width as the other borders.
- Underlines may render very thin.
calc
only works for length properties. Usingcalc
for a color will not work.- If you need to override an anchor link color, use
a[href]
as the selector to override it.
DOM
- When a dialog is closed, it is not removed from the DOM. This is per spec. If you want the dialog to be removed from the DOM, you must call
HTMLDialogElement#remove
explicitly. - When applying HTML using
innerHTML
, event handlers and scripts are not parsed. This is by design.
Events
- Interactive elements do not support
Pointer%
events keypress
andkeyup
are not currently supported on macOS.- Mouse event
clientX
/Y
&offsetX
/Y
properties have incorrect values. They will change in the near future – do not rely on these properties right now.
Drag & Drop
drag
anddragexit
are not supported, although other HTML5 drag/drop events do work.- Images and text are not implicitly draggable, unlike in HTML. You must provide a
dragstart
handler that callsevent.dataTransfer.setData()
. - Dragging files or other content onto your plugin UI from an outside source is not supported.
Network I/O
- On macOS, it is not possible to use self-signed certificates with secure Websockets.
- Websockets do not support extensions.
- XHR can only send binary content using an ArrayBuffer – Blob is not supported.
- XHR does not support cookies.
responseURL
is not supported on XHR
File I/O
Blob
is not supported. UseArrayBuffer
instead.
Debugging
- XD may be unstable while debugging a plugin. Don't debug when you have important XD documents open.
- Debugging on Windows requires some extra steps run with admin rights – see tutorial for details.
- Elements tab:
- If you leave CDT on the Elements tab, XD will crash the next time you open it. If this happens, keep CDT open after XD crashes and switch to a different tab. Then close CDT, restart XD, and begin debugging again.
- The CSS pane on the right is missing some data and cannot be used to edit CSS.
- Selecting/hovering elements does not highlight the corresponding region in the XD UI.
- The "Select an element" button does nothing.
- Error messages are often missing from the Console view. Use the Plugins > Development > Developer Console view in XD to be sure you are not missing any important information.
- Other DevTools features such as the Network or Profiling tabs are not supported and may behave erratically if you attempt to use them.
- XD will be partially frozen while paused on a JS breakpoint. Don't try to interact with XD while paused.
- You may see a blank white panel to the left of the DevTools UI. Ignore this, as it does nothing.
- If debugging exposes any private fields and methods, do not attempt to use them. Plugins referring to private APIs will be rejected or removed from XD's plugin listing.