Agent-readable docs index: /llms.txt. Download /docs.zip to grep all markdown files locally.

[email protected]

  1. Fixed React hydration errors in exported components — added suppressHydrationWarning to all generated JSX elements so server-rendered Framer components no longer produce hydration mismatch warnings. The babel plugin correctly skips React.Fragment (which only accepts key and children)
  2. Fixed hydration tree structure mismatch with withCSS — the server rendered Fragment > [style, Component] but the client rendered just Component, shifting every child position and breaking React Aria ID generation (e.g. HeroUI Tabs). Server and client now render the same tree shape
  3. Fixed breakpoint hydration mismatchWithFramerBreakpoints was reading window.innerWidth during hydration, causing the client to render fewer variants than the server. Now returns empty string consistently during hydration
  4. Fixed production builds crashing on unsafe Framer color tokens — color style values containing CSS-structural characters (;, {, }) broke the generated styles.css by closing the :root {} block early. Vite's lightningcss minifier rejected the invalid CSS. Unsafe tokens are now filtered out with a warning
  5. Fixed missing styles.css when a single component type extraction fails — a single component failure now logs and continues instead of aborting the entire build
  6. Removed spiceflow dependency — replaced the generated API client with a single inline fetch() call, removing ~1200 lines of generated code
  7. Updated bundled Framer runtime — refreshed to latest [email protected] with suppressHydrationWarning applied to all JSX elements in the runtime

[email protected]

  1. Updated bundled Framer runtime — refreshed the packaged Framer internals to [email protected] with the latest runtime code and framer-motion assets
  2. Fixed exporter and TypeScript modules pulling in the full framer.js runtimeexporter.ts and typescript.ts imported ControlType, ControlDescription, and PropertyControls directly from framer.js, dragging in the full 360KB runtime plus all framer-chunks at bundle time. These now import from a standalone framer-types.ts module, avoiding the framer.js dependency entirely
  3. Fixed old framer-chunks accumulating across runtime updates — the download script never cleaned the framer-chunks/ directory before writing new content-hashed chunks, causing old files to pile up across runs
npm package size reduced by 90% — from 196 MB unpacked (15 MB tarball) down to 18.8 MB unpacked (2.6 MB tarball), and from 468 files to 357. The bloat came from old framer-chunks never being cleaned between runtime updates.

[email protected]

  1. Fixed --external flag silently failing — the --external CLI flag was parsed as an empty string when used without a package name, but the code only checked for true. This meant npm dependencies were always fetched from esm.sh and bundled instead of externalized, causing ERR_MODULE_NOT_FOUND errors during type extraction. Now --external correctly externalizes all npm packages:
    # Externalize all npm deps (now works correctly) unframer <projectId> --external # Externalize a specific package unframer <projectId> --external react
  2. Fixed duplicate import errors when a component appears multiple times on a page — when the same Framer component was used more than once on the index page (e.g. image-3 appearing twice), the generated example code emitted duplicate import statements with the same identifier, causing vite/rolldown to fail with Identifier has already been declared. Imports are now deduplicated while keeping all JSX usages intact.
  3. Updated bundled Framer runtime — refreshed the packaged Framer internals to the latest version, including new shader features (mouse input uniforms, feedback loops, heightmap generation) and font metadata updates.

[email protected]

  1. Fixed duplicate import identifiers in generated example code — projects with components that share the same leaf name in different folders no longer get broken sample apps with redeclared imports. Parent folders are only folded into the generated identifier when a collision actually exists, so stable component names stay unchanged for non-conflicting components.
import CardWorkCardFramerComponent from './src/framer/card/work-card' import CardsWorkCardFramerComponent from './src/framer/cards/work-card'
  1. Updated bundled Framer runtime — refreshed the packaged [email protected] and Framer Motion runtime assets, including the latest bundled Google font metadata used during component exports.

[email protected]

  1. Fixed crash when esm.sh returns a relative redirect URL — packages like ogl that redirect to a relative path (e.g. /[email protected]/src/index.js) no longer cause TypeError: Failed to parse URL. The redirect is now resolved against the original request URL before following.

[email protected]

  1. Fixed @font-face breaking with font names containing apostrophes — font names like "Suisse Int'l Thin" were wrapped in single quotes, producing invalid CSS (font-family: 'Suisse Int'l Thin'). The declaration is now wrapped in double quotes so apostrophes in font names don't terminate the string.

[email protected]

  1. Updated bundled Framer runtime — updated to [email protected] with latest Framer internals
  2. Fixed duplicate CSS variable declarations — when multiple Framer color tokens share the same user-facing name (e.g. two tokens both named black with different UUIDs), the generated CSS no longer emits duplicate --unframer-* declarations that silently overwrite each other
  3. Fixed broken font unicode-range subsetting@font-face blocks were emitting unicodeRange: (camelCase) instead of the valid unicode-range: CSS property; browsers silently ignored it, so font subsetting was completely broken for all generated components
  4. Fixed crash in TypeScript type inferencetypescriptType() no longer throws Cannot read properties of undefined (reading 'type') when a ControlType.Array or ControlType.Object control has an undefined nested control entry

[email protected]

  1. Fixed unframer mcp crash on Node 22 — server-api mode no longer throws ERR_UNKNOWN_FILE_EXTENSION at startup. The handler code previously imported from unframer/src/typescript and unframer/src/compat which resolve to raw .ts files that Node 22 refuses to load. These are now exported from the main unframer entry point.
  2. Fixed missing runtime dependencies in server-api modehtmlparser2, dom-serializer, camelcase, and sema4 are now declared as dependencies so they are available when unframer mcp runs handler code in-process.

[email protected]

  1. Fixed server-api mode crash on startupunframer mcp in server-api mode no longer throws ERR_MODULE_NOT_FOUND for framer-plugin when running headless. The handler module now correctly resolves imports through the framer-api server shim.
  2. Updated bundled Framer runtime — latest Framer internals with new Google font chunks.

[email protected]

Server API mode — headless MCP without Framer open
unframer mcp login now lets you choose between two modes:
  • Plugin mode (default): requires Framer open with the MCP plugin running
  • Server API mode: headless, no browser needed — uses framer-api with a Framer API key + project URL
unframer mcp login # → select "Server API" → enter API key + project URL
Pass --project <url> on any command to use server-api for a single invocation, even if logged in with plugin mode:
unframer mcp getProjectXml --project https://framer.com/projects/MyProject--abc123
UNFRAMER_MCP_URL env var — override the saved MCP URL without touching ~/.unframer/config.json, useful for CI/CD:
UNFRAMER_MCP_URL="https://mcp.unframer.co/mcp?id=...&secret=..." unframer mcp getProjectXml
Other changes
  • Migrated CLI framework from @xmorse/cac to goke
  • Removed mcp skill command — unframer --help now shows all MCP commands
  • API key prompt now shows * mask characters while typing
  • Updated to latest Framer runtime

[email protected]

Patch Changes

  • Add mcp skill command to show detailed help for all MCP commands
  • Extract mcp-to-cli into separate mcpcac package
  • Improve MCP login description with better instructions
  • Update to latest Framer runtime

[email protected]

Minor Changes

  • MCP CLI support: Use unframer as a command-line client for the Framer MCP plugin
    • Run unframer mcp login to connect to your Framer MCP server
    • All MCP tools become available as CLI commands (e.g., unframer mcp getNodeXml, unframer mcp updateXmlForNode, unframer mcp getProjectXml)
    • Tools are cached for 1 hour for fast subsequent calls
    • Session ID is cached to skip MCP initialization handshake

Patch Changes

  • Update to latest Framer runtime

[email protected]

Patch Changes

  • Reduce npm package size from 20MB to 10.5MB by excluding duplicate src/framer-chunks folder

[email protected]

Patch Changes

  • Add subscription link for buying

[email protected]

Patch Changes

[email protected]

Patch Changes

  • make package manager install always work when creating example app

[email protected]

Patch Changes

  • Install the same npm packages versions as Framer

[email protected]

Patch Changes

[email protected]

Patch Changes

  • Add generateStackblitzFiles export to generate Vite + React + TypeScript project files for StackBlitz integration
  • Add new example-app CLI command to create a complete example application with Framer components:
    unframer example-app <projectId> --outDir my-app
    This command creates a ready-to-use Vite + React + TypeScript app with all your Framer components and runs npm install automatically

[email protected]

Patch Changes

  • fa766bc: Update to latest Framer runtime, [email protected], framer-motion@
  • Better generated example code

[email protected]

Minor Changes

  • c573978: Disable automatic meta.json generation by default
    The meta.json file is now only generated when the --metafile flag is passed to the CLI. This reduces unnecessary file generation for users who don't need build metadata.
    Usage:
    # Without meta.json (default) npx unframer <projectId> # With meta.json npx unframer <projectId> --metafile

Patch Changes

[email protected]

Minor Changes

  • b71744b: Add support for exporting React components via MCP. Install the MCP Framer plugin and you can use Claude Code to export your React Components

Patch Changes

  • 8745fbd: Update to latest Framer runtime, [email protected], framer-motion@
  • fix hydration warnings in Resposive caused by useSyncExternalStore

[email protected]

Patch Changes

  • Optimize watch mode: only regenerate types for changed components, using file hash caching

[email protected]

Patch Changes

  • use :where to decrease specificity of reset css

[email protected]

Patch Changes

  • 97ab7bb: Update to latest Framer runtime, [email protected], framer-motion@
  • Put common styles in unframer .css instead of generated code. Makes css used by apps with many projects smaller

[email protected]

Patch Changes

  • Fix imports of chunks for the first generation

[email protected]

Patch Changes

  • Apply new defaults to --jsx and --external

[email protected]

Major Changes

  • Set --jsx to true by default, output files will be converted to jsx
  • HMR for exported files should now work much better, you should no longer see the page reloading when running a dev server and running the unframer command
  • Remove the need for .d.ts files
  • Set --external by default, npm packages will be installed locally if you have a local package.json file and a package manager
  • Run formatter on the output files
  • React 19 is now required
  • Errors during types generation are now logged without need for --debug
  • React Preconnect hints for common Framer CDN urls
  • Removed the .cursorignore default output file

Patch Changes

[email protected]

Patch Changes

  • Fix --jsx option with array jsx attributes

[email protected]

Patch Changes

  • 3661c24: Update to latest Framer runtime, [email protected], framer-motion@
  • Fix --jsx option for jsx attributes

[email protected]

Minor Changes

  • Make .Responsive components much faster, delete them before React hydration

Patch Changes

[email protected]

Minor Changes

  • 0ca1aba: Added preconnect hints for faster Framer CDN connection
  • 3aa69a9: Add http caching on disk for faster regeneration, debloat dependencies

Patch Changes

  • 3661c24: Update to latest Framer runtime, [email protected], framer-motion@
  • Update framer-motion package types, fix jsx generation for multiple children in jsx with container expression

[email protected]

Patch Changes

  • 7c6a488: Update to latest Framer runtime, [email protected], framer-motion@
  • Add rate limit for fetch, fix giant projects

[email protected]

Patch Changes

  • Include web page color in example code

[email protected]

Patch Changes

  • 7980bbf: fix unframer reset css

[email protected]

Patch Changes

  • Apply Framer reset css only to Framer components, not other elements without .unframer class

[email protected]

Patch Changes

[email protected]

Minor Changes

  • Update reset css with same styles as Framer websites

[email protected]

Patch Changes

[email protected]

Patch Changes

  • Use spinner again for logs

[email protected]

Patch Changes

  • Make sure the cli always logs the progress, remove use of nanospinner, use undici with a single TCP connection

[email protected]

Patch Changes

  • d8c3742: Update framer to 2.4.1, update framer motion to 11.11.7
  • Add Sentry error reporting during generation

[email protected]

Patch Changes

  • Handle components without names

[email protected]

Patch Changes

  • 0e0d79f: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Minor Changes

  • 50dc9be: Allow passing locale in unframer provider, easier than passing it to each component as a locale prop

Patch Changes

  • 4892ee3: Update framer to 2.4.1, update framer motion to 11.11.7
  • 923c160: Remove hydration warnings for SVGs and fetchpriority attribute
  • 923c160: Simpify generated example after generation

[email protected]

Minor Changes

  • a24de4c: Add support for client navigation with UnframerProvider

Patch Changes

  • f21f5d1: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Patch Changes

  • 5ffce9f: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Minor Changes

  • d84d7d5: Use node-fetch instead of native fetch, fix Stackblitz usage, a bit faster too

[email protected]

Minor Changes

  • 71649cb: Added Stackblitz support, fixing \" bug in Stackblitz

[email protected]

Patch Changes

[email protected]

Patch Changes

  • 004d437: Fix debug framer version showing up, fix missing key in .map

[email protected]

Minor Changes

  • 2004dee: Decrease runtime bundle size, split dynamic imports into submodules, giant files for fonts are no longer embedded in the runtime

Patch Changes

  • 8268b5f: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Minor Changes

  • c4fed97: Add support for Astro client router, reset global Framer state on client navigations

Patch Changes

  • 12218a8: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Patch Changes

  • e6a05bb: Make unframer work with Node 18, fix --loader bugs

[email protected]

Patch Changes

  • 76cd8e6: Disable custom withCSS

[email protected]

Patch Changes

  • d32e80d: Fix SVG elements not showing up because of withCSS change

[email protected]

Patch Changes

  • f11be35: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Patch Changes

  • b7f1411: Update framer to 2.4.1, update framer motion to 11.11.7
  • f715183: Add patch to make Framer navigator work with Node 22

[email protected]

Minor Changes

  • 4150d97: Add support for Astro client:visible, previously was not working because Responsive components rendered display: contents children

Patch Changes

  • 578cf67: Restore windows support for type generation

[email protected]

Patch Changes

  • 48aa28f: add node polyfill plugin

[email protected]

Minor Changes

  • 1c62916: Skip formatting outputs

Patch Changes

  • f5d58f1: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Patch Changes

  • b0e3932: Fix types generation in windows because of --loader abs path

[email protected]

Patch Changes

  • c3b66cc: Fix windows types generation

[email protected]

Minor Changes

  • 55ed540: Make variants prop in Responsive component optional, guess the variants breakpoints thanks to the plugin

[email protected]

Patch Changes

  • 3c954b6: Update framer to 2.4.1, update framer motion to 11.11.7
  • 4416809: Fix types generation on windows, requires using file://

[email protected]

Minor Changes

  • 5fcb81e: Add .cursorrules file to ignore js fiels

Patch Changes

  • 7c13502: Update framer to 2.4.1, update framer motion to 11.11.7
  • ad85276: Mark all esm.sh dependencies as externals to prevent duplicating react

[email protected]

Minor Changes

  • f71d9db: Added --external arg to externalize npm packages

[email protected]

Minor Changes

  • 84392a2: Add --unframer prefixed CSS variables, to be reused with Tawilwind

[email protected]

Minor Changes

  • 9c26943: Make links work in Unframer, by overriding Framer Router component and context

Patch Changes

  • de3e355: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Patch Changes

  • 31a7eb0: Update framer to 2.4.1, update framer motion to 11.11.7
  • a4eb747: Removed a log

[email protected]

Patch Changes

  • 524e5c4: update spiceflow dep

[email protected]

Minor Changes

  • c362e9f: Add --watch, to rebuild the files on Framer website publish changes, fix commonjs issues

[email protected]

Patch Changes

  • 9f6f501: Update framer to 2.4.1, update framer motion to 11.11.7

[email protected]

Patch Changes

  • 875c212: Update framer to 2.4.1, update framer motion to 11.0.11-sync.5
  • c693f54: Add package.json export

[email protected]

Patch Changes

  • 23c8d91: Update framer to 2.4.1, update framer motion to 11.0.11-sync.5

[email protected]

Patch Changes

  • 3301e77: Update framer to 2.4.1, update framer motion to 11.0.7

[email protected]

Patch Changes

  • 7615df6: Update framer to 2.4.1, update framer motion to 11.0.7
  • e5cc18b: Remove postinstall script

[email protected]

Minor Changes

  • 9ddc21d: Fix .json files in components
  • 72602a7: Added --watch option to watch for Framer or config changes

Patch Changes

  • 4537169: remove additional LayoutGroup component, use the one already inside the Fremer component

[email protected]

Patch Changes

  • eddf196: Update framer to 2.4.1, update framer motion to 11.0.7
This changelog is generated automatically from the GitHub releases page.