SlideImport
Brings PowerPoint and Google Slides into Figma as editable frames, not flat pictures.

Every redesign of a deck starts the same way: someone sends a .pptx, and the designer either retypes it or drops screenshots into Figma and works on top of dead images.
- Year
- 2026
- Role
- Design & engineering
- Type
- Figma plugin, free with no limits
- Runs
- Offline, the file never leaves the panel
Theproblem
The two usual routes both lose the content. Exporting to images gives you nothing to edit; rebuilding by hand costs hours before any design work starts. And the hours are the cheap part: what actually goes is the reason every element is where it is.
WhatIdid
One file in, a frame per slide out
Drag a .pptx onto the window and press once. Each slide becomes a frame at the size its author set, laid out in a row or stacked in a column, with the original layer names kept if you want them. When it finishes the frames are selected and the viewport is already on them, because the next thing you were going to do was go and find them.
A .pptx is a zip full of XML
Rename one and it opens: a document per slide, a theme, the layouts they inherit from, the pictures as real files, and a set of relationship files saying what points at what. Nothing has to be exported, converted or uploaded, because the deck already contains everything anybody would need. The unzipping and the parsing happen in the plugin window, which is the only place in a Figma plugin where a DOM parser exists.

Nine and a half thousand to the pixel
Office measures everything in English Metric Units: 914 400 to the inch, which divides cleanly by 72, by 96 and by 254, which is the entire reason the unit exists. Divide by 9 525 and every coordinate in the file is already in Figma’s units. The layout is not recreated from a screenshot, it is converted, so nothing lands approximately anywhere.
A shape does not carry a colour, it carries a name
Most things in a deck are painted with a reference like accent1 rather than a hex, and the value lives in the theme file next door. So the theme is read first and every reference resolved while parsing. Skip that step and everything themed arrives black, which is the failure mode of most converters and the reason their output looks like a photocopy.

What each thing becomes
Shapes become rectangles and ellipses with their corner radii. Text becomes text, paragraph by paragraph, with each run keeping its own size and colour. Pictures come out of the archive and go in as image fills. Lines become lines, groups become groups with the nesting the author built. Shadows and 3D effects are not brought across and are not faked either, because a shadow that is nearly right is worse than one you can see is missing.

A file row, two checkboxes and a verb
The window is 320 by 340. There is nowhere to put a preview, a settings page or an explanation, and nothing that needs one: choose a file, decide whether the slides sit in a row or a column, press Import. The progress line names the slide it is on, which is the only thing anybody wants to know while waiting.
Underthehood
The parsing happens in the window, not in the plugin
Figma plugin code has no DOM and no way to unzip anything; the UI iframe has both. So the file is read, unzipped and parsed into plain objects on the window side, and only finished geometry crosses over to be drawn. It splits the plugin in two along a line the API drew rather than one that would have been chosen.
Nothing leaves the machine
The manifest declares no allowed domains. No upload, no conversion service, no queue and nothing to agree to, which also means a deck under NDA can go through it without a conversation first.
Text is the reason to do this at all
Paragraphs are rebuilt one run at a time rather than flattened into a single string, so a line where three words are bold and one is a different colour still is that. The moment runs collapse, the import stops being editable and becomes a picture with selectable letters.
Free, with no limits
No count, no account, no per-file charge. A tool that runs for four seconds and then gets closed cannot support anything more complicated than existing.