Wiremark
Read and write wiremark, the text-based wireframe DSL rendered from fenced wireframe code blocks and .wiremark files. Use when creating, editing, or interpreting wireframes, screen sketches, screen flows, or low-fidelity UI mockups in markdown documents.From its SKILL.md
npx -y skills add Blackburn-Labs/wiremark --skill wiremarkAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.5 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
wiremark
wiremark is a plain-text wireframe format: an indented outline of component
names that renders to a hand-drawn SVG sketch. Source lives in a fenced code
block tagged wireframe (or a standalone .wiremark file).
Wireframe #login mobile
Stack column gap=2
Typography h4 "Sign in"
TextField "Email" type=email
TextField "Password" type=password
Button "Sign in" contained to=#dashboard
Before using a component not shown above, check reference.md in this skill
folder -- it lists every component with its props, enum values, and defaults.
Do not invent components.
Rules
- Every line is
Component [keyless-value | key=value]*. Components are PascalCase names (Stack,Card,TextField,AppBar, ...). Many feel familiar from UI libraries, but the vocabulary is wiremark's own -- never guess a name; checkreference.md. - Indentation is containment: a line indented under another is its child. Two
spaces per level, never tabs. Only components marked
[c]inreference.mdtake children -- children under a leaf are dropped silently. - Quoted = drawn text, and quoting it is mandatory (
TextField "Email", neverTextField Email). Bare = setting: enum value (outlined), boolean flag (checked), sizing token, number, or icon name. Never quote a setting:variant="outlined"andgap="2"are hard errors. No bare text lines -- wrap text in its owner (Typography "..."). - Keyless values resolve by type/value alone, in any order:
TextField "Email" outlined==TextField label="Email" variant=outlined. - Sizing is
width height, in that order, bare tokens only (nowidth=key), on components marked[w h]:240px(pixels),30%,*(fill), bare number (flex weight).Box 240px *is a fixed-width, full-height rail. Omit for natural content size. - Defaults do the work: bare
Imgdraws a placeholder image, bareButtonreads "Button". For placeholder text give a filler amount token on a component marked[~]:~3(sentences/lines),~5w(words),~2l(lines), or_/__/___. Filler style:filler=squiggle|lorem|blockson theWireframeroot. - Comments are
//to end of line. - Frames:
Wireframe #id mobile|landscape|portrait(or bothw=andh=), one or more per document.visible=falsehides a shared-shell frame;background=#shellcomposes it underneath another frame;Anchor #regionanchor=#regionplaces foreground content inside the shell (drop the preset when usinganchor=);direction=TD|LRorients multi-frame flow.
- Every element accepts
to=#frame-id, making it a link; the navigation graph is inferred from those links (frames only, no deep links). Multiple visible frames render as a flow chart automatically. - Icon props take Material icon names, forgivingly spelled (
Icon Search,Button "Save" startIcon=Check); unknown names degrade to a placeholder. - Hard errors (must fix): tabs, unquoted text, quoted enum/number, unknown
component/prop, bad enum value. Soft warnings (still renders): missing
background/anchor target, unknown icon. Silent (check yourself): a
to=link to a nonexistent frame, children nested under a leaf component. - Out of scope: styling (
style=/sx=/colors), breakpoints, x/y coordinates.
Gotchas
Button variants are text|outlined|contained (use contained for a primary
action, never primary); Typography body variants are body1/body2 (not
body); checkboxes/switches are Control checkbox / Control switch
(+ checked); companion components you may know from UI libraries do not
exist (no DialogTitle/DialogContent, IconButton, Menu, Container,
Paper, ListItemText -- nest content directly, use a bare Icon, quote
the ListItem label).
Checking your work
After writing or editing a wireframe, validate it: save the source as
x.wiremark and run npx @wiremark/cli x.wiremark -o x.svg (Node 18+). Hard
errors exit non-zero with a line number; warnings print to stderr while the
SVG is still written. Dead to= links and children under leaf components are
silent -- re-read those yourself.
Further reading: https://docs.wiremark.dev (human docs), https://docs.wiremark.dev/reference/icons (icon gallery).
What ships with it: 1 file
6.7 KB alongside SKILL.md
- reference.md6.7 KB