Migrating to v2

We’re excited to introduce the new version of Webflow’s Designer APIs, featuring enhanced functionality and more efficient methods for interacting with the Designer. To ensure your app remains compatible, please follow the simple steps provided for updating your app’s configuration and codebase. Check the details below.

Notable Changes

Simplified edit semantics

We have removed the .save() method from many of our objects. Rather than staging “local changes” and explicitly synchronizing via element.save(), we’re now making changes as they’re invoked.

Accessing native Elements

Through the introduction of the Element Presets Object, the API now allows Apps to insert native Elements onto the canvas.

Inserting Elements

We’re introducing new helper methods that make it easier to insert elements into a hierarchy

  • element.append()
  • element.prepend()
  • element.before()
  • element.after()

We’ve removed element-specific methods for adding an element to a canvas including

  • createDOM()
  • createString()
  • createHeading()

Direct editing of Components

This API allows a more streamlined way to edit Component Objects, by accessing the root element of a Component Object.

Clear and consistent naming

We’ve made minor changes to clarify Designer API functionality

  • “Folders” → “PageFolders” to disambiguate versus other Page resources (eg. Asset pages)
  • “og-” -> “openGraph-” prefix for Open Graph Page Fields

Clear and consistent return objects

  • Most methods that aren’t meant to return a value now return a Promise that resolves to null instead of undefined
  • Element IDs are now identified by their component and element ids, eg. id: {component: '63486e4622e33733b9002e9c', element: 'cafe0045-d304-79d9-8f68-af3adaed06e8'}

App configuration Updates

  1. Install the latest version of the Webflow CLI
  2. Install the latest type definitions for the Designer APIs
npm i @webflow/designer-extension-typings@0.2.0-beta.3
  1. Update webflow.json to include the new apiVersion parameter.
webflow.json
1{
2 "name": "My Webflow App",
3 "publicDir": "dist",
4 "apiVersion": "2"
5}
  1. Start your development server.

Code Adjustments

Remove any references to .save()

1// v1
2await myElement.setStyles([styles])
3await myElement.save()
4
5// v2
6await myElement.setStyles([styles])

Adjust logic to access Element IDs

1// v1
2const selectedElement = await webflow.getSelectedElement()
3console.log(selectedElement)
4// Prints: 'cafe0045-d304-79d9-8f68-af3adaed06e8'
5
6// v2
7const selectedElement = await webflow.getSelectedElement()
8console.log(selectedElement)
9// Prints id: {component: '63486e4622e33733b9002e9c', element: 'cafe0045-d304-79d9-8f68-af3adaed06e8'}\`
10
11const elementID = selectedElement?.id.element
12// Returns: 'cafe0045-d304-79d9-8f68-af3adaed06e8'

Adjust logic for element insertion

1// v1
2const newDiv = await webflow.createDOM('div')
3
4// v2
5const selectedElement = await webflow.getSelectedElement()
6const newDiv = await selectedElement?.before(webflow.elementPresets.DivBlock)