A minimal starter template for building Webflow Designer Extensions with React, TypeScript, Ultracite and Rspack.
- React 19 with TypeScript
- Custom hooks for common Designer API patterns
useSelectedElement— Subscribe to element selection changesuseSiteInfo— Fetch site metadatauseElementSnapshot— Capture element screenshots with caching
- Rspack for fast Rust-based bundling
- Oxlint and Oxfmt for type-aware linting and formatting (via Ultracite)
npx create-webflow-extension@latestThe CLI will handle scaffolding the project for you. This includes cloning the repo, installing dependencies, and initializing a git repository (if desired). For more information, see the create-webflow-extension README.
git clone -b template https://github.com/Flash-Brew-Digital/webflow-extension-starter.git
cd webflow-extension-starter
npm installThe template branch is used by the CLI to scaffold new projects. The default package manager and linter/formatter are removed plus the .github directory. If you prefer to keep those, you can clone the main branch instead.
pnpm devThis runs Rspack in watch mode and starts the Webflow extension server at localhost:1337.
- Open your Webflow workspace settings
- Navigate to Apps & Integrations → Develop
- Click Create an App and configure it accordingly
- Open a project in the Designer
- Press E to open the apps panel and launch your extension
├── src/
│ ├── hooks/
│ │ ├── useElementSnapshot.ts
│ │ ├── useSelectedElement.ts
│ │ └── useSiteInfo.ts
│ ├── app.tsx
│ ├── index.html
│ ├── index.tsx
│ ├── styles.css
│ └── types.ts
├── dist/ # Build output
├── package.json
├── tsconfig.json
├── rspack.config.js
└── webflow.json # Extension configuration
| Command | Description |
|---|---|
pnpm dev |
Start development server with hot reload |
pnpm build |
Production build |
pnpm bundle |
Build and bundle for deployment |
pnpm type-check |
Run TypeScript type checking |
pnpm check |
Run linter |
pnpm fix |
Auto-fix linting issues |
Edit webflow.json to configure your extension:
{
"name": "Your Extension Name",
"apiVersion": "2",
"size": "comfortable",
"publicDir": "dist"
}Available sizes: default (240×360), comfortable (320×460), large (800×600)
Contributions are welcome! Please read our Contributing Guide for more information.