Framer cannot export code that runs directly in Bolt.new — its components use a proprietary runtime. The effective workflow is a design bridge: use Framer's code export and Inspect mode to extract component structure, animation parameters, and design tokens, then provide that information as context when prompting Bolt to recreate the interactions in React with Framer Motion. Screenshots of Framer prototypes also work as visual prompts in Bolt's chat.
Bring Framer Designs to Life in Bolt.new
Framer occupies a unique position among design tools — it generates real React code for its components, complete with interactions and animations powered by Framer Motion. This sounds like the perfect bridge to Bolt.new, but there is a fundamental compatibility issue: Framer's exported code depends on the Framer runtime library, proprietary component APIs, and a specific build configuration that differs from the standard Vite or Next.js projects Bolt generates. Pasting Framer's exported code into a Bolt project typically results in missing import errors and runtime failures.
The productive workflow treats Framer as a design specification tool rather than a code generator for Bolt. Framer excels at helping you prototype and communicate precise interaction details — spring physics parameters, easing curves, transition timing, hover states, and scroll-triggered animations. These values live in Framer's Inspect panel and code view as exact numbers you can copy. When you bring those numbers into Bolt prompts, the AI understands exactly what to build with Framer Motion, Tailwind CSS, and standard React state patterns.
Screenshots are surprisingly powerful in this workflow. Bolt.new's AI accepts image uploads in the chat — paste a screenshot of your Framer prototype and describe the interactions you want, and the AI generates a functional React implementation. Combine this with extracted animation values from Framer's Inspect panel for precision. This two-step approach — visual reference plus extracted parameters — produces implementations that closely match Framer prototypes without any proprietary runtime dependency.
Integration method
Framer's exported React code uses a proprietary runtime and cannot be pasted directly into Bolt.new projects. The integration is a design-to-code bridge: use Framer's Inspect panel and code view to extract design tokens, animation parameters, and component structure, then use those values as precise context when prompting Bolt to recreate the design using standard React and Framer Motion. Screenshots of Framer prototypes serve as effective visual references in Bolt's AI chat.
Prerequisites
- A Framer account with an existing design or prototype you want to bring into Bolt.new
- A Bolt.new account with a new Vite or Next.js project open
- Basic familiarity with Framer's Inspect panel (right-click any element → Inspect, or use the Inspect tab in the right sidebar)
- Framer Motion understanding is helpful but not required — Bolt's AI will generate the Framer Motion code from your descriptions
Step-by-step guide
Understand why Framer code cannot be directly pasted into Bolt.new
Understand why Framer code cannot be directly pasted into Bolt.new
Before investing time trying to copy-paste Framer's code output, understand the compatibility boundaries. Framer's code export wraps components in Framer's own component system and depends on the `framer` package — not the standalone `framer-motion` package available on npm. When you click 'Copy Code' in Framer, the output contains imports like `import { motion, addPropertyControls } from 'framer'` and references to Framer-specific APIs that have no equivalent in a standard Vite or Next.js project. Additionally, Framer components often use Framer's own layout system, breakpoint handling, and variant system. These are not compatible with Tailwind CSS's utility classes or standard React state patterns. Even when you strip the Framer-specific imports and try to replace them with `framer-motion` equivalents, you typically spend more time debugging incompatibilities than it would take to rebuild the component in Bolt from scratch. The one exception where Framer code is genuinely useful is reading it for animation parameter values. The code view shows exact spring stiffness, damping, mass, and duration values. These numbers transfer directly to Framer Motion's `transition` prop in any React project. Think of Framer's code output as a specification document, not deployable code.
Pro tip: Framer Motion (the open-source animation library) is installed separately from Framer (the design tool). In Bolt.new, you use framer-motion npm package — not Framer's proprietary runtime. These are different things despite the similar names.
Expected result: A clear understanding that the integration is a design-to-code bridge, not a direct import, and that animation values from Framer transfer accurately to Framer Motion in Bolt.new.
Extract design tokens and animation parameters from Framer's Inspect panel
Extract design tokens and animation parameters from Framer's Inspect panel
Framer's Inspect panel is where the translation begins. In Framer, right-click any element and choose Inspect, or click the Inspect tab in the right sidebar. This panel shows CSS-equivalent values for every design property: exact hex colors, font sizes in pixels, line heights, border radius values, box shadow parameters, and spacing. For animations, switch to the Code view for any component that has transitions. Look for the `transition` object in the code — it will contain values like `{ type: 'spring', stiffness: 400, damping: 30 }` or `{ duration: 0.2, ease: [0.25, 0.1, 0.25, 1] }`. Copy these values exactly — they translate directly to Framer Motion's `transition` prop with no modification. For Tailwind CSS mapping: take hex colors from Inspect and add them to your `tailwind.config.ts` as custom color values. Convert Framer's pixel font sizes to Tailwind's rem-based scale (divide by 16, then find the nearest Tailwind size). For border-radius, Framer shows values in pixels — divide by 16 for rem or use Tailwind's `rounded-` scale directly. Export assets (images, icons, SVGs) from Framer using the right-click → Export menu. Choose SVG format for icons and illustrations, PNG at 2x for photos and complex graphics. These export to standard files you can drag into Bolt.new's file tree.
1// tailwind.config.ts — example extending with Framer design tokens2import type { Config } from 'tailwindcss';34const config: Config = {5 content: ['./app/**/*.{ts,tsx}', './components/**/*.{ts,tsx}'],6 theme: {7 extend: {8 // Add colors extracted from Framer's Inspect panel9 colors: {10 brand: {11 50: '#eff6ff',12 500: '#3b82f6', // primary from Framer13 900: '#1e3a5f', // dark from Framer14 },15 accent: '#f59e0b', // accent color from Framer16 },17 // Add font sizes extracted from Framer (Framer px ÷ 16 = rem)18 fontSize: {19 'display': ['3.5rem', { lineHeight: '1.1', letterSpacing: '-0.02em' }],20 'heading': ['2rem', { lineHeight: '1.2', letterSpacing: '-0.01em' }],21 },22 // Add border radius values from Framer23 borderRadius: {24 'card': '16px',25 'button': '10px',26 },27 // Add box shadow values from Framer28 boxShadow: {29 'card': '0 4px 24px rgba(0, 0, 0, 0.08)',30 'card-hover': '0 12px 40px rgba(0, 0, 0, 0.16)',31 },32 },33 },34 plugins: [],35};3637export default config;Pro tip: Framer's color swatches in the Design panel often have descriptive names like 'Primary', 'Accent', 'Surface'. Screenshot these color names alongside their hex values — it makes your Bolt prompts more precise when you say 'use the Primary color (#3b82f6) for the CTA button'.
Expected result: A set of extracted design values — colors, typography, spacing, animation parameters — ready to use in Bolt.new prompts and tailwind.config.ts.
Translate Framer animations to Framer Motion in Bolt.new prompts
Translate Framer animations to Framer Motion in Bolt.new prompts
With animation parameters extracted from Framer, you can write precise Bolt.new prompts that produce matching interactions. Framer Motion is the underlying animation engine that Framer itself uses — so the mental model and many parameter names are identical. The difference is that Bolt.new uses the open-source `framer-motion` npm package rather than Framer's proprietary wrapper. When writing your Bolt prompt, describe the animation in three parts: the trigger (hover, scroll, page load, button click), the animated properties (opacity, translateY, scale, rotate), and the transition parameters (spring vs duration, exact stiffness/damping values from Framer Inspect). For spring animations from Framer: `{ type: 'spring', stiffness: 400, damping: 30 }` is directly usable in Framer Motion's transition prop. For tween animations: `{ duration: 0.3, ease: 'easeOut' }` or with a custom cubic bezier `{ duration: 0.3, ease: [0.25, 0.1, 0.25, 1] }`. For staggered children animations in Framer, use Framer Motion's `staggerChildren` in the parent's `variants`. Provide your screenshot of the Framer prototype alongside the extracted parameters in your Bolt chat for best results. Bolt's AI responds well to image references combined with precise numeric descriptions.
1// Example: translating a Framer spring hover animation to Framer Motion2// Framer Inspect showed: spring stiffness: 400, damping: 25, card lifts 8px34'use client';5import { motion } from 'framer-motion';67interface ProductCardProps {8 title: string;9 description: string;10 imageUrl: string;11 price: string;12}1314export function ProductCard({ title, description, imageUrl, price }: ProductCardProps) {15 return (16 <motion.div17 className="bg-white rounded-[16px] overflow-hidden shadow-card cursor-pointer"18 whileHover={{19 y: -8, // 8px lift from Framer Inspect20 boxShadow: '0 12px 40px rgba(0, 0, 0, 0.16)', // from Framer shadow-hover21 }}22 transition={{23 type: 'spring',24 stiffness: 400, // exact value from Framer code view25 damping: 25, // exact value from Framer code view26 }}27 >28 <div className="relative overflow-hidden">29 <motion.img30 src={imageUrl}31 alt={title}32 className="w-full h-48 object-cover"33 whileHover={{ scale: 1.05 }}34 transition={{ duration: 0.4, ease: [0.25, 0.1, 0.25, 1] }}35 />36 <motion.div37 className="absolute inset-0 bg-brand-900"38 initial={{ opacity: 0 }}39 whileHover={{ opacity: 0.6 }} // 60% overlay from Framer40 transition={{ duration: 0.2 }} // 200ms from Framer transition41 />42 </div>43 <div className="p-5">44 <h3 className="text-heading font-semibold text-gray-900">{title}</h3>45 <p className="text-sm text-gray-500 mt-1">{description}</p>46 <p className="text-brand-500 font-bold mt-3">{price}</p>47 </div>48 </motion.div>49 );50}Pro tip: If you cannot find spring values in Framer's code view, you can reverse-engineer them visually: Framer's 'Smooth' preset is approximately stiffness: 400, damping: 30. 'Gentle' is stiffness: 200, damping: 25. 'Bouncy' is stiffness: 600, damping: 15.
Expected result: A React component in Bolt.new that visually matches the Framer prototype's hover animation with matching spring physics and timing.
Use Framer screenshots as visual prompts in Bolt's AI chat
Use Framer screenshots as visual prompts in Bolt's AI chat
Screenshots are one of the most effective ways to communicate design intent to Bolt's AI. Bolt.new supports image uploads directly in the chat interface — click the image icon or drag a screenshot into the chat input. The AI analyzes the visual composition and generates React code that approximates the layout, colors, and component structure. For best results with Framer screenshots: capture the component or page section in Framer's Preview mode (Cmd+P or the play button) at full resolution. Include all the visible states you want to implement — rest state, hover state, and active state side by side if possible. Framer's Presentation mode shows clean previews without the editor chrome, which gives the AI a cleaner reference. Combine the screenshot with a detailed text description in the same Bolt chat message. Describe what is animated, the trigger, and any numeric values you extracted from Inspect. For example: 'This card (screenshot attached) animates on hover — it lifts 8px with a spring (stiffness 400, damping 25), and an overlay fades in at 60% opacity over 200ms. Recreate this in React with framer-motion and Tailwind, using the colors from the screenshot.' For complex multi-step animations in Framer (scroll-triggered reveals, page transitions, gesture-based interactions), break them into individual components and prompt Bolt for each one separately. Trying to describe all interactions in a single prompt often results in incomplete implementations — iterative prompts produce better results.
Pro tip: Framer's Share button generates a public preview link. You can share this link with collaborators who want to reference the prototype while prompting Bolt. You can also open the Framer share URL in a separate browser tab and screenshot from there to avoid capturing editor UI elements.
Expected result: Bolt generates a React component that closely matches the Framer prototype's visual design, providing a strong starting point for further refinement.
Know when to rebuild versus when to spend time on the Framer bridge workflow
Know when to rebuild versus when to spend time on the Framer bridge workflow
The Framer-to-Bolt bridge workflow is most valuable for complex, custom interactions that would take many iterations to specify purely in text — hover effects, scroll animations, page transitions, and gesture-driven interfaces. For these cases, the visual reference of a Framer screenshot plus extracted animation parameters saves significant back-and-forth with Bolt's AI. But for simpler UI elements — basic cards, navigation bars, forms, data tables, standard modals — rebuilding directly in Bolt is usually faster than going through Framer. Bolt's AI generates standard Tailwind and shadcn/ui components well without visual reference, and these components often look better in the final app than a Framer design that was not optimized for the constraints of Tailwind's utility-class system. A practical decision rule: use the Framer bridge for any animation that cannot be described in a single sentence, any layout involving precise spacing that matters visually (hero sections, marketing pages), and any color/typography system your team has invested significant design effort in. Rebuild directly in Bolt for functional UI — forms, tables, CRUD interfaces, dashboards with standard chart types. Bolt.new's WebContainer development environment is excellent for iterating on UI — the hot module replacement gives near-instant feedback. Once you establish the design system (colors, typography, component library) from your Framer tokens, subsequent screens in Bolt build much faster because the AI learns the patterns from your existing components in context.
Pro tip: Create a design-system.md file in your Bolt project root that documents your Framer design tokens — colors, font sizes, animation presets. Reference it in Bolt chat prompts with '@design-system.md use these colors and animations'. Bolt's AI uses it as persistent context for all subsequent prompts.
Expected result: A clear decision framework for when to use the Framer bridge workflow versus rebuilding directly in Bolt, and a design token reference that accelerates all future Bolt prompts in the project.
Common use cases
Recreate a Framer Hero Section with Scroll Animation
You have designed a landing page hero in Framer with a fade-in headline, a spring-animated call-to-action button, and a parallax background effect on scroll. Use Framer's Inspect panel to extract the animation timing and spring values, then prompt Bolt to implement the same interaction with Framer Motion and React.
Copy this prompt to try it in Bolt.new
Translate a Framer Card Hover Interaction to React
A product card in Framer has a precise hover animation: the card lifts 8px, the shadow deepens, and an overlay fades in at 60% opacity over 200ms with a custom easing curve. Extract these values from Framer's code view and use them to build the exact same hover behavior in a Bolt.new React component.
Copy this prompt to try it in Bolt.new
Convert Framer Design Tokens to a Tailwind Theme
Your Framer project has a defined color palette, typography scale, and spacing system. Extract these design tokens from Framer's Design panel and use them to configure a custom Tailwind CSS theme in your Bolt.new project, ensuring visual consistency between the Framer prototype and the production Bolt app.
Copy this prompt to try it in Bolt.new
Troubleshooting
Pasting Framer's exported code into Bolt.new causes 'Could not find module framer' or similar import errors
Cause: Framer's exported code imports from the 'framer' package (Framer's proprietary runtime), not from 'framer-motion' (the open-source library). These are different packages with different APIs, and the Framer package is not available on npm for use outside of Framer projects.
Solution: Do not attempt to use Framer's exported code directly. Instead, extract only the animation parameter values (spring stiffness, damping, duration, easing) from the code view and use those values in Framer Motion syntax in your Bolt.new component. Install framer-motion via npm in Bolt and rewrite the component using standard React patterns.
1// In Bolt.new terminal or package.json, install the open-source library:2// npm install framer-motion34// Then use it with values from Framer Inspect:5import { motion } from 'framer-motion'; // framer-motion, not framer67<motion.div8 whileHover={{ y: -8, scale: 1.02 }}9 transition={{ type: 'spring', stiffness: 400, damping: 30 }}10/>Bolt generated a component from my screenshot but the colors and fonts look wrong
Cause: Bolt's AI interprets screenshot colors visually and may not match your exact hex values, especially for subtle brand colors that look similar at screen resolution. Font rendering also varies between Framer's preview and the browser.
Solution: After the initial screenshot-based generation, follow up with a specific color correction prompt. List your exact hex colors from Framer Inspect and specify which elements should use which color. For fonts, add the Google Font import or custom font files to your Bolt project and specify the exact font family name in the follow-up prompt.
Framer Motion animations are choppy or jumpy in Bolt's WebContainer preview
Cause: WebContainers run in a browser tab with shared system resources. Heavy animations competing with the WebContainer's Node.js processes can cause frame drops in the preview. This is a development environment limitation, not a bug in the code.
Solution: Test animations in a deployed version (click Deploy → Netlify or Bolt Cloud) to see true performance. In the preview, you can also reduce browser load by closing other tabs. Ensure animations use transform and opacity properties — these are GPU-composited and perform better than animating layout properties like width, height, or margin.
1// Prefer GPU-composited properties for smooth animations2// GOOD - GPU composited:3<motion.div whileHover={{ scale: 1.05, opacity: 0.9 }} />45// AVOID - triggers layout reflow:6<motion.div whileHover={{ width: '110%', marginTop: '-8px' }} />78// Use y for vertical movement (translateY) instead of marginTop/top:9<motion.div whileHover={{ y: -8 }} /> // smooth10<motion.div whileHover={{ top: '-8px' }} /> // causes layout reflowBest practices
- Treat Framer's code export as a specification document for animation values, not as deployable code — copy the numbers, not the code
- Always test your Framer-inspired animations on the deployed Netlify or Bolt Cloud URL, not just the WebContainer preview, to assess true rendering performance
- Create a single animation constants file in your Bolt project that lists your Framer spring presets as named exports — use them consistently across all animated components
- When screenshotting Framer prototypes for Bolt prompts, capture in Presentation mode (Cmd+P) to remove editor UI chrome and give the AI a cleaner visual reference
- For design systems with more than 5 custom colors, create a tailwind.config.ts with all Framer design tokens before building any components — Bolt's AI will use the config when generating components
- Prefer framer-motion's variants system for multi-state animations rather than multiple separate whileHover/whileTap props — it is cleaner and closer to how Framer organizes states
- For scroll-triggered animations that Framer previews with ScrollOffset, use framer-motion's useInView hook or Intersection Observer in Bolt — the behavior is equivalent
Alternatives
Figma has a dedicated Dev Mode with CSS inspection and is more widely used in development teams — Bolt's AI handles Figma screenshots and design specs extremely well, often better than Framer due to Figma's simpler component model.
Sketch is macOS-only and widely used for existing design files — its Inspect mode provides CSS values that map cleanly to Tailwind, making it a reliable design reference for Bolt prompts.
Adobe XD's Design Specs feature shares exact measurements and colors for implementation — useful for teams still using the XD ecosystem before migrating to Figma.
Zeplin specializes in developer handoff with auto-generated style guides and component specs — better suited than Framer for teams that need structured CSS property exports for Bolt prompts.
Frequently asked questions
Can I import Framer components directly into a Bolt.new project?
No. Framer's exported components depend on Framer's proprietary runtime library and cannot be used in standard React projects. The correct approach is to extract animation parameters and design values from Framer's Inspect panel, then use those values in Framer Motion syntax when prompting Bolt to build equivalent components.
Does Bolt.new support Framer Motion (the npm library)?
Yes. Framer Motion is an open-source npm package that installs and runs in Bolt.new's WebContainer without any issues. Simply tell Bolt 'install framer-motion and use it for animations' — Bolt will install the package and generate animation code using the standard Framer Motion API. Note that framer-motion (open-source library) is different from Framer (the design tool's proprietary runtime).
How do I share my Framer prototype with Bolt.new?
The most effective methods are: (1) screenshot the Framer prototype in Presentation mode and attach the screenshot to your Bolt chat message, (2) extract design token values from Framer's Inspect panel and include them as text in your prompt, or (3) use Framer's Share button to generate a public link and paste that URL in Bolt chat for the AI to reference. Direct file import of .framer project files is not supported.
Can Bolt.new replicate Framer's scroll-triggered animations?
Yes. Framer Motion provides a useInView hook and the whileInView prop that trigger animations when elements enter the viewport — functionally equivalent to Framer's scroll-triggered interactions. For scroll-linked animations (where the animation progress follows scroll position), use Framer Motion's useScroll and useTransform hooks. Describe the scroll trigger behavior in your Bolt prompt and the AI will generate the appropriate Framer Motion code.
Is this workflow blocked by Bolt.new's WebContainer limitations?
No. The Framer-to-Bolt design bridge is entirely a frontend workflow — Framer Motion animations run in the browser without any server-side code, file system, or network calls. WebContainer limitations (no TCP sockets, no native modules, ephemeral storage) do not affect CSS animations or Framer Motion animations in any way.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation