Taps, hovers, screen transitions — your Adobe XD prototype keeps running in Figma!
The prototype you put together in XD — screen transitions, overlays, hover effects, button pressed states. Recreating all of that in Figma by hand is arguably more tedious than rebuilding the designs themselves. (For the “structural” side of conversion, see “Faithfully recreate your XD components — drop them straight into Figma!” and “Skip the XD-stack rebuild — drop your layouts straight into Figma Auto Layout!” as well!)
As your screen count grows, the number of connections grows exponentially. For a 100-screen app you’ve already got several hundred arrows — and somewhere along the way one gets missed 😇
Pixel Fine Converter restores your XD prototype connections as Figma prototype flows! On top of that, XD component states (hover, pressed, etc.) are converted as interactive switches between Figma Variants, so your prototype actually runs in Figma once conversion is done. Our goal is: hit the preview button right after conversion, and the motion you built in XD just plays 🎬
Note: Prototype conversion is a Pro plan ($29, one-time purchase) feature. The plugin itself is free to install, and the Free plan still handles structure, styles, groups, and other basic conversions.
📋 Interactions the conversion reproduces
🖱️ Triggers
User-operation triggers set in XD are mapped to their Figma equivalents:
| XD trigger | Figma trigger | Use |
|---|---|---|
| Tap | ON_CLICK | Button / link click or tap |
| Hover | ON_HOVER | Mouse-over effects |
| Drag | ON_DRAG | Swipe or drag interactions |
🎯 Navigation
The navigation types that follow the trigger — “what happens next” — are converted to the corresponding Figma actions:
| XD navigation | Figma action | Description |
|---|---|---|
| Screen transition | NAVIGATE | Move to a different artboard (screen) |
| Overlay | OVERLAY | Modal or popover display |
| Back | BACK | Return to the previous screen (no destination needed) |
| Auto-Animate | SMART_ANIMATE | XD property interpolation → Figma Smart Animate |
| Scroll to | SCROLL_TO | Scroll to a specific position inside a frame |
| Change state | CHANGE_TO | Switch component variants (paired with state conversion) |
🎞️ Transitions & easing
Animation effects attached to screen transitions are also converted:
| XD transition | Figma transition |
|---|---|
| Dissolve | DISSOLVE |
| Slide (left / right / up / down) | SLIDE_IN + direction |
| Push | PUSH + direction |
| None | Immediate transition (no animation) |
Easing curves (ease-out / ease-in / ease-in-out / linear) and duration (in seconds) carry over as well. Fine-grained “smoothness” tuning is preserved, so the feel of the motion you crafted in XD comes along with it 🎉
🔁 States to Variants
XD lets you attach “states” to components — Default, Hover, Pressed, Disabled — so you can switch between them inside a single component.
Figma doesn’t have the “state” concept per se, but you can express the same structure with Variants inside a Component Set. Pixel Fine Converter maps them like this:
| XD | Figma |
|---|---|
| Component + state set | Component Set (variant properties like State=Default, State=Hover, etc.) |
| State change interaction | CHANGE_TO action (switch between variants) |
| Default state | State=Default variant (generated from the master) |
Linked with prototyping: state conversion and prototype-interaction conversion are wired together. An XD interaction like “on hover, switch to the Hover state” is reproduced in Figma as “ON_HOVER trigger, CHANGE_TO the State=Hover variant.” After conversion you can just open Figma’s prototype mode and try it out!
🧩 Why this is technically hard
Prototype conversion is, more than visuals, all about handling reference relationships. Connections between nodes, cross-references between states, phantom links to deleted nodes — we have to carry all of this from XD to Figma without breaking anything!
🔗 Bridging node IDs
Prototype connections are reference relationships — “tapping node A navigates to node B.” XD’s node IDs and Figma’s node IDs are obviously different, so we build an ID mapping table during conversion.
Pixel Fine Converter applies prototype connections after every node has been converted. Doing it the other way round would drop any connection pointing to a not-yet-created node. Artboard IDs are tracked in their own map to resolve navigation destinations correctly. It’s tedious plumbing — but skipping it leaves your connections in tatters 💪
👻 Handling destinations that no longer exist
Depending on the XD file’s edit history, interactions pointing to deleted artboards or components can stick around. These are “ghost links” — invisible even to the person who made them!
We validate destination nodes during conversion and skip invalid connections, counting them as we go. The applied/skipped numbers are logged, and you can review them in the conversion notes. A quiet nudge when something silently went wrong 👀
🛡️ Safety for state conversion
Since XD states can reference other states, cyclic references are possible in theory. Before generating variants, we walk the state reference graph and, if a cycle exists, safely skip it. A guard against the worst case: a conversion stuck in an infinite loop.
For large components (500+ nodes), we also cap default-variant generation to respect Figma plugin memory limits.
✨ Auto-Animate → Smart Animate
XD’s Auto-Animate corresponds to Figma’s Smart Animate, but the interpolation logic isn’t perfectly identical. The core principle — interpolating properties between same-named layers — is shared, so most cases land naturally, but complex path animations or transitions involving mask changes can diverge.
This is the “how close can we get” battlefield, but at the property level (position, size, opacity, rotation, etc.) we reproduce things faithfully 🎯
⚠️ Limits and scope (being upfront about it)
We’ve walked through the mechanics of prototype conversion, but XD and Figma’s prototype systems are designed differently, and they won’t ever behave identically. Some things worth calling out:
- Interactions that reference deleted nodes can’t be converted (they’re skipped and counted in the log)
- XD Auto-Animate and Figma Smart Animate aren’t identical. Simple property changes (position, size, opacity) are faithful, but complex path transformations may differ
- If no instance of a stateful component exists,
CHANGE_TOhas nowhere to point and is skipped - Large components (500+ nodes) may have variant generation limited due to memory constraints
- The full option behavior is documented in Guide: Export option reference
Even if the behavior isn’t perfectly identical, our goal is: “open Figma’s prototype mode right after conversion, and what you built in XD just plays.” We keep refining the plugin with that in mind, and we’ll keep working to make it one you can genuinely rely on.
🚀 Try the Free plan first to check conversion quality
Pixel Fine Converter is free to install from the Figma Community! The Free plan includes the full set of basic conversions — shapes, text, styles, groups, masks, images, transforms — so you can check the conversion quality on your own .xd file right away.
If you need prototype connections or state-to-variant conversion, you can unlock them with the Pro plan ($29, one-time purchase — no subscriptions) 🎁
One-click install from Figma Community
Related pages
- Guide: Export option reference — details on prototype conversion options
- Features: Components conversion — recreating component and instance structure
- Features: Auto Layout conversion — converting XD stacks to Figma Auto Layout
- Features: Fine-tuning — compensating for XD/Figma rendering differences
- Blog: XD→Figma migration practical guide — Background, process, pitfalls, and tool selection