How to Create Motion Design Specs in Figma
Motion design is often the most lost-in-translation aspect of product development. A designer envisions a smooth, purposeful animation — an element sliding into view with a slight bounce, a modal fading in while its content staggers upward. But without precise specifications, engineers implement their best guess, and the result feels generic or janky. The gap between intended motion and implemented motion is a spec problem, not a skill problem.
Figma does not natively support animation authoring, but it excels at documenting motion specifications when used deliberately. By combining static frames that show animation states, annotation layers that specify timing and easing, and prototype interactions that demonstrate the feel, you can create motion specs that engineers implement accurately on the first try. This guide shows you how to create motion documentation that bridges the design-engineering gap.
Step-by-step guide
Define your motion design principles
Before specifying individual animations, establish the motion principles that guide all animations in your product. Create a Figma page called 'Motion Principles' with 4-5 rules. Common principles: animations should be purposeful (draw attention to something important, not decorate), fast (200-400ms for most transitions), consistent (same easing for same type of motion across the product), and interruptible (animations can be cancelled by user action). Reference these principles in every motion spec.
- Create a dedicated 'Motion System' page in your design system Figma file
- Document 4-5 motion principles with examples of correct and incorrect application
- Define your standard duration scale: micro (100-150ms), small (200-300ms), medium (300-500ms), large (500-800ms)
Create a motion token library
Define reusable motion tokens that engineers can reference by name instead of raw values. Create a Figma component page documenting: duration tokens (duration-micro: 100ms, duration-small: 200ms, duration-medium: 350ms, duration-large: 500ms), easing tokens (ease-standard: cubic-bezier(0.4, 0.0, 0.2, 1), ease-enter: cubic-bezier(0.0, 0.0, 0.2, 1), ease-exit: cubic-bezier(0.4, 0.0, 1, 1), ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1)), and transform tokens (slide-up: translateY(16px), scale-in: scale(0.95)). Include a visual easing curve diagram for each token.
- Document 4-5 duration tokens with their millisecond values
- Document 4-5 easing tokens with their cubic-bezier values and visual curve diagrams
- Include a comparison chart showing when to use each easing type
Document animation states as static frames
For each animation, create a series of static frames showing the key states: Initial (before animation starts), Active (mid-animation, typically 40-60% through), and Final (where the animation ends). Arrange these frames left-to-right on a Figma frame with numbered labels. Between frames, add arrows annotated with the duration and easing token. This keyframe-style documentation gives engineers a clear picture of what changes between states.
- Create three frames per animation: Initial, Active, and Final states
- Label each frame with a step number and state name
- Add annotated arrows between frames showing duration and easing tokens
- Highlight which properties change (opacity, transform, color, size) in each transition
Specify timing and choreography with annotation layers
Create an annotation layer (a semi-transparent overlay frame) on top of your design that specifies the motion details engineers need. For each animated element, annotate: the trigger (on mount, on click, on hover, on scroll), the property being animated (opacity, translateY, scale, background-color), the start value and end value, the duration token, the easing token, and the delay (if part of a stagger sequence). For choreographed animations where multiple elements move together, add a timeline diagram showing the relative timing.
- Create annotation components with fields for trigger, property, duration, easing, and delay
- Place annotation pins on each animated element in the design
- For staggered animations, create a horizontal timeline showing when each element's animation starts and ends
- Use consistent colors: blue for timing, green for easing, red for delays
Build prototype interactions for feel validation
Static specs communicate the what but not the feel. Use Figma's prototyping features to create interactive demonstrations of key animations. Use Smart Animate between the Initial and Final state frames to approximate the motion. While Figma's Smart Animate is limited (it only supports linear easing natively), it gives stakeholders and engineers a directional sense of the intended feel. For more complex animations, record a video using After Effects or Principle and embed the link in the Figma file.
- Connect Initial and Final state frames with Smart Animate prototype interactions
- Set the prototype transition duration to match your specified duration token
- For complex animations that Figma cannot prototype, link to a video recording or CodePen demo
- Add a note clarifying which aspects of the prototype are accurate and which are approximations
Create a motion spec handoff component
Build a reusable Figma component called 'Motion Spec Card' that you attach to any frame containing animation. The card includes: Animation Name, Trigger, Elements Involved, a table of properties with their start values, end values, duration tokens, easing tokens, and delays, plus a link to the prototype interaction and any reference videos. Using a standardized component ensures every motion spec contains the same information, making engineering handoff predictable.
- Design the Motion Spec Card component with all required fields
- Add the card as a component in your design system library
- Place one card adjacent to every frame that contains animation in your designs
- Include a checkbox for 'Reduce Motion' — the alternative behavior when prefers-reduced-motion is enabled
Common mistakes
Specifying animations without considering reduced motion preferences
Accessibility standards require that animations can be disabled for users with vestibular disorders. Every motion spec must include a 'prefers-reduced-motion' alternative — typically a simple opacity fade or instant transition. If your spec does not include this, engineers either skip it or guess, creating an inconsistent accessibility experience.
Using verbal descriptions instead of precise values
Specs that say 'slides in smoothly' or 'bounces slightly' are open to interpretation. Engineers need exact values: translateY from 16px to 0px, duration 300ms, cubic-bezier(0.34, 1.56, 0.64, 1). Motion tokens make this easier by giving names to precise values, but the spec must reference those tokens explicitly.
Designing animations that are too long
Animations that feel elegant in a prototype feel sluggish in daily use. Users interact with your product hundreds of times, and a 600ms transition that felt graceful on first impression becomes annoying by the tenth encounter. Keep most transitions under 350ms and reserve longer animations for emphasis moments like onboarding celebrations or first-time reveals.
Tips
Record a Loom video walking through each motion spec in your design, explaining the intent and feel — this 2-minute investment saves hours of back-and-forth with engineering.
Create a 'Motion Audit' checklist that reviews every animation for purpose (does it communicate something?), performance (is it GPU-accelerated?), and accessibility (does it respect reduced motion?).
Use CSS custom properties that map to your Figma motion tokens so engineers reference the same names you use in specs: --duration-small: 200ms, --ease-standard: cubic-bezier(0.4, 0.0, 0.2, 1).
Keep a library of reference animations from other products (with links) that demonstrate the feel you are going for — 'like Stripe's checkout transition' communicates more than words.
How Vantage helps
Vantage connects design specifications to implementation requirements seamlessly. With Figma integration, Vantage can import motion design specs alongside static designs, ensuring that animation details are captured in generated tickets and engineers receive complete implementation guidance in a single workspace.