port-to-marko
Installation
SKILL.md
Port a component library to Marko (marko-ui format)
You are porting a component library to Marko 6, publishing it in the marko-ui registry format (shadcn-compatible JSON with Marko sources). Interactive behavior comes from Zag.js state machines; styling stays Tailwind. The output is installable with bunx marko-ui add.
Read references/marko-gotchas.md before writing any component — every rule in it broke real components. Read references/verification.md before claiming anything works. Read references/registry-publishing.md when you reach publishing.
Step 0 — Destination gate (do this FIRST)
Fetch the wanted-libraries list:
https://raw.githubusercontent.com/svallory/marko-ui/main/apps/docs/src/data/directory.json
Check whether the library you're porting is in the wanted array (match by name, case-insensitive).
- Wanted library → the port goes INTO the official marko-ui repo. Fork
https://github.com/svallory/marko-uiNOW, create a branch, and follow that repo's own authoring docs (CLAUDE.md,notes/component-authoring.md,/docs/creating-components) — they take precedence over this skill where they overlap. Components go inpackages/shadcn/ui/<name>/with aregistry.meta.json; the finished PR must pass the repo's mechanical parity gate (seereferences/verification.md§Official-repo gate). - Not wanted → the port becomes YOUR OWN community registry. Clone the template:
https://github.com/svallory/marko-ui-registry-template. You own it, you host it (GitHub Pages workflow included), and you get listed in the directory with a one-line PR. Do NOT open a PR adding an unwanted library's components to the official repo — it will be closed; the directory path exists precisely so every port can ship without gatekeeping.