Migrate Figma components to Penpot

Hello everyone,

I’m currently trying to evaluate the possibility of a migration from Figma to Penpot at my company.
The main subject is to migrate our design system, I’ve managed to migrate tokens via Token Forge, but I keep getting errors trying to export our Design System file via the Penpot Exporter plugin (github ticket pending).

Is there another way to migrate the existing components to Penpot, other than manually?

Regards

Hi @Oaziris,

Thanks for sharing this, and glad to hear you’ve already got tokens migrating successfully via Token Forge!

Filing a GitHub ticket for the exporter error is exactly the right move, since that gives the team visibility into the specific failure you’re hitting.

While that’s being looked into, a few things you could try in the meantime:

Check if it’s a size/performance issue. Because the Exporter plugin runs directly on top of Figma, it’s subject to Figma’s own memory and performance limits — very large design system files can time out. If your Design System file is sizeable, it might be worth trying to split it into smaller modules (e.g., exporting by page or by component group rather than the whole file at once) to see if that gets around the error. The team is actively working on moving bulk data processing outside of Figma to help with exactly this kind of constraint, so this should get easier over time.

Try connecting Figma’s and Penpot’s MCP servers to the same agent. Since your components are stuck, it might be worth trying a two-server approach: Figma has its own MCP server that lets AI agents read structured design data — components, variables, layout, styles — directly out of your Figma files. If you connect that alongside Penpot’s MCP server in the same agentic tool (e.g. Claude Code, Cursor, etc.), the agent can effectively act as a bridge — pulling context out of Figma on one side and using it to recreate or write components into Penpot on the other. This isn’t an official, packaged integration between the two products, so expect to do some prompting and iteration to get good results, but it’s a viable way to get unblocked without waiting on the exporter fix.

Manual migration as a fallback. If neither of those unblocks you, manual recreation of the components is unfortunately still the most reliable fallback for now — tedious, but it guarantees you get exactly what you need without waiting on the export pipeline.

If it’s helpful, we also put together The Enterprise Guide to Migrating Design Systems to Penpot, which covers some best practices for exactly this kind of migration — things like running a pre-migration readiness audit, validating with a pilot file before scaling, and handling large/complex design systems specifically. Might be worth a look given the scale of what you’re migrating.

Figma’s Penpot exporter plugin is under continuous, active development, so keep an eye on your GitHub ticket — there are improvements in the pipeline that should help with cases like this.

Hope this helps, and good luck with the migration!
Kendra

2 Likes

Thanks for the answer @Kendra_Kirk ,

I’ve tried exporting only a page, copy only a dozen of components to a new file and re-export. Figma doesn’t seems to be the issue as the file is created with no timeout but Penpot apparently can’t verify the file.

I’ll look into the MCP solution, hadn’t thought about that!

Hello,

I’ve been using the Penpot plugin exporter to process all my library components, including hundreds of components and thousands of variables. I faced the same issues: errors occurred, and I got blocked. But as @Kendra_Kirk said, you can use the MCP server because you can read the data via the Figma MCP server, write the data, and adapt it to your Penpot platform using the official MCP. I haven’t started using it yet, but this post motivates me to use the MCP server to migrate all the files :grin:

1 Like

@Oaziris, I’m working at the moment on porting Penpot’s exporter, so that it runs locally, straight on the .fig file — GitHub - girafic/penpot-converter: Local, offline .fig / .sketch → .penpot conversion · GitHub

First get the file out of Figma: main menu → File → Save local copy…. That is the only step Figma is involved in, the rest runs locally with no account, no plugin, no browser.

git clone https://github.com/girafic/penpot-converter && cd penpot-converter

npm install && npm run build

./packages/cli/dist/penpot-convert.js "Design System.fig"

It is not a reimplementation: only the Figma-reading half is replaced, everything that writes the .penpot is the exporter plugin’s own code, unmodified. So whatever breaks on the plugin’s Figma side does not apply here.

Here is a short video of it running on exactly that file, from .fig to the imported Penpot document, tested with the community Carbon Design System file:

Fair warning, it is work in progress: a few Figma concepts have no Penpot counterpart and are approximated rather than dropped, but everything approximated or skipped is counted and reported at the end of a run.

1 Like

Nice @girafic!
I’ll try it with my library, which isn’t easy to export. If needed, I’ll report any limitations I encounter as an issue in the GitHub repository.