v2.4.1 · Updated Feb 2026
CLI + Full Spec

Read the Full Spec Online →
50+
Framer projects migrated
100%
Framework agnostic output
< 5m
Avg extraction time
SOC 2
Audit-ready output
Component Extraction
Interaction Maps
CMS Schema Binding
Breakpoint Logic
Asset Pipeline
Deploy Config
Framework Agnostic
SOC 2 Ready
Component Extraction
Interaction Maps
CMS Schema Binding
Breakpoint Logic
Asset Pipeline
Deploy Config
Framework Agnostic
SOC 2 Ready
Section 1 of 5 · Component Extraction

Component Trees,
fully labeled.

Every Smart Component, Canvas Component, and CMS-bound element gets mapped to its React equivalent — props typed, variants enumerated, overrides flagged.

Read the Full Spec Online →
Component Tree · Extracted
Page RootNavBarHeroBlockCardGridLogoLinkListRichTextButtonCardCard
Component Inventory · 6 of 247 shownfrm extract --components
ComponentTypePropsVariantsOverridesFramer API Used
NavBarSmart124yesuseScroll · useMotionValue
HeroBlockCanvas86yesmotion.div · AnimatePresence
CardGridCMS62nouseCMS · framer-motion
ModalSmart93yesuseAnimation · Variants
RichTextStatic41nonone
FormBlockSmart112yesuseForm (internal)
Framer Output (generated)
// NavBar.framer.tsx — DO NOT EDIT
import { motion } from "framer-motion";
import { useScroll } from "framer";
import { addPropertyControls } from "framer";

export function NavBar(props) {
  const { scrollYProgress } = useScroll()
  // 847 lines of generated code...
  addPropertyControls(NavBar, {
    _id: { type: ControlType.String },
    __framer_: { type: ControlType.String },
  })
}
Extracted Output (clean)
// NavBar.tsx — portable, typed
import { useState } from "react";
import { useForm } from 'react-hook-form';



interface NavBarProps {
  logo: string
  links: NavLink[]
  sticky?: boolean
  theme?: "light" | "dark"
}

export function NavBar({
  logo, links, sticky = true, theme
}: NavBarProps) {
  const [scrolled, setScrolled] = useState(false)
  // 42 lines of clean code
}
Section 2 of 5 · Interaction Extraction

State machines,
not black boxes.

Every Framer interaction is a hidden state machine. The CLI surfaces triggers, targets, state variables, and the exact handler signatures — ready to drop into React, Vue, or vanilla JS.

Read the Full Spec Online →
State Machine · Modal Interaction
idleopeningopenclosingonClickonAnimCompleteonClose
Interaction Map · 6 of 89 shownfrm extract --interactions
TriggerTargetActionState VariableHandler Name
onClickModalopenisOpenhandleModalOpen
onHoverCardGridscale(1.04)hoveredIdhandleCardHover
onScrollNavBarbg-opacityscrollYuseScrollEffect
onTapAccordionexpandopenIndexhandleAccordion
onDragEndCarouselsnapactiveSlidehandleDragSnap
onAnimCompleteHeroBlockunlock CTAheroPlayedonAnimationComplete
Framer (locked)
// Framer internal state binding
const [variant, setVariant] = 
  useVariantState({
    component: "NavBar",
    defaultVariant: "Default",
    enabledGestures: {
      Default: ["hover", "tap"]
    }
  })
// Opaque. Non-transferable.
Extracted (portable)
// Clean state — any framework
const [isHovered, setIsHovered] = 
  useState(false)
const [isTapped, setIsTapped] = 
  useState(false)

// Typed. Documented. Yours.
// Works in React, Vue, Svelte, Astro
Section 3 of 5 · CMS Schema Extraction

CMS bindings,
schema-first.

Framer's CMS is a closed database. The CLI reads every collection schema, field type, and component binding — then exports a portable JSON schema compatible with Contentful, Sanity, Airtable, or a flat-file MDX pipeline.

Output Schema Sample
{
  "collection": "blog-posts",
  "fields": {
    "title":    { "type": "string",    "required": true },
    "slug":     { "type": "slug",      "source": "title" },
    "body":     { "type": "rich-text", "format": "MDX" },
    "coverImg": { "type": "image",     "cdn": "framer-cdn" }
  }
}
Read the Full Spec Online →
CMS Dependency Graph · 34 Collections
FramerCMSBlogTeamProductsEventsCasesQuotes
CMS Schema Map · 6 of 34 collectionsfrm extract --cms --schema
CollectionFieldsBindingsContent TypeExport TargetStatus
Blog Posts128rich-textMDX / JSONmapped
Team Members75image+textJSON / Contentfulmapped
Case Studies1814nestedJSON / Sanityreview
Products2219e-commerceJSON / Shopifymapped
Testimonials54simpleJSONmapped
Events97date+mediaJSON / Airtablereview
Section 4 of 5 · Breakpoint & Asset Extraction

Responsive logic,
every override.

Framer stores breakpoint overrides as invisible property deltas. The CLI diffs every viewport, surfaces hidden elements, size overrides, and layout shifts — then emits clean CSS media queries or Tailwind config.

Read the Full Spec Online →
Viewport Diff · 5 Breakpoints
Desktop34 Δ
Laptop28 Δ
Tablet51 Δ
Mobile L67 Δ
Mobile S72 Δ
Breakpoint Logic · 5 Viewportsfrm extract --breakpoints
ViewportRangeComponentsOverridesHiddenCSS Output
Desktop≥ 1280px2473412@media (min-width: 1280px)
Laptop≥ 1024px247288@media (min-width: 1024px)
Tablet≥ 768px2475119@media (min-width: 768px)
Mobile L≥ 390px2476731@media (min-width: 390px)
Mobile S< 390px2477238@media (max-width: 389px)
Asset Manifest · 6 of 1,200+ shownfrm extract --assets
FilenameSizeTypeCDN OriginPortable
hero-bg.webp340 KBimageframer-cdnyes
logo-full.svg4.2 KBvectorframer-cdnyes
team-photo-01.jpg128 KBimageframer-cdnyes
custom-font.woff272 KBfontframer-cdnyes
product-3d.glb1.8 MB3dframer-cdnreview
bg-video.mp44.1 MBvideoframer-cdnreview
Section 5 of 5 · Deploy Configuration

Full surface area.
Nothing left inside.

The last thing Framer hides is its deploy config — API keys, project IDs, CMS endpoints, custom domain bindings. The CLI extracts all 18 environment variables, maps them to portable equivalents, and generates a framework-specific scaffold.

Deploy Target
Next.jsRecommended
frm deploy --target nextjs
Astro
frm deploy --target astro
Remix
frm deploy --target remix
Vanilla
frm deploy --target html
Read the Full Spec Online →
terminal — frm extract --all
$ frm extract --all --target nextjs
✓ Authenticated · project abc123xyz
→ Scanning component tree…
✓ 247 components mapped
→ Extracting interactions…
✓ 89 handlers extracted
→ Exporting CMS schema…
✓ 34 collections → JSON
→ Resolving breakpoints…
✓ 5 viewports · 252 overrides
→ Downloading asset manifest…
✓ 1,247 assets indexed
→ Generating deploy config…
✓ 18 env vars mapped
─────────────────────────
✓ Extraction complete · 4m 32s
Output: ./frm-output/nextjs/
Environment Variables · 6 of 18 shownfrm extract --config
VariableValueCategoryPortable Target
FRAMER_PROJECT_IDabc123xyzauthENV file / CI secret
FRAMER_API_KEY••••••••••authENV file / CI secret
NEXT_PUBLIC_SITE_URLmysite.framer.approutingVercel / Netlify env
CMS_COLLECTION_IDcol_blog_01cmsContentful / Sanity
CUSTOM_DOMAINbrand.comroutingDNS + CDN config
ANALYTICS_SCRIPTga4://G-XXXXtrackingnext/script inject
Ready to extract

Every screw labeled.
Every cable color-coded.

You've seen what the CLI extracts. 247 components, 89 interactions, 34 CMS collections, 5 viewports, 1,200 assets, 18 config variables. Nothing stays inside Framer.

Read the Full Spec Online →