Context
Penpot (github.com/penpot/penpot) is an
open-source design tool with native support for design tokens following
the W3C Design Tokens Community Group (DTCG) Format Module v1 — the same spec
that mint-ds validate --spec dtcg checks today (PR #69).
That overlap opens a low-cost interop path: once Mint can emit DTCG, the same
artifact is consumable by Penpot's Tokens panel and by Tokens Studio for
Figma, with zero vendor-specific code.
This issue tracks the work to close that loop.
Goals
- Round-trip tokens between Mint and Penpot using the DTCG standard format.
- No vendor lock-in: every layer below works just as well with Figma's Tokens
Studio plugin, Style Dictionary, etc.
Non-goals
- Building a Mint clone inside Penpot.
- Supporting Penpot-only features that aren't expressible in DTCG.
Milestones
Milestone 1 — --target dtcg export (prerequisite)
Add a new export target that transforms mint-ds.tokens.json (Mint's internal
shape) into a DTCG-v1-compliant JSON. Validated by feeding the output back
through mint-ds validate --spec dtcg (must exit 0).
Depends on: PR #69 merged.
Milestone 2 — Penpot import path documentation
Once --target dtcg lands, document the end-to-end happy path:
No code change beyond docs.
Milestone 3 — Penpot API push (optional, exploratory)
If there's traction after M1+M2, add a --push penpot flag that uploads
tokens to a Penpot file via its REST API instead of writing locally.
Milestone 4 — Penpot plugin (optional, ambitious)
Wrap the existing app/api/audit/route.ts pipeline as a Penpot plugin:
This is essentially the 3-step web wizard hosted inside Penpot.
Why not just add $extensions validation (PR #69 Milestone 4)?
That milestone validates the metadata block Tokens Studio writes into a
DTCG file ($extensions["studio.tokens"], etc.). It's spec polish — it does
not make Mint talk to Figma or Penpot. The actual interop is the
emit-DTCG → import-DTCG round-trip described above.
Related
Context
Penpot (github.com/penpot/penpot) is an
open-source design tool with native support for design tokens following
the W3C Design Tokens Community Group (DTCG) Format Module v1 — the same spec
that
mint-ds validate --spec dtcgchecks today (PR #69).That overlap opens a low-cost interop path: once Mint can emit DTCG, the same
artifact is consumable by Penpot's Tokens panel and by Tokens Studio for
Figma, with zero vendor-specific code.
This issue tracks the work to close that loop.
Goals
Studio plugin, Style Dictionary, etc.
Non-goals
Milestones
Milestone 1 —
--target dtcgexport (prerequisite)Add a new export target that transforms
mint-ds.tokens.json(Mint's internalshape) into a DTCG-v1-compliant JSON. Validated by feeding the output back
through
mint-ds validate --spec dtcg(must exit 0).colors[].name/value/scale→ grouped DTCG color tokens withinherited
$type: colorspacing,borderRadius,shadows,typography.fontFamilies,typography.fontWeightsto the corresponding DTCG typesexamples/frankenstein/as a golden fixture: committedmint-ds.tokens.dtcg.jsonis the expected outputvalidateDTCG(output).hasErrors === falseDepends on: PR #69 merged.
Milestone 2 — Penpot import path documentation
Once
--target dtcglands, document the end-to-end happy path:mint-ds export --target dtcg,open Penpot → Tokens panel → Import JSON
consumer — reinforces the no-lock-in story)
No code change beyond docs.
Milestone 3 — Penpot API push (optional, exploratory)
If there's traction after M1+M2, add a
--push penpotflag that uploadstokens to a Penpot file via its REST API instead of writing locally.
the latest self-hostable release
mint-ds export --target dtcg --push penpot --file-id <id>readsPENPOT_API_TOKEN, posts the JSONmint-ds pull --penpot --file-id <id>writes thePenpot tokens to a local
tokens.jsonthat the audit can consumeMilestone 4 — Penpot plugin (optional, ambitious)
Wrap the existing
app/api/audit/route.tspipeline as a Penpot plugin:inside Penpot
This is essentially the 3-step web wizard hosted inside Penpot.
Why not just add
$extensionsvalidation (PR #69 Milestone 4)?That milestone validates the metadata block Tokens Studio writes into a
DTCG file (
$extensions["studio.tokens"], etc.). It's spec polish — it doesnot make Mint talk to Figma or Penpot. The actual interop is the
emit-DTCG → import-DTCG round-trip described above.
Related