penpot/plugins/CHANGELOG.md
Alonso Torres f993f203bd
🐛 Fix problems with plugins API (#10412)
*  Adds static dispatch safe stubs in tests

* 🐛 Fix shapesColors metadata key to match ColorShapeInfo

* 🐛 Fix CommentThread.remove rejecting the owner's own threads

* 🐛 Fix page.removeCommentThread throwing on a spurious Promise

*  Implement ShapeBase.swapComponent in the plugin API

*  Expose File.revn in the plugin API

* 🐛 Fix FileVersion.createdAt calling Luxon method on a js/Date

* 🐛 Fix plugin font/typography application to text and ranges

* 🐛 Default plugin overlay interaction position for non-manual types

* 🐛 Fix plugin interaction setters passing an id-only shape

* 🐛 Fix grid addColumnAtIndex rejecting valid track types

* 🐛 Expose libraryId on library color/typography/component proxies

*  Implement LibraryTypography.setFont in the plugin API

* 🐛 Fix typography.applyToTextRange reading unexposed range bounds

* 🐛 Fix utils.geometry.center argument mismatch

* 🐛 Fix localStorage.removeItem calling getItem

* 🐛 Fix shape backgroundBlur proxy key casing

* 🐛 Report boolean shape type as 'boolean' in the plugin API

* 🐛 Return the resulting paths from plugin flatten

* 🐛 Make plugin z-order methods act on the target shape

* 🐛 Make is-variant-container? return a boolean

*  Implement Group.isMask in the plugin API

* 🐛 Return a shape proxy from TextRange.shape

* 🐛 Return the duplicated set from TokenSet.duplicate

* 🐛 Fix theme addSet/removeSet reading set name with a keyword

* 🐛 Accept string fontFamilies token value in the plugin API

* 🐛 Fix combineAsVariants ignoring the passed component ids

* 🐛 Fix board removeRulerGuide ignoring its argument

* 🐛 Fix board guides setter schema and parser

* 🐛 Avoid 0-byte allocation when syncing empty grid tracks

* 🐛 Validate grid track indices in the plugin API

* 🐛 Return null for empty input in group() and centerShapes()

* 🐛 Return TokenTypographyValue[] from a typography token's resolvedValue

* 🐛 Return TokenShadowValue[] from a shadow token's resolvedValue

* 🐛 Return string[] from a fontFamilies token's resolvedValue

* 🐛 Clear mutually-exclusive reps when setting LibraryColor gradient/image

* 🐛 Add readonly tags to types, deprecate Image type

* 📚 Update plugins changelog
2026-06-29 17:32:15 +02:00

18 KiB

1.5.0 (Unreleased)

💣 Breaking changes & Deprecations

  • plugins-runtime: changes outside the current page now raise a validation error when the target belongs to a page that is not currently active, instead of silently operating on the active page.
  • plugin-types: Change return type of combineAsVariants
  • plugin-types: Deprecate the legacy Image shape interface — image shapes exist only for backward compatibility with old files; new images are embedded in a Fill via its fillImage (an ImageData).
  • We've solved several inconsistencies accross the API, if you relied on an undocumented property or method be aware that might have changed.

🚀 Features

  • plugins-runtime: Added version field that returns the current version
  • plugins-runtime: Added optional parameter throwOnError to penpot.ui.sendMessage (default false, backwards-compatible)
  • plugin-types: Added a flags subcontexts with the flag naturalChildrenOrdering
  • plugin-types: Added flag throwValidationErrors to enable exceptions on validation
  • plugin-types: penpot.openPage() now returns Promise<void> and should be awaited before performing operations on the new page
  • plugin-types: Change LibraryComponent.isVariant() return type to type guard this is LibraryVariantComponent
  • plugin-types: Added createVariantFromComponents
  • plugin-types: Added textBounds property for text shapes
  • plugin-types: Fix missing webp export format in Export.type
  • plugin-types: Added fixedWhenScrolling property for shapes
  • plugin-runtime: addToken now resolves references against all token sets, allowing references to tokens in inactive sets
  • plugin-types: TokenCatalog.addSet now accepts an optional active flag to create an already-active set (sets are inactive by default)
  • plugin-runtime: A fontFamilies token's resolvedValue now returns the documented string[] (the resolved family list) instead of leaking the raw tokenscript list symbol

🩹 Fixes

  • plugins-runtime: Fix inverted validation that rejected valid values (and accepted invalid ones) on text range align, direction, textDecoration, letterSpacing and on layout child zIndex.
  • plugins-runtime: Array-typed properties (e.g. page.flows, shape.exports, shape.shadows, layout rows/columns, ruler guides, path commands) now always return an array, returning an empty array instead of null when there are no items
  • plugin-types: Fix penpot.openPage() to navigate in same tab by default
  • plugin-types: Rename LibraryTypography.fontFamilies to fontFamily to match the runtime (it holds a single font family, not an array)
  • plugin-runtime: Setting a LibraryColor's gradient or image now clears the other color representations (solid/gradient/image are mutually exclusive), so the result is a valid color instead of being rejected with "expected valid color"
  • plugin-types: Mark members that have no runtime setter as readonly, fixing a mismatch where they were typed as writable: font metadata (Font.*, FontVariant.*, FontsContext.all), the Ellipse/Image/SvgRaw type discriminants (now consistent with the other shapes), File.name/pages/revn, Page.root, TokenTheme.activeSets, Variants.properties, ImageData.*, the board guide value objects (GuideColumn/GuideRow/GuideSquare and their params — board.guides returns a formatted snapshot, so reconfiguring means reassigning the whole array), the Point and Bounds value objects, the Penpot.ui/Penpot.utils subcontexts, the derived Boolean path data (d/content/commands are computed from the operands; Boolean is not editable like a Path), and the EventsMap event entries (a type-only event→callback map, never assigned). Members that do expose a setter stay writable: Board.children, Path.d/content/commands and FileVersion.label.

1.4.2 (2026-01-21)

  • plugin-runtime: fix atob/btoa functions

1.4.0 (2026-01-21)

🚀 Features

  • switch component (7d68450)
  • Add variants to plugins API (04f3c26)
  • format ci job (17b5834)
  • fix problem with ci (4b3c50f)
  • change in workflow (3a69f51)
  • plugin-types: add methods to modify the index for shapes (4ad50af)
  • plugin-types: change content type and added new attributes (dbb68a5)
  • plugins-runtime: add data method to image data (f077481)
  • plugins-runtime: fix problem with linter (30f4984)
  • plugins-runtime: allow openPage() to toggle opening on a new window or not (da8288b)

🩹 Fixes

❤️ Thank You

  • alonso.torres
  • Juanfran @juanfran
  • Michał Korczak
  • Miguel de Benito Delgado
  • Pablo Alba

1.3.2 (2025-07-04)

🩹 Fixes

  • plugins-runtime public package.json (70fd69f)

❤️ Thank You

  • Juanfran @juanfran

1.3.1 (2025-07-04)

🚀 Features

  • plugins-runtime as npm library (41c56b1)

🩹 Fixes

❤️ Thank You

  • Juanfran @juanfran

1.3.0 (2025-06-25)

🚀 Features

  • plugin-types: add skipChildren to exports (b3373ba)
  • plugins-runtime: change plugins modal z-index (c6a4a7d)
  • plugins-runtime: adds max resize to the screen size (f2fe501)
  • plugins-runtime: adds localstorage wrapper API for plugins (0006ca9)
  • plugins-runtime: add generateFontFaces method (30e1d02)
  • poc-state-plugins: add some methods to the example (b95961a)
  • poc-state-plugins: example using the localstorage api (b101523)

🩹 Fixes

  • plugin-colors-to-tokens: adapt to Penpot tokens metadata format (3a1ff00)
  • plugin-colors-to-tokens: avoid unvalid character in names (dd0fd1a)
  • plugin-types: add missing board properties (de4a2a0)
  • plugin-types: fix problem with type (9759964)
  • plugins-runtime: add allow-same-origin to iframe (65d5351)
  • plugins-runtime: fixes null checking issue (6b5b562)
  • plugins-runtime: fix problem with resize modal position (45dc41d)
  • plugins-styles: migrate to fonts css api v2 (45a9ee9)

❤️ Thank You

  • alonso.torres
  • Martynas Barzda
  • Xavier Julian

1.2.0 (2025-02-27)

🚀 Features

  • upgrade nx & angular & prettier (32de075)
  • add ui.resize & ui.size api (815181d)
  • colors to tokens export plugin (7f8a011)
  • transform color & opacity to rgba (9a3e6e0)
  • plugin-colors-to-tokens: only rgba when the opacity is not 1 (e922cf9)
  • plugin-types: deprecated fields in colors (6adcc4c)
  • plugins-runtime: add upload svg with images (df925b5)

🩹 Fixes

❤️ Thank You

  • alonso.torres
  • Juanfran @juanfran
  • Michał Korczak

1.1.0 (2024-12-12)

🚀 Features

  • updated doc links (cb49dfb)
  • plugin-types: add support for file history versions (eab57d7)

🩹 Fixes

  • styles rename layers (40e08f8)
  • rename-layers: i#8951 disable buttons when empty (#8951)

❤️ Thank You

  • alonso.torres
  • María Valderrama @mavalroot
  • Marina López @cocotime

1.0.0 (2024-10-25)

🚀 Features

  • plugins-runtime: add close callback to load api (aeddab7)
  • runtime: unload plugin (b4d0463)

🩹 Fixes

  • search in icons plugin (b4664a2)
  • table-plugin: i#8965 empty cell values when importing csv files (#8965)

❤️ Thank You

  • alonso.torres
  • Juanfran @juanfran
  • María Valderrama @mavalroot
  • Marina López @cocotime

0.12.0 (2024-10-04)

🚀 Features

  • e2e tests (1371af9)
  • add build to CI (a434209)
  • api-doc: update readme (99ff81d)
  • docs: add examples for new permissions (2f0f7a6)
  • e2e: add screenshots ENV variable (9292bf2)
  • plugin-types: add ruler guides and new zoom methods (c8066be)
  • plugin-types: add apis for comments (e34e56c)
  • plugin-types: update comment related methods (50bc7ba)
  • plugin-types: removed old method and replaced with attributes (1866299)
  • plugins-runtime: plugin live reload (bbc77e4)
  • plugins-runtime: adds new permissions comment:read, comment:write and allow:downloads (5adbee2)
  • plugins-runtime: expose some public JS APIs to the plugins code (22dfa92)
  • poc-state-plugin: add new functions to the plugin to test comments and rulers (6adee11)
  • rename-layers: final review - undo group (2909bcc)
  • runtime: refactor plugin state (16595c2)
  • runtime: remove deprecated method (ccc5f78)
  • table-plugin: enhancement save config (07af57d)

🩹 Fixes

  • e2e: update dump params to shape model (ade39ee)
  • plugin-types: optional path curves (0ea57f1)
  • plugins-runtime: clean pending timeouts (8870dda)
  • plugins-runtime: prevent plugin execution after close (b65492a)
  • plugins-styles: import svg inline (567b0b5)
  • runtime: ses errorTrapping interferes with penpot error handler (8c0e36d)
  • runtime: prevent override Penpot objects (120e9e5)

❤️ Thank You

  • alonso.torres
  • Juanfran @juanfran
  • María Valderrama @mavalroot

0.10.0 (2024-07-31)

🚀 Features

  • change permissions names (99126f8)
  • stop offering icons in the style library (5a219e9)
  • new publish script (5114e78)
  • init e2e test (b0af705)
  • docs: how api docs are generated (e047977)
  • docs: basic css theme for typedoc (0eac44d)
  • plugin-types: update API types (bffa467)
  • plugin-types: add pages info to the file (b54edb3)
  • plugin-types: add parent reference to the shape (2588778)
  • plugin-types: add root shape reference to the pages (c712759)
  • plugin-types: add undo block operations to api (1d3ad89)
  • plugins-runtime: update selection (f36fa23)
  • plugins-runtime: add new events 'contentsave' and 'shapechange', changed on/off signatures (2b8a76b)
  • plugins-runtime: add detach shape from component method (ff488d4)
  • plugins-runtime: add API to access to prototypes (a554775)
  • plugins-runtime: add method for pages (9a9b33a)
  • plugins-types: expose new attributes (9ce45a2)

🩹 Fixes

  • typo checkox > checkbox (877a3f2)
  • avoid plugin location question (b4c6165)
  • add files so no unexpected when creating new plugin (ef5629a)
  • eslint migration to ESM docs (249ea62)
  • fix runtime version (95afbf3)
  • horizontal scroll height on plugins modal (08f989a)
  • contrast-plugin: update colors when shape change (8ce04d3)
  • docs: add missing variant on destructive button (9fa96e9)
  • plugin-types: readonly PenpotShapeBase width & height (415284f)
  • plugins-runtime: remove plugin event listener on close (2138985)
  • plugins-runtime: fix problem with types in test (17db173)
  • styles: input, button & select worksans font family (1b9d3b2)

❤️ Thank You

  • alonso.torres
  • Juanfran @juanfran
  • María Valderrama @mavalroot
  • Marina López @cocotime
  • Xaviju

0.9.0 (2024-07-10)

🚀 Features

  • change permissions names (99126f8)
  • stop offering icons in the style library (5a219e9)
  • new publish script (5114e78)
  • plugin-types: update API types (bffa467)
  • plugins-runtime: update selection (f36fa23)
  • plugins-types: expose new attributes (9ce45a2)

🩹 Fixes

  • typo checkox > checkbox (877a3f2)
  • avoid plugin location question (b4c6165)
  • fix runtime version (2401a77)
  • styles: input, button & select worksans font family (1b9d3b2)

❤️ Thank You

  • alonso.torres
  • Juanfran @juanfran
  • Marina López @cocotime
  • Xaviju @xaviju