Alpha: Ships on npm at 7.0.0-alpha.07.0.0-alpha.0

Refusals

Every refusal PageSchema returns, by path, with its bound and the fix.

A refusal is the parse error naming a field over its bound, and the fix is shorter content. A path's anchor is the block's type, then the path after block with list indexes dropped: sections.1.block.title on a hero is #hero.title. A shell path is #shell.<field>, and a field of the Page is #page.<field>.

From @mdxui/site@7.0.0-alpha.0: 285 anchors. pnpm check trips 262 of the bounds on a built record and checks each message below against the one returned.

RefusalMessage, as safeParse returns itFix
A string past its boundToo big: expected string to have <=160 charactersShorten the content
A list past its countToo big: expected array to have <=6 itemsDrop items
A list short of its countToo small: expected array to have >=1 itemsAdd items
A list off its one countToo big: expected array to have exactly 3 itemsHold the count exactly
A number past its rangeToo big: expected number to be <=640Use a value inside the range
An empty stringToo small: expected string to have >=1 charactersWrite the value, or leave the field out where it is optional

page

AnchorBound
page.title64 characters
page.description320 characters
page.meta.canonical160 characters
page.meta.icon160 characters
page.meta.iconFallback160 characters
page.meta.appleTouchIcon160 characters
page.meta.image.url160 characters
page.meta.image.width200 to 2400
page.meta.image.height200 to 2400
page.sections3 to 20 items
AnchorRule, as safeParse returns itFix
page.themeInvalid option: expected one of "certificate"|"vaultline"|"quaypoint"|"callboard"|"directory"Name a bundled Theme, or render under your own with render, as in Write a Theme

shell

AnchorBound
shell.id^[a-z][a-z0-9-]{0,23}$: a lowercase letter, then at most 23 letters, digits and hyphens
AnchorBound
nav.brand.href160 characters
nav.brand.text16 characters
nav.brand.suffix8 characters
nav.linksat most 6 items
nav.cta.href160 characters
nav.cta.label24 characters
nav.search.action160 characters
nav.search.placeholder40 characters
nav.search.query120 characters
nav.search.clear160 characters
AnchorRule, as safeParse returns itFix
nav.branda brand needs a wordmark or a markGive the brand a wordmark (text) or a mark
nava bar's row holds 96 units (its link labels, 3 a link, and twice the wider of the brand and the button); shorten a label or drop a linkShorten a link label or drop a link
AnchorBound
footer.brand.href160 characters
footer.brand.text16 characters
footer.brand.suffix8 characters
footer.blurb160 characters
footer.columnsat most 4 items
footer.columns.title16 characters
footer.columns.label40 characters
footer.columns.links1 to 12 items
footer.cta.href160 characters
footer.cta.label24 characters
footer.socialat most 6 items
footer.social.href160 characters
footer.form.action160 characters
footer.form.label24 characters
footer.form.placeholder32 characters
footer.form.submit16 characters
footer.noteexactly 2 items
AnchorRule, as safeParse returns itFix
footer.branda brand needs a wordmark or a markGive the brand a wordmark (text) or a mark
footera footer in columns holds two or three of themUse two or three columns
footera footer in columns has a "For agents" columnTitle one column "For agents"

hero

AnchorBound
hero.kicker.text40 characters
hero.title64 characters
hero.lede260 characters
hero.actionsat most 2 items
hero.actions.href160 characters
hero.actions.label24 characters
hero.command.command40 characters
hero.command.note48 characters
hero.fineat most 4 items
hero.specimen.blocks1 to 3 items

statement

AnchorBound
statement.text140 characters
AnchorRule, as safeParse returns itFix
statement.texta statement is plain words and one `*accent phrase*`: no code, link, strong or markWrite plain words and at most one *accent phrase*
AnchorBound
page-head.title64 characters
page-head.lede200 characters

stats

AnchorBound
stats.head.eyebrow28 characters
stats.head.title72 characters
stats.head.lede300 characters
stats.head.tag8 characters
stats.items3 to 4 items
stats.items.value6 characters
stats.items.label72 characters
AnchorRule, as safeParse returns itFix
stats.heada head needs a title or a ledeGive the head a title or a lede

facts

AnchorBound
facts.title48 characters
facts.items1 to 16 items
facts.items.label24 characters
facts.items.value80 characters
facts.items.href160 characters

feature-grid

AnchorBound
feature-grid.head.eyebrow28 characters
feature-grid.head.title72 characters
feature-grid.head.lede300 characters
feature-grid.head.tag8 characters
feature-grid.aside.command12 characters
feature-grid.aside.note40 characters
feature-grid.items2 to 8 items
feature-grid.items.label24 characters
feature-grid.items.index2 characters
feature-grid.items.title40 characters
feature-grid.items.text200 characters
feature-grid.items.href160 characters
feature-grid.items.linkLabel24 characters
AnchorRule, as safeParse returns itFix
feature-grid.heada head needs a title or a ledeGive the head a title or a lede
feature-grid.itemsa feature grid holds 2, 3, 4, 6, 8 cells: a count that fills its rows at every widthUse 2, 3, 4, 6 or 8 items
feature-grid.itemsan item needs a title or a textGive the item a title or a text

feature-split

AnchorBound
feature-split.head.eyebrow28 characters
feature-split.head.title72 characters
feature-split.head.lede300 characters
feature-split.head.tag8 characters
feature-split.basesexactly 2 items
feature-split.itemsexactly 3 items
feature-split.items.index2 characters
feature-split.items.title28 characters
feature-split.items.text96 characters
feature-split.items.bulletsat most 4 items
feature-split.specimen.blocks1 to 3 items
AnchorRule, as safeParse returns itFix
feature-split.heada head needs a title or a ledeGive the head a title or a lede

bento

AnchorBound
bento.head.eyebrow28 characters
bento.head.title72 characters
bento.head.lede300 characters
bento.head.tag8 characters
bento.panels2 to 4 items
bento.panels.title48 characters
bento.panels.text120 characters
AnchorRule, as safeParse returns itFix
bento.heada head needs a title or a ledeGive the head a title or a lede
bento.panelsa bento panel holds one specimen: terminal, agent-prompt, api-callHold one terminal, agent-prompt, api-call in the tile

compare

AnchorBound
compare.head.eyebrow28 characters
compare.head.title72 characters
compare.head.lede300 characters
compare.head.tag8 characters
compare.cons.label24 characters
compare.cons.items1 to 8 items
compare.pros.label24 characters
compare.pros.items1 to 8 items
AnchorRule, as safeParse returns itFix
compare.heada head needs a title or a ledeGive the head a title or a lede

steps

AnchorBound
steps.head.eyebrow28 characters
steps.head.title72 characters
steps.head.lede300 characters
steps.head.tag8 characters
steps.moreat most 2 items
steps.steps3 to 5 items
steps.specimen.blocks1 to 3 items
AnchorRule, as safeParse returns itFix
steps.heada head needs a title or a ledeGive the head a title or a lede

text-stack

AnchorBound
text-stack.head.eyebrow28 characters
text-stack.head.title72 characters
text-stack.head.lede300 characters
text-stack.head.tag8 characters
text-stack.items3 to 6 items
text-stack.items.title28 characters
text-stack.items.text160 characters
text-stack.items.href160 characters
AnchorRule, as safeParse returns itFix
text-stack.heada head needs a title or a ledeGive the head a title or a lede

terminal

AnchorBound
terminal.title48 characters
terminal.lines1 to 32 items
terminal.tabs1 to 4 items
terminal.tabs.label6 characters
terminal.tabs.lines1 to 24 items
terminal.tabs.lines.cmd64 characters
terminal.tabs.lines.rowexactly 2 items
terminal.tabs.lines.out64 characters
terminal.tabs.lines.text128 characters

command-row

AnchorBound
command-row.command40 characters
command-row.note48 characters

api-call

AnchorBound
api-call.path72 characters
api-call.note32 characters
api-call.examples1 to 4 items
api-call.examples.label28 characters
api-call.examples.request1008 characters
api-call.examples.status28 characters
api-call.examples.response1728 characters
api-call.examples.events1 to 10 items
api-call.examples.events.at12 characters
api-call.examples.events.name40 characters
api-call.examples.events.ref16 characters
api-call.examples.events.text80 characters
AnchorRule, as safeParse returns itFix
api-call.examplesan example answers with a response or with events, one of themAnswer with a response or with events, one of them

endpoints

AnchorBound
endpoints.head.eyebrow28 characters
endpoints.head.title72 characters
endpoints.head.lede300 characters
endpoints.head.tag8 characters
endpoints.rows3 to 16 items
endpoints.rows.path64 characters
endpoints.rows.text96 characters
endpoints.rows.href160 characters
endpoints.note160 characters
AnchorRule, as safeParse returns itFix
endpoints.heada head needs a title or a ledeGive the head a title or a lede

agent-prompt

AnchorBound
agent-prompt.label24 characters
agent-prompt.lines1 to 6 items

pricing

AnchorBound
pricing.head.eyebrow28 characters
pricing.head.title72 characters
pricing.head.lede300 characters
pricing.head.tag8 characters
pricing.tiers1 to 4 items
pricing.tiers.name16 characters
pricing.tiers.price16 characters
pricing.tiers.note24 characters
pricing.tiers.desc80 characters
pricing.tiers.features1 to 10 items
pricing.tiers.cta40 characters
pricing.tiers.href160 characters
pricing.featuredBadge16 characters
pricing.note120 characters
AnchorRule, as safeParse returns itFix
pricing.heada head needs a title or a ledeGive the head a title or a lede

plan-table

AnchorBound
plan-table.title48 characters
plan-table.columns1 to 6 items
plan-table.rows1 to 8 items
plan-table.rows.name24 characters
plan-table.rows.cells1 to 6 items
plan-table.rows.note40 characters
plan-table.foot160 characters

faq

AnchorBound
faq.head.eyebrow28 characters
faq.head.title72 characters
faq.head.lede300 characters
faq.head.tag8 characters
faq.items1 to 10 items
faq.items.q64 characters
faq.items.a420 characters
faq.groups1 to 4 items
faq.groups.title24 characters
faq.groups.items1 to 6 items
faq.groups.items.q64 characters
faq.groups.items.a420 characters
AnchorRule, as safeParse returns itFix
faq.heada head needs a title or a ledeGive the head a title or a lede
faqitems or groups, not bothKeep items or groups, never both

closing

AnchorBound
closing.head.eyebrow28 characters
closing.head.title72 characters
closing.head.lede300 characters
closing.head.tag8 characters
closing.specimen.blocks1 to 3 items
closing.fineat most 4 items
closing.statsat most 4 items
closing.stats.value6 characters
closing.stats.label24 characters
closing.actionsat most 2 items
closing.actions.href160 characters
closing.actions.label24 characters
closing.command40 characters
AnchorRule, as safeParse returns itFix
closing.heada head needs a title or a ledeGive the head a title or a lede
closinga closing ends on its buttons or on one command, never both (review 2026-09-14)Keep the actions or the command, never both

cta-form

AnchorBound
cta-form.head.eyebrow28 characters
cta-form.head.title72 characters
cta-form.head.lede300 characters
cta-form.head.tag8 characters
cta-form.action160 characters
cta-form.fields1 to 8 items
cta-form.fields.label16 characters
cta-form.fields.placeholder32 characters
cta-form.fields.optionsat most 12 items
cta-form.submit24 characters
cta-form.note80 characters
AnchorRule, as safeParse returns itFix
cta-form.heada head needs a title or a ledeGive the head a title or a lede

article

AnchorBound
article.head.back.href160 characters
article.head.back.label16 characters
article.head.tag20 characters
article.head.dateline.read.minutes1 to 180
article.head.dateline.read.unit12 characters
article.head.title80 characters
article.head.dek360 characters
article.share.url160 characters
article.share.title80 characters
article.share.label16 characters
article.share.on1 to 5 items
article.body12000 characters

post-list

AnchorBound
post-list.head.eyebrow28 characters
post-list.head.title64 characters
post-list.head.lede200 characters
post-list.read16 characters
post-list.posts1 to 24 items
post-list.posts.href160 characters
post-list.posts.tag20 characters
post-list.posts.dateline.read.minutes1 to 180
post-list.posts.dateline.read.unit12 characters
post-list.posts.title80 characters
post-list.posts.dek360 characters

product-head

AnchorBound
product-head.name32 characters
product-head.summary120 characters
product-head.chipsat most 9 items
product-head.chips.label24 characters
product-head.chips.href160 characters
product-head.actions1 to 2 items
product-head.actions.href160 characters
product-head.actions.label24 characters

product-list

AnchorBound
product-list.title48 characters
product-list.note24 characters
product-list.rail.groups1 to 4 items
product-list.rail.groups.label20 characters
product-list.rail.groups.links1 to 12 items
product-list.rail.groups.links.href160 characters
product-list.rail.groups.links.label24 characters
product-list.rail.groups.links.count0 to 1000000
product-list.sortat most 4 items
product-list.sort.href160 characters
product-list.sort.label16 characters
product-list.viewsat most 2 items
product-list.views.href160 characters
product-list.views.label16 characters
product-list.rowsat most 50 items
product-list.rows.href160 characters
product-list.rows.name32 characters
product-list.rows.summary120 characters
product-list.rows.tag24 characters
product-list.rows.note32 characters
product-list.pager.prev160 characters
product-list.pager.next160 characters
product-list.pager.page1 to 10000
product-list.pager.pages1 to 10000
product-list.empty80 characters

compileTheme

AnchorRule, as safeParse returns itFix
compile-themetheme "harbor" is missing core roles: panel, ink, …Set every core role in light or invariant

On this page