Designer Extension
Create and develop Designer Extensions for Webflow with template selection, local development server, and bundling for distribution.
Important Note
ALWAYS use Bash tool for all Webflow CLI operations:
- Execute
webflow extensioncommands via Bash tool - Use Read tool to examine generated files and schema (never modify)
- Use Glob tool to discover project files
- Verify CLI installation:
webflow --version - Check authentication:
webflow auth login(if needed) - DO NOT use Webflow MCP tools for CLI workflows
- All CLI commands require proper descriptions (not context parameters)
Package Manager Detection:
- Check for lock files:
package-lock.json(npm),pnpm-lock.yaml(pnpm),yarn.lock(yarn) - If no lock file found, ask user which package manager to use (npm/pnpm/yarn)
- Use detected package manager for all install/build commands
Instructions
Phase 1: Environment Verification
- Verify CLI installed: Run
webflow --versionto confirm CLI is installed - Check project state: Check if already in an extension project (look for webflow.json with extension schema)
- Identify operation type: Determine if user wants to:
- List available templates
- Initialize new extension
- Bundle existing extension
- Serve extension locally
Phase 2: Template Listing & Selection
- List templates (if user asks or before init): Run
webflow extension list - Show available templates:
default- Basic HTML/CSS/JavaScript templatereact- React-based templatetypescript-alt- Alternative TypeScript template
- Ask user to select template if initializing new extension
Phase 3: Extension Initialization
- Choose project name: Ask user for project directory name
- Run init command: Execute
webflow extension init <project-name> <template> - Read generated schema: Use Read tool to examine webflow.json
- Show schema structure: Display the 5 schema fields:
name(required) - Extension name as it appears in WebflowapiVersion(required) - API version (2)publicDir(required) - Directory to build from (dist)appIntents(optional) - Element types that can create connectionsappConnections(optional) - Connection configurations
- Install dependencies: Run
npm installin project directory
Phase 4: Local Development
- Start dev server: Execute
webflow extension serve [port] - Show dev server info:
- Default port: 1337 (unless user specifies different port)
- Local URL: http://localhost:[port]
- How to load in Designer
- Provide loading instructions:
- Open Webflow Designer
- Load extension from local URL
- Test functionality
Phase 5: Bundling for Upload
- Run bundle command: Execute
webflow extension bundle - Show bundle output: Display bundle.zip location and size
- Provide upload instructions: Guide for uploading to Webflow
- Document next steps: Testing and distribution guidance
Examples
Example 1: List Available Templates
User prompt:
Show me the available Designer Extension templatesResponse:
π Designer Extension Templates
Listing available templates...
Executing: webflow extension list
Output:
Available templates:
1. default - Basic HTML, CSS, and JavaScript
2. react - React-based extension
3. typescript-alt - Alternative TypeScript template
To create a new extension:
webflow extension init <project-name> <template>
Example:
webflow extension init my-extension reactExample 2: Initialize New Extension
User prompt:
Create a new Designer Extension called gallery-manager using ReactStep 1: Initialize Project
π Initialize Designer Extension
Project name: gallery-manager
Template: react
Executing: webflow extension init gallery-manager react
Output:
β Created extension project at ./gallery-manager
β Generated project structure
β Created webflow.json with extension schema
β Set up React template
π Project Structure:
./gallery-manager/
βββ webflow.json # Extension schema
βββ package.json # Dependencies
βββ src/
β βββ index.html
β βββ index.tsx
β βββ styles.css
βββ dist/ # Build output
βββ README.md
Installing dependencies...
Executing: cd gallery-manager && npm install
β Dependencies installed (45 packages)Step 2: Show Schema
π Extension Schema (webflow.json)
Reading webflow.json...
{
"name": "Gallery Manager",
"apiVersion": "2",
"publicDir": "dist",
"appIntents": {},
"appConnections": []
}
Schema Fields:
β name (required) - Extension name in Webflow
β apiVersion (required) - API version: 2
β publicDir (required) - Build directory: dist
appIntents (optional) - Element connection types
appConnections (optional) - Connection configs
Extension ready for development!Example 3: Serve Extension Locally
User prompt:
Run the extension on my local dev serverDefault Port (1337):
π Starting Development Server
Executing: webflow extension serve
Output:
β Building extension
β Starting dev server
β Extension ready
π Development Server Running
Local URL: http://localhost:1337
Status: β Active
How to Load in Designer:
1. Open Webflow Designer
2. Open any site
3. Load extension from URL: http://localhost:1337
Press Ctrl+C to stop serverCustom Port:
User: "Run on port 3000 instead"
π Starting Development Server
Executing: webflow extension serve 3000
Output:
β Building extension
β Starting dev server on port 3000
β Extension ready
π Development Server Running
Local URL: http://localhost:3000
Status: β Active
Load in Designer: http://localhost:3000Example 4: Bundle Extension
User prompt:
Bundle my extension for uploadStep 1: Bundle
π¦ Bundling Extension
Executing: webflow extension bundle
Output:
β Building production bundle
β Creating bundle.zip
β Bundle created successfully
Bundle Details:
- File: bundle.zip
- Location: ./dist/bundle.zip
- Size: 245 KB
β
Bundle ready for upload!Step 2: Upload Instructions
π€ Upload Instructions
Your extension is bundled and ready to upload.
Upload Steps:
1. Go to Webflow Designer Extensions dashboard
2. Upload bundle.zip
3. Test the extension
4. Submit for review (if distributing)
Bundle location: ./dist/bundle.zipExample 5: Complete Workflow
User prompt:
Create a new Designer Extension for managing colorsStep 1: List Templates
π Designer Extension Workflow
First, let me show available templates.
Executing: webflow extension list
Available templates:
1. default - Basic HTML/CSS/JavaScript
2. react - React-based (recommended)
3. typescript-alt - TypeScript alternative
Which template would you like to use? (default/react/typescript-alt)User selects: react
Step 2: Initialize
π Creating Extension
Project name: color-manager
Template: react
Executing: webflow extension init color-manager react
β Project created at ./color-manager
β webflow.json generated
β React template configured
Installing dependencies...
β npm install complete
π Extension Schema:
{
"name": "Color Manager",
"apiVersion": "2",
"publicDir": "dist",
"appIntents": {},
"appConnections": []
}Step 3: Start Development
π Starting Dev Server
Executing: webflow extension serve
β Server running at http://localhost:1337
Load in Designer:
1. Open Webflow Designer
2. Load extension from: http://localhost:1337
3. Start developing!
Server running... (Press Ctrl+C to stop)Guidelines
Phase 1: CLI Verification
Installation Check:
# Check if CLI is installed
webflow --version
# If not installed, guide user:
npm install -g @webflow/cliAuthentication (if needed):
# Site authentication if required
webflow auth loginPhase 2: Template Management
List Templates Command:
webflow extension listAvailable Templates:
- default - Basic HTML, CSS, and JavaScript template
- react - React-based extension with modern tooling
- typescript-alt - Alternative TypeScript template
Phase 3: Initialization
Init Command:
webflow extension init <project-name> <template>Arguments:
<project-name>(required) - Name of the new project directory<template>(required) - One of: default, react, typescript-alt
Example Commands:
# Initialize with default template
webflow extension init my-extension default
# Initialize with React template
webflow extension init my-extension react
# Initialize with TypeScript template
webflow extension init my-extension typescript-altProject Structure After Init:
/project-name/
βββ webflow.json # Extension schema (required)
βββ package.json # Dependencies
βββ src/ # Source files
β βββ index.html
β βββ index.tsx (or .js)
β βββ styles.css
βββ dist/ # Build output directory
βββ README.mdPhase 4: Extension Schema
Schema in webflow.json:
{
"name": "<Your Extension Name>",
"apiVersion": "2",
"publicDir": "dist",
"appIntents": {
"image": ["manage"],
"form": ["manage"]
},
"appConnections": [
"myAppImageConnection",
"myAppFormConnection"
]
}Schema Fields:
| Field | Description | Default | Required |
|---|---|---|---|
name |
Extension name as it appears in Webflow | - | Yes |
apiVersion |
API version to use for extension | 2 |
Yes |
publicDir |
Directory to build and serve extension from | dist |
Yes |
appIntents |
Element types that can create connections | {} |
No |
appConnections |
Connection configurations for extension | [] |
No |
Required Fields:
name- Must be unique and descriptiveapiVersion- Currently must be "2"publicDir- Directory where built files are placed (default: "dist")
Optional Fields:
appIntents- Defines which element types can connect to your extension- Example:
{"image": ["manage"], "form": ["manage"]}
- Example:
appConnections- Array of connection identifiers- Example:
["myAppImageConnection", "myAppFormConnection"]
- Example:
Phase 5: Local Development
Serve Command:
# Serve on default port (1337)
webflow extension serve
# Serve on custom port
webflow extension serve 3000Arguments:
[port](optional) - Port number to serve on (default: 1337)
Development Server:
- Default URL: http://localhost:1337
- Custom port: http://localhost:[port]
- Auto-rebuilds on file changes
- Hot reload for faster development
Loading in Designer:
- Open Webflow Designer
- Open any site
- Go to Extensions menu
- Load extension from local URL: http://localhost:[port]
- Extension appears in Designer
Phase 6: Bundling
Bundle Command:
webflow extension bundleOutput:
- Creates
bundle.zipfile in project directory - Contains all built files from
publicDir - Ready to upload to Webflow
Bundle Contents:
- Built JavaScript and CSS files
- HTML entry points
- Assets from publicDir
- Extension schema
Error Handling
CLI Not Installed:
β Webflow CLI Not Found
Designer Extensions require the Webflow CLI.
Installation:
npm install -g @webflow/cli
After installation, verify:
webflow --version
Documentation: https://developers.webflow.com/cliInvalid Template:
β Invalid Template
Error: Template "vue" not found
Available templates:
- default
- react
- typescript-alt
Retry with valid template:
webflow extension init my-extension reactPort Already in Use:
β Development Server Failed to Start
Error: Port 1337 is already in use
Solutions:
1. Stop other process on port 1337
2. Use different port:
webflow extension serve 3000
Find process using port:
lsof -ti:1337 | xargs kill -9Missing webflow.json:
β Extension Schema Not Found
Error: webflow.json not found in current directory
This directory is not an extension project.
Solutions:
1. Initialize new extension:
webflow extension init <name> <template>
2. Navigate to existing extension directory
3. Create webflow.json with required schemaBundle Failed:
β Bundle Creation Failed
Error: Build failed with errors
Common Causes:
- Missing dependencies (run: npm install)
- Build errors in source files
- Invalid webflow.json schema
- Missing publicDir directory
Fix errors and retry:
webflow extension bundleFile Operations
Reading Extension Files: Always use Read tool (never modify):
# View extension schema
Read: webflow.json
# View package dependencies
Read: package.json
# View source files
Read: src/index.html
Read: src/index.tsxDiscovering Project Files: Use Glob tool to find files:
# Find all source files
Glob: src/**/*
# Find configuration files
Glob: *.json
# Find built files
Glob: dist/**/*Never Use Write/Edit Tools:
- Don't create or modify webflow.json with Write tool
- Don't edit generated files
- Let CLI generate all project files
- Only read files to show content
Progress Indicators
For Init:
π Creating Extension...
[ββββββββββββββββββββββββ] 100%
β Project created
β Dependencies installed
Elapsed: 12sFor Bundle:
π¦ Bundling Extension...
[ββββββββββββββββββββββββ] 100%
β Bundle created: bundle.zip
Elapsed: 5sFor Serve:
π Starting Server...
[ββββββββββββββββββββββββ] 100%
β Server ready at http://localhost:1337
Elapsed: 3sBest Practices
Template Selection:
- Use react template for modern component-based development
- Use default template for simple extensions or learning
- Use typescript-alt for TypeScript-based projects
Development Workflow:
- List available templates
- Initialize project with chosen template
- Install dependencies
- Serve locally for development
- Test in Designer
- Bundle for upload
- Upload to Webflow
Schema Configuration:
- Always include required fields: name, apiVersion, publicDir
- Set appropriate appIntents if your extension connects to elements
- Define appConnections for element integrations
- Keep name descriptive and unique
Local Development:
- Use default port 1337 for consistency
- Keep dev server running during development
- Test frequently in Designer
- Check console for errors
Bundling:
- Bundle only when ready for upload or distribution
- Verify build completes without errors
- Check bundle.zip size
- Test bundled version before uploading
Quick Reference
Workflow: list templates β init β serve β develop β bundle β upload
Key Commands:
webflow extension list- Show available templateswebflow extension init <project-name> <template>- Create new extensionwebflow extension serve [port]- Start dev server (default: 1337)webflow extension bundle- Create bundle.zip for upload
Templates: default, react, typescript-alt
Schema Fields (webflow.json):
name(required) - Extension nameapiVersion(required) - API version (2)publicDir(required) - Build directoryappIntents(optional) - Element connection typesappConnections(optional) - Connection configs
Dev Server: http://localhost:1337 (or custom port)
Bundle Output: bundle.zip in project directory
Documentation: https://developers.webflow.com/designer/reference/introduction