FigmaTK — Figma Toolkit
Swiss-army knife CLI for Figma Slides .deck files. Parse, inspect, modify, and rebuild presentations programmatically — no Figma API required.
Figma File Formats
Each Figma product has its own native file format:
| Figma Slides | .deck | ✅ |
| Figma Design | .fig | ❌ not yet |
| Figma Jam (whiteboard) | .jam | ❌ not yet |
| Figma Buzz | .buzz | ❌ not yet |
| Figma Sites | .site | ❌ not yet |
| Figma Make | .make | ❌ not yet |
Why native .deck?
Figma Slides lets you download presentations as .deck files and re-upload them. This is the native round-trip format. Exporting to .pptx is lossy — vectors get rasterized, fonts fall back to system defaults, layout breaks. By staying in .deck, you preserve everything exactly as Figma renders it.
FigmaTK makes this round-trip programmable. Download a .deck, modify it, re-upload. Everything stays native.
Plug in Claude Code or any coding agent and you have an AI that can read and edit Figma presentations end-to-end — without ever opening the Figma UI.
Use Cases
- AI agent for presentations — let an LLM rewrite copy, insert images, and produce a ready-to-upload
.deck
- Batch-produce branded decks — start from a template, feed in data per client/project, get pixel-perfect slides out
- Inspect and audit — understand the internal structure of any
.deck file
- Automate text and image placement across dozens of slides in seconds
Install
npm install -g figmatk
Node 18+. No build step. Pure ESM.
Quick Start
figmatk inspect my-presentation.deck
figmatk list-text my-presentation.deck
figmatk list-overrides my-presentation.deck
→ Full CLI reference: docs/cli.md
Claude Code / MCP Integration
FigmaTK ships as a Cowork plugin with an MCP server — Claude can manipulate .deck files directly as tool calls.
claude plugin marketplace add rcoenen/figmatk
claude plugin install figmatk
Or add manually in Claude Desktop → Settings → Developer → Edit Config:
{
"mcpServers": {
"figmatk": { "command": "figmatk-mcp" }
}
}
Available MCP tools: figmatk_create_deck, figmatk_create_template_draft, figmatk_annotate_template_layout, figmatk_publish_template_draft, figmatk_list_template_layouts, figmatk_create_from_template, figmatk_inspect, figmatk_list_text, figmatk_list_overrides, figmatk_update_text, figmatk_insert_image, figmatk_clone_slide, figmatk_remove_slide, figmatk_roundtrip.
Template Workflows
FigmaTK supports two related template states:
- Draft templates:
SLIDE_ROW -> SLIDE -> ...
- Published templates:
SLIDE_ROW -> MODULE -> SLIDE -> ...
Use explicit naming conventions when authoring reusable templates:
- Layouts:
layout:<name>
- Text slots:
slot:text:<name>
- Image slots:
slot:image:<name>
- Decorative fixed imagery:
fixed:image:<name>
figmatk_list_template_layouts understands those conventions and only falls back to heuristic image placeholders when a layout has not been explicitly annotated yet.
Programmatic API
import { Deck } from 'figmatk';
const deck = await Deck.open('template.deck');
const slide = deck.slides[0];
slide.addText('Hello world', { style: 'Title' });
await deck.save('output.deck');
License
MIT