penpot/library/CHANGES.md
alonso.torres 433d164074 ✨ Build library files with current features and migrations
The file builder behind @penpot/library pinned the features and
migrations it writes to the ones Penpot 2.7 accepted, so its files
could open there. It now writes the current defaults: the features a
new file gets and every available migration. Generated files were
already in the current format (paths, for one, are stored as path
data), so they now declare fdata/path-data and components/swap-group
as they should, and the import runs no migration on them.

Files built this way need the Penpot version the library is built with,
or a later one.

AI-assisted-by: claude-opus-5-5
2026-10-28 15:53:06 +01:00

4.6 KiB

CHANGELOG

Unreleased

  • Generate files with the features and migrations of the Penpot version the library is built with, instead of a fixed set from Penpot 2.7. The files need that Penpot version or a later one to open.

1.2.0

  • Update deps and build it with penpot 2.18.3

1.2.0-RC1

  • Add the ability to add relations (with addRelation method)

1.1.0

  • Same as 1.1.0-RC2

1.1.0-RC2

  • Fix validation issue with several token nodes

1.1.0-RC2

  • Add experimental addTokensLib method

1.0.11

  • Set correct path if it is not provided on addComponent

1.0.10

  • Enable variant/v1 feature by default
  • Add variant attrs handling to addComponent method

1.0.9

  • Fix dependencies declaration on package.json

1.0.8

  • Update penpot runtime

1.0.7

  • Add the ability to provide refereron creating build context
const context = penpot.createBuildContext({referer:"my-referer"});

The referer will be added as an additional field on the manifest.json

1.0.6

  • Fix unexpected issue on library color decoding

1.0.5

  • Add progress reporting support
  • Remove leaked console.log

1.0.4

  • Fix incorrect shapes filtering on creating boolean shapes within components

1.0.3

  • Add missing isLocal field on file media for fix compatibility of the library with penpot 2.7.xx

1.0.2

  • Fix incorrect boolean type assignation
  • Fix fill and stroke handling on boolean shape creation
  • Add sample-bool.js to the playground directory
  • Fix compatibility issue on file media with penpot 2.7.x

1.0.1

  • Make the library generate a .penpot file compatible with penpot 2.7.x
  • Remove useless method addComponentInstance

1.0.0

The library entrypoint API object has been changed. From now you start creating a new build context, from where you can add multiple files and attach media. This change add the ability to build more than one file at same time and export them in an unique .penpot file.

const context = penpot.createBuildContext()

context.addFile({name:"aa"})
context.addPage({name:"aa"})
context.closePage()
context.closeFile()

;; barray is instance of Uint8Array
const barray = penpot.exportAsBytes(context);

The previous file.export() method has been removed and several alternatives are added as first level functions on penpot library API entrypoint:

  • exportAsBytes(BuildContext context) -> Promise<Uint8Array>
  • exportAsBlob(BuildContext context) -> Promise<Blob>
  • exportStream(BuildContext context, WritableStream stream) -> Promise<Void>

The stream variant allows writting data as it is generated to the stream, without the need to store the generated output entirelly in the memory.

There are also relevant semantic changes in how components should be created: this refactor removes all notions of the old components (v1). Since v2, the shapes that are part of a component live on a page. So, from now on, to create a component, you should first create a frame, then add shapes and/or groups to that frame, and then create a component by declaring that frame as the component root.

A non exhaustive list of changes:

  • Change the signature of the addPage method: it now accepts an object (as a single argument) where you can pass id, name, and background props (instead of the previous positional arguments)

  • Rename the createRect method to addRect

  • Rename the createCircle method to addCircle

  • Rename the createPath method to addPath

  • Rename the createText method to addText

  • Rename the addArtboard method to addBoard

  • Rename startComponent to addComponent (to preserve the naming style)

  • Rename createComponentInstance to addComponentInstance (to preserve the naming style)

  • Remove lookupShape

  • Remove asMap

  • Remove updateLibraryColor (use addLibraryColor if you just need to replace a color)

  • Remove deleteLibraryColor (this library is intended to build files)

  • Remove updateLibraryTypography (use addLibraryTypography if you just need to replace a typography)

  • Remove deleteLibraryTypography (this library is intended to build files)

  • Remove add/update/deleteLibraryMedia (they are no longer supported by Penpot and have been replaced by components)

  • Remove deleteObject (this library is intended to build files)

  • Remove updateObject (this library is intended to build files)

  • Remove finishComponent (it is no longer necessary; see below for more details on component creation changes)

  • Change the getCurrentPageId function to a read-only currentPageId property

  • Add currentFileId read-only property

  • Add currentFrameId read-only property

  • Add lastId read-only property

0.0.0

Unreleased, initial protype version.