---
title: "Framer Developers: Changelog"
description: Changes to the Plugin API
published: "Sep 18, 2026, 3:46 PM UTC"
---

# [Changelog](#changelog)

### v5.0.0

Breaking

###### Sep 8, 2026

Plugins 5.0 adds full [CMS list field](../updates/cms-list-field)support, represented in the Plugin API as Array Fields. This enables you to create and edit arrays with full flexibility and nested item management. To support this, there are some breaking type changes for Managed Collections.

###### [Breaking Changes](#breaking-changes)
- Managed collection array items and nested fields now require stable `id` values. Reuse them across syncs to preserve localized values.
- Array field definitions now expose `ArrayItemField[]`. Update code that assumes the first array field is an image field.
- Field data is now exposed as frozen, readonly properties rather than getters. Spreading or serializing field objects now includes those values.

###### [CMS Arrays](#cms-arrays)
- Create array fields with boolean, color, date, file, formatted text, image, link, number, and string fields. Arrays can nest these field types.
- Update or remove nested array fields through `setAttributes()` and `remove()`.
- Writing array values replaces the full array. Pass an empty array to clear it.

###### [Changes](#changes)
- Image field inputs now accept an optional resolution setting.
- Branch site settings changes now include domains, performance, forms, and skills categories.

### v4.1.0

###### Aug 4, 2026

This release introduces new APIs for publishing project changes and managing project branches.

###### [Publishing API](#publishing-api)

Let plugins publish project changes, monitor deployments, and deploy published versions to custom domains.
- Added APIs for publishing and managing deployments: `[publish()](./reference/plugins-publish)`, `[getDeployment()](./reference/plugins-get-deployment)`, `[getDeploymentIssues()](./reference/plugins-get-deployment-issues)`, `[getUnpublishedPageChanges()](./reference/plugins-get-unpublished-page-changes)`, `[listDeployments()](./reference/plugins-list-deployments)`, `[deploy()](./reference/plugins-deploy)` and `[subscribeToDeployment()](./reference/plugins-subscribe-to-deployment)`.
- Added support for publishing and tracking deployments independently on project branches.
- Added support for deploying published versions to custom domains.

###### [Branching API](#branching-api)

Let plugins inspect and manage project branches programmatically.
- Added APIs for retrieving, creating, and monitoring branches: `[getActiveBranch()](./reference/plugins-get-active-branch)`, `[getBranch()](./reference/plugins-get-branch)`, `[getBranches()](./reference/plugins-get-branches)`, `[createBranch()](./reference/plugins-create-branch)`, `[subscribeToBranches()](./reference/plugins-subscribe-to-branches)`, and `[subscribeToActiveBranch()](./reference/plugins-subscribe-to-active-branch)`.
- Returned branch objects `[Branch](./reference/plugins-branch)` have methods for switching, joining, leaving, renaming, deleting, merging, and inspecting changes.

###### [Other updates](#other-updates)
- Added `[createdAt](./reference/plugins-collection-item-created-at)` and `[updatedAt](./reference/plugins-collection-item-updated-at)` properties to CMS collection items.
- Added support for vector nodes, with new node classes: `[PathNode](./reference/plugins-path-node)`, `[ShapeGroupNode](./reference/plugins-shape-group-node)`, `[ShapeContainerNode](./reference/plugins-shape-container-node)`, and `[BooleanShapeNode](./reference/plugins-boolean-shape-node)`.
- Added a new `[url](./reference/plugins-font-url)` property on `[Font](./reference/plugins-font)` containing the file source used for rendering the font.

### v4.0.0

Breaking

###### Jun 16, 2026

This release brings new Plugin styles to match the all-new [Framer 3.0](../updates/framer-3) design and renames the npm package to unify our developer packages. To update a Plugin to version 4.0, use your package manager to uninstall `framer-plugin` and install `@framer/plugin`, then replace the imports within your Plugin code.

###### [Breaking Changes](#breaking-changes)
- Package renamed from `framer-plugin` to `@framer/plugin`.
- Updated `framer.css` with Framer 3.0 styles including new Inter character alternatives, selection colors, input element styles, and more.

###### [New](#new)
- Added `/inter.css` export for loading Inter without needing `framer.css`.
- Added page cloning functions: `WebPageNode.clone()` and `DesignPageNode.clone()`.
- Added an optional filter to `framer.getLocalizationGroups()`.
- Added `linkSmoothScroll`, `linkTrackingId`, `linkRelValues`, and `linkPreserveParams` attributes on frame and text nodes.

###### [Changes](#changes)
- Included Inter fonts now support OpenType features like character alternates.
- Responsive image controls can now be set on Component instances.
- `setParent` now works with `UnknownNode`.

### v3.10.3

###### Jan 28, 2026

Added `[setCloseWarning](./reference/plugins-set-close-warning)` function to show a warning when closing a Plugin.

### v3.10.2

###### Jan 21, 2026

This release adds new APIs for creating and modifying collections.

###### [New](#new)
- Added new method `[createManagedCollection](./reference/plugins-create-managed-collection)` for programmatic creation of plugin-managed CMS collections.
- Added a `[displayTime](./reference/plugins-date-field-display-time)` property to date fields.

###### [Updated](#updated)
- `[createCollection](./reference/plugins-create-collection)` can now be used from any mode.

### v3.9.0

###### Dec 16, 2025

This release adds new APIs for background plugin messaging, collection creation, and enhanced code file creation options.

###### [New](#new)
- Added new method `[createCollection](./reference/plugins-create-collection)` for programmatic creation of CMS collections.
- Added new method `[setBackgroundMessage](./reference-legacy/plugin-set-background-message)` allowing for plugins running in the background to communicate their status to users.
- Added new node properties — `[overflow](./reference-legacy/overflow)`, `[zIndex](./reference-legacy/zindex)` and `[textTruncation](./reference-legacy/texttruncation)`

###### [Updated](#updated)
- Added optional config parameter to `[createCodeFile](./reference-legacy/plugins-code-files-create-code-file)` allowing to control whether “Edit Code” UI actions open the plugin which created the plugin by default.
- Added optional `skipIfVisible` parameter to `[ZoomIntoViewOptions](./reference-legacy/plugins-zoom-into-view-type-options)` used by `zoomIntoView` and `navigateTo` methods to prevent unnecessary on Canvas panning when needed. 

###### [Fixed](#fixed)
- Fixed an issue during managed collection sync sometimes causing duplicate items.
- Fixed `[Collection.setActive()](./reference/plugins-collection-set-as-active)`not navigating to the collection when called on the Canvas. 

### v3.8.0

###### Nov 3, 2025

This release introduces new APIs for creating pages and provides new content type configuration options for formatted text fields in Managed Collections.

###### [Page Creation APIs](#page-creation-apis)
- `[framer.createDesignPage()](./reference-legacy/plugins-canvas-create-design-page)` - Create new Design Pages
- `[framer.createWebPage()](./reference-legacy/plugins-canvas-create-web-page)` - Create new Web Pages.

###### [Formatted Text Content Type](#formatted-text-content-type)
- You can now specify a new `contentType` parameter when [setting formatted text fields for managed collection items](./reference/plugins-managed-collection-add-items). Possible values are `"html"` (default), `"markdown"`, or `"auto"`.

### v3.7.0

###### Sep 24, 2025

This release combines three major updates to `framer-plugin`: the new Navigation API, extended Code File API, and support for Design Pages.

###### [Navigation API](#navigation-api)
- `framer.navigateTo(nodeId, opts?)` — Programmatically navigate to canvas nodes, collection items, or code files. Supports optional selection, zoom constraints, and field-level scrolling for collection items. Also available in class instances such as `node.navigateTo()`, `collectionItem.navigateTo()`, and `codeFile.navigateTo()`.

###### [Code File API](#code-file-api)
- `framer.subscribeToOpenCodeFile(cb)` — Subscribe to the currently open code file, enabling plugins to react when users switch between files.

###### [Design Pages API](#design-pages-api)

Plugins can now read, create, and edit nodes in Design Pages using the same Nodes and Selection APIs you use elsewhere.
- Works with the existing selection and node methods (for example, `framer.getSelection()` and Node operations)
- Insert and modify frames, text, and images on Design Pages, just like on other pages
- Ideal for plugins that generate explorations, moodboards, or asset grids inside a freeform canvas

Learn more about Design Pages: [Design Pages update](https://www.framer.com/updates/design-pages)

### v3.6.0

###### Aug 21, 2025

This release brings new traits to the Canvas API and plugin development workflow.

###### [Added: Layout Traits](#added-layout-traits)
- Added support for layout traits, including stack, grid, padding, and gap.
- Added support for border traits on FrameNode.
- Added support for variant traits on FrameNode.

###### [Added: Code Mode](#added-code-mode)
- Added a new `code` mode, allowing to open a Plugin in the Code Editor.

### v3.5.2

###### Jul 25, 2025

This new release introduces brand new APIs for creating menus for your plugin.

###### [Added: Menu APIs](#added-menu-apis)

We are introducing new APIs for creating two different types of menu:
- `[setMenu](./reference/plugins-set-menu)` lets you add a global menu to the plugin window header.
- `[showContextMenu](./reference/plugins-show-context-menu)` allows creating context menus anywhere in your plugin.

###### [Added: User APIs](#added-user-apis)
- New [User](./reference-legacy/plugins-user) properties: `[avatarUrl](./reference/plugins-user-avatar-url)` and `[initials](./reference/plugins-user-initials)`

###### [Improved](#improved)
- `[closePlugin](./reference/plugins-close-plugin)` now returns `never` instead of `Promise<void>`. That means you can treat it like a `throw`, the code that follows will not be reached. Internally `closePlugin` throws `FramerPluginClosedError`, so make sure to ignore it in your exception handlers. `framer-plugin` stops propagation of unhandled errors and rejections of this class, so you don’t need to.

### v3.4.0

###### Jul 15, 2025

This new release adds support for Gallery fields to CMS APIs, as well as introducing support for managing code components and overrides via the new Code File API.

###### [Added: Code File API](#added-code-file-api)

We’ve added several new APIs to help plugin authors manage code files:
- `[createCodeFile](./reference-legacy/plugins-code-files-create-code-file)`, `[getCodeFile](./reference-legacy/plugins-code-files-get-code-file)`, and `[getCodeFiles](./reference-legacy/plugins-code-files-get-code-files)` for creating and retrieving code files 
- `[subscribeToCodeFiles](./reference-legacy/plugins-code-files-subscribe-to-code-files)` to receive notifications when code files are created or modified 
- `[codeFile.setFileContent](./reference/plugins-code-file-set-file-content)`, `[codeFile.rename](./reference/plugins-code-file-rename)`, and `[codeFile.remove](./reference/plugins-code-file-remove)` to update, rename, and delete code files 
- `[codeFile.getVersions](./reference/plugins-code-file-get-versions)` to access a file’s version history

###### [Added: Gallery Fields](#added-gallery-fields)

It is now possible to create and update Gallery fields, as well as set values for them when adding or updating items. This is achieved by the creation of a new `"array"` field type.
- `[ManagedCollection.setFields](./reference/plugins-managed-collection-set-fields)` and `[Collection.addFields](./reference/plugins-collection-add-fields)` support creating Gallery fields.
- `[ManagedCollection.addItems](./reference/plugins-managed-collection-add-items)` and `[Collection.addItems](./reference/plugins-collection-add-items)` let you add values for Gallery fields.
- `[CollectionItem.setAttributes](./reference/plugins-managed-collection-add-items)` can now update Gallery field values.

See our updated [CMS guide](https://www.framer.com/developers/cms#working-with-arrays-beta) for more information on working with arrays.

###### [Updated: Collection API](#updated-collection-api)

Deprecated Collection and Managed Collection `readonly` property in favor of `managedBy` and proper permission-based checks via the Permissions API

###### [Updated: User API](#updated-user-api)

User now has `avatarUrl` and `initials`, and is finally documented.

###### [Fixed: Draggable Component](#fixed-draggable-component)

Fixed the `<Draggable>` component so that the `altText` parameter is correctly applied when dragging and dropping images, ensuring accessibility metadata isn’t lost.

### v3.3.0

###### Jun 6, 2025

- Added support for `rem` units — allowing to set `rem` units that were announced[in our April update](https://www.framer.com/updates/april-update-2025)
- Added support for Vector Set nodes — these are now exposed for use in plugins
- Improved `ManagedCollections` API — it’s now possible to call `setFields(await getFields())` without running into type errors

### v3.2.0

###### May 6, 2025

This new release introduces APIs for Redirects, which allows to manage your site Redirects programatically. Management can happen in bulk or individually.
- Added `[addRedirects()](https://www.framer.com/developers/reference/plugins-redirects-add-redirects)`**, **`[getRedirects()](https://www.framer.com/developers/reference/plugins-redirects-get-redirects)`**, **`[removeRedirects()](https://www.framer.com/developers/reference/plugins-redirects-remove-redirects)`.
- Added `[setRedirectOrder()](https://www.framer.com/developers/reference/plugins-redirects-set-redirect-order)` for defining order of Redirects.
- Added `[Redirect](./reference/plugins-redirect)` class for specific redirect management.

### v3.1.0

###### Apr 24, 2025

This release introduces two entirely new sets of APIs for Plugins: **Localization** and **Permissions**. With the new Localization APIs, Plugins are now able to programmatically read and update a site’s Locales and Localization sources. \
With the Permissions API, Plugins can check which permissions the Plugin user has (e.g. Design, Content-only) and adapt the Plugin functionality accordingly. Learn how to get started in the [Localization Guide](./plugins-localization) and[Permission guide](./plugins-permissions).

>

#### [**Note**](#note)

The `framer-plugin` package now uses a top-level await, make sure to update `vite-plugin-framer` to `1.0.7` or higher. 

###### [Localization](#localization)

This release introduces brand new APIs for managing your site’s Localizations.
- `[getLocales](./reference/plugins-get-locales)` lets you get all your site’s Locales.
- `[getDefaultLocale](./reference/plugins-get-default-locale)` gives you the default Locale.
- `[getActiveLocale](./reference/plugins-get-active-locale)` gives you the active Locale.
- `[getLocalizationGroups](./reference/plugins-get-localization-groups)` retrives all Localization groups and sources.
- `[setLocalizationData](./reference/plugins-set-localization-data)` lets you update your site’s Localization data.

We have also added Localization support to other existing APIs.
- `[Collection.getItems](./reference/plugins-collection-get-items)` now includes Localization data for each item.
- `[ManagedCollection.addItems](./reference/plugins-managed-collection-add-items)` lets you include item Localization data.
- `[Collection.addItems](./reference/plugins-collection-add-items)` lets you include item Localization data.
- `[CollectionItem.setAttributes](./reference/plugins-collection-item-set-attributes)` lets you include item Localization data.

###### [Permissions (Preview)](#permissions-(preview))

Today, Plugins can only be launched and used by those with full permissions on a Project. A few weeks from now, we’ll allow Plugins to be launched and used by those without design permissions as well. With the Permissions API Preview, we’re giving Plugin authors time to proactively accommodate for this change via these new APIs. Learn more about these flows in the [Permissions guide](./plugins-permissions).
- Calling a method unavailable to the user will result in an error.
- `[isAllowedTo](./reference/plugins-is-allowed-to)` lets you check methods’ availability to the user.
- `[subscribeToIsAllowedTo](./reference-legacy/plugins-subscribe-to-is-allowed-to)` lets you subscribe to changes in `isAllowedTo`.
- `[useIsAllowedTo](./reference-legacy/plugins-use-is-allowed-to)` is a React hook version of `subscribeToIsAllowedTo`.

###### [CMS](#cms)
- `[slugFieldBasedOn](./reference/plugins-collection-slug-field-based-on)` is the ID of the field that a Collection’s slug is based on.
- [Enum Fields](./reference/plugins-enum-field) can now [update](./reference/plugins-enum-case-set-attributes), [remove](./reference/plugins-enum-case-remove), and [sort](./reference/plugins-enum-field-set-case-order) their [Enum Cases](./reference/plugins-enum-case).
- Fields can now be marked as `required` during creation.
- Fixed a bug where adding items with HTML content would sometimes error.
- Fixed a bug preventing the referenced Collection of fields being updated.

###### [Canvas](#canvas)
- `[onDragComplete](./reference-legacy/plugins-drag-and-drop-on-drag-complete)` was added as a callback to the [Draggable](./reference-legacy/plugins-drag-and-drop-draggable) component.
- `preferredImageRendering` can now be provided when adding images.

###### [Styles](#styles)
- Fixed a bug where renaming a Text Style or Color Style would reset its path.
- Text Styles and Color Styles now both expose their full path.\


### v3.0.0

Breaking

###### Mar 5, 2025

Plugins version 3.0 enables entirely new functionality within CMS Plugins with a new set of APIs for modifying and adding to existing Collections that weren’t created by your Plugin (known as `UnmanagedCollection`). Along with this, we’ve made a few changes to the core CMS APIs to add stronger typing and set us up for additional features coming soon.

###### [Breaking Changes](#breaking-changes)

The following CMS functions now require their `fieldData` to be an object, with `value` and `type` properties. Which enforces stronger types across CMS APIs.
- `[Collection.getFields()](./reference/plugins-collection-get-fields)` now returns `[Field](./reference-legacy/plugins-field)[]`.
- `BooleanField`, `StringField`, etc. are classes now.
- `SupportedCollectionField` type has been removed.
- `CollectionField` type has been removed.
- `[Collection.getItems()](./reference/plugins-collection-get-items)` returns typed `fieldData`.
- `[CollectionItem.setAttributes()](./reference/plugins-collection-item-set-attributes)` requires typed `fieldData`.
- `[ManagedCollection.addItems()](./reference/plugins-collection-add-items)` requires typed `fieldData`.

```
// Before 
managedCollection.addItems([
  { [fieldID]: "Your Value" }
])

// After
managedCollection.addItems([
  { [fieldID]: {
      type: "string",
      value:  "Your Value"
  }
}])
```

###### [Collections](#collections)
- Plugins can now write to Collections.
- Added `[Collection.addItems()](./reference/plugins-collection-add-items)`.
- Added `[Collection.setItemOrder()](./reference/plugins-collection-set-item-order)`.
- Added `[Collection.setFieldOrder()](./reference/plugins-collection-set-field-order)`.

###### [Collection Fields](#collection-fields)
- `[Collection.addFields()](./reference/plugins-collection-add-fields)` lets you create new fields.
- `[Field.setAttributes()](./reference-legacy/plugins-field-set-attributes)` allows you to update the field.
- `[Field.remove()](./reference-legacy/plugins-field-remove)` removes the field from the Collection.
- `[Collection.removeFields()](./reference/plugins-collection-remove-fields)` removes fields in bulk.

### v2.2.0

###### Feb 11, 2025

The 2.2.0 release brings some updates to the CMS API, with a focus on improving the experience around having multiple Managed Collections created by the same Plugin.

###### [Managed Collections](#managed-collections)
- Added new ⁠`getManagedCollections()` method to get all Collections managed by your Plugin.
- Added ⁠`setAsActive()` method to select the active Collection in the Editor
- Deprecated ⁠`getManagedCollection()` in favor of ⁠`getActiveManagedCollection()`.
- Fixed a bug where setting Plugin Data on a `CollectionItemNode` was throwing a `Node not found` error.

###### [Collections](#collections)
- Added support for ⁠`FieldDivider` type in collection fields.
- Added ⁠`setAsActive()` method to make a collection the active one.
- Added ⁠`removeFields()` method to remove fields by their ID.
- Added ⁠`setFieldOrder()` method to arrange fields in a specific order.
- Added ⁠`slugFieldName` property to Collection interface.

### v2.0.0

Breaking

###### Nov 11, 2024

The 2.0 release contains a single breaking change to the `id` field of the APIs below. Our hashing algorithm for the `id` had a higher potential for ID collisions than expected. The `id` field will now be a different hashed value for the same user/project compared to `1.x.x`. Logic that stores and compares these values will need updating. To migrate from the old value to the new value, you can reference the `apiVersion1Id` field.
- `[getProjectInfo()](https://www.framer.com/developers/plugins/reference#project)`
- `[getCurrentUser()](https://www.framer.com/developers/plugins/reference#user)`

### v1.1.0

###### Oct 15, 2024

- Resolution support has been added to all image APIs.
- Collection item draft status is now exposed in the API.
- Plugin windows now support maximum width/height.

### v1.0.0

###### Oct 2, 2024

Plugins initial public release.

[Previous Publishing](./publishing)

[Next Reference](./reference)

---

## Navigation

- [Enterprise](../enterprise/)
- [Pricing](../pricing)
- [Log in](https://framer.com/r/login)
- [Sign up](https://www.framer.com/r/signup/)
- [Brand guidelines](../brand)
- [AI New](../ai/)
- [Agents New](../agents/)
- [External Agents New](../agents/external/)
- [Design](../design/)
- [Collaborate New](../collaborate/)
- [CMS](../cms/)
- [Hosting](../hosting/)
- [Performance](../performance/)
- [SEO](../seo/)
- [Convert](../convert/)
- [Publish](../publish/)
- [Updates New](../updates)
- [Academy](../academy/)
- [Guides](../guides)
- [Desktop app](../downloads/)
- [Blog](../blog/)
- [Newsletter](../newsletter)
- [Stories](../stories/)
- [Creators](../creators)
- [Experts](../expert/apply/)
- [Students](../education/students/)
- [Ambassadors](../education/ambassadors/)
- [State of Sites](https://www.framer.com/state-of-sites-2026/)
- [Stack Score New](../stack-score/)
- [Help Articles](../help/)
- [Contact](../contact/)
- [Startups](../startups/)
- [Agencies](../agencies/)
- [Switch](../switch/)
- [Careers](../careers/)
- [Brand](../brand)
- [Store](../store)
- [Security](../legal/security)
- [Abuse](mailto:abuse@framer.com)
- [Legal](../legal/community-terms)
- [Trust](https://app.eu.vanta.com/framer.com/trust/ow67ujg7iav0t6qtd1o6r2)
- [Designers](../solutions/designers/)
- [Agencies](../solutions/agencies/)
- [Marketers](../solutions/marketers/)
- [Growth](../solutions/growth/)
- [Builders](../solutions/builders/)
- [Engineers](../solutions/engineers/)
- [Site Teams](../solutions/site-teams/)
- [Founders](../solutions/founders/)
- [AI website builder](../solutions/ai-website-builder/)
- [AI design agent](../solutions/ai-designer/)
- [Website builder](../solutions/website-builder/)
- [Landing pages](../solutions/landing-pages/)
- [Portfolio maker](../solutions/portfolio-website/)
- [UI/UX design](../solutions/ui-ux-design/)
- [No-code](../solutions/no-code-website-builder/)
- [Overview](../compare)
- [Webflow](../compare/framer-vs-webflow)
- [Figma](../compare/framer-vs-figma)
- [Wix](../compare/framer-vs-wix)
- [Squarespace](../compare/framer-vs-squarespace)
- [WordPress](../compare/framer-vs-wordpress)
- [Readymag](../compare/framer-vs-readymag)
- [Ceros](../compare/framer-vs-ceros)
- [Unbounce](../compare/framer-vs-unbounce)
- [Lovable](../compare/framer-vs-lovable)
- [Claude Code](../compare/framer-vs-claude-code)
- [ChatGPT](../compare/framer-vs-chatgpt)
- [Codex](../compare/framer-vs-codex)
- [Contentful](../compare/framer-vs-contentful)
- [Sanity](../compare/framer-vs-sanity)
- [AEM](../compare/framer-vs-adobe-experience-manager)
- [Replit](../compare/framer-vs-replit)
- [v0](../compare/framer-vs-v0)
- [Marketplace](https://www.framer.com/community/marketplace/)
- [Templates](https://www.framer.com/community/marketplace/templates/)
- [Components](https://www.framer.com/community/marketplace/components/)
- [Plugins](https://www.framer.com/community/marketplace/plugins/)
- [Vectors](https://www.framer.com/community/marketplace/vectors/)
- [Feed](https://www.framer.com/community/feed/)
- [Hype](https://www.framer.com/community/hype/)
- [Gallery](https://www.framer.com/community/gallery/)
- [Contests](https://www.framer.com/community/contests/)
- [Members](https://www.framer.com/community/members/)
- [Meetups](../meetups/)
- [Updates](../updates/community/)
- [Figma to HTML](../solutions/figma-to-html/)
- [AEO scanner](../aeo)
- [Meta Tags](https://www.linkpreview.app/)
- [Free domains](../domains/)
- [CanvasBench](../canvasbench/)
- [Shortcuts](../shortcuts)
- [Checking status](https://www.framerstatus.com/)
- [504,616,418,546 tokens processed this week](https://openrouter.ai/apps/framer)
