[{"data":1,"prerenderedAt":966},["ShallowReactive",2],{"navigation_examples":3,"navigation_docs":114,"-compare-comark-vs-markdoc":334,"-compare-comark-vs-markdoc-surround":961},[4],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Examples","\u002Fexamples","examples",[9,40,69,104],{"title":10,"path":11,"stem":12,"children":13,"page":39},"Frameworks","\u002Fexamples\u002Fframeworks","examples\u002F1.frameworks",[14,19,24,29,34],{"title":15,"path":16,"stem":17,"icon":18},"Astro","\u002Fexamples\u002Fframeworks\u002Fastro","examples\u002F1.frameworks\u002Fastro\u002FREADME","i-simple-icons:astro",{"title":20,"path":21,"stem":22,"icon":23},"Next.js","\u002Fexamples\u002Fframeworks\u002Fnextjs","examples\u002F1.frameworks\u002Fnextjs\u002FREADME","i-simple-icons:nextdotjs",{"title":25,"path":26,"stem":27,"icon":28},"Nuxt","\u002Fexamples\u002Fframeworks\u002Fnuxt-ui","examples\u002F1.frameworks\u002Fnuxt\u002FREADME","i-simple-icons-nuxt",{"title":30,"path":31,"stem":32,"icon":33},"SvelteKit","\u002Fexamples\u002Fframeworks\u002Fsveltekit","examples\u002F1.frameworks\u002Fsveltekit\u002FREADME","i-simple-icons-svelte",{"title":35,"path":36,"stem":37,"icon":38},"VitePress","\u002Fexamples\u002Fframeworks\u002Fvitepress","examples\u002F1.frameworks\u002Fvitepress\u002FREADME","i-simple-icons-vitepress",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Vite","\u002Fexamples\u002Fvite","examples\u002F2.vite",[45,50,55,60,64],{"title":46,"path":47,"stem":48,"icon":49},"Angular","\u002Fexamples\u002Fvite\u002Fangular","examples\u002F2.vite\u002Fangular\u002FREADME","i-simple-icons-angular",{"title":51,"path":52,"stem":53,"icon":54},"HTML Preview","\u002Fexamples\u002Fvite\u002Fhtml","examples\u002F2.vite\u002Fhtml\u002FREADME","i-lucide-file-code",{"title":56,"path":57,"stem":58,"icon":59},"React","\u002Fexamples\u002Fvite\u002Freact","examples\u002F2.vite\u002Freact\u002FREADME","i-simple-icons-react",{"title":61,"path":62,"stem":63,"icon":33},"Svelte","\u002Fexamples\u002Fvite\u002Fsvelte","examples\u002F2.vite\u002Fsvelte\u002FREADME",{"title":65,"path":66,"stem":67,"icon":68},"Vue","\u002Fexamples\u002Fvite\u002Fvue","examples\u002F2.vite\u002Fvue\u002FREADME","i-simple-icons-vuedotjs",{"title":70,"path":71,"stem":72,"children":73,"page":39},"Plugins","\u002Fexamples\u002Fplugins","examples\u002F3.plugins",[74,79,84,89,94,99],{"title":75,"path":76,"stem":77,"icon":78},"Binding (frontmatter + data)","\u002Fexamples\u002Fplugins\u002Fvue-vite-binding","examples\u002F3.plugins\u002Fvue-vite-binding\u002FREADME","i-lucide-replace",{"title":80,"path":81,"stem":82,"icon":83},"Syntax Highlighting","\u002Fexamples\u002Fplugins\u002Fvue-vite-highlight","examples\u002F3.plugins\u002Fvue-vite-highlight\u002FREADME","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"JSON Render","\u002Fexamples\u002Fplugins\u002Fvue-vite-json-render","examples\u002F3.plugins\u002Fvue-vite-json-render\u002FREADME","i-lucide-braces",{"title":90,"path":91,"stem":92,"icon":93},"Math formulas","\u002Fexamples\u002Fplugins\u002Fvue-vite-math","examples\u002F3.plugins\u002Fvue-vite-math\u002FREADME","i-lucide-calculator",{"title":95,"path":96,"stem":97,"icon":98},"Mermaid diagrams","\u002Fexamples\u002Fplugins\u002Fvue-vite-mermaid","examples\u002F3.plugins\u002Fvue-vite-mermaid\u002FREADME","i-simple-icons-mermaid",{"title":100,"path":101,"stem":102,"icon":103},"Punctuation","\u002Fexamples\u002Fplugins\u002Fvue-vite-punctuation","examples\u002F3.plugins\u002Fvue-vite-punctuation\u002FREADME","i-lucide-quote",{"title":105,"path":106,"stem":107,"children":108,"page":39},"Ai","\u002Fexamples\u002Fai","examples\u002F4.ai",[109],{"title":110,"path":111,"stem":112,"icon":113},"AI SDK","\u002Fexamples\u002Fai\u002Fnuxt-ai-sdk","examples\u002F4.ai\u002Fnuxt-ai-sdk\u002FREADME","i-simple-icons-vercel",[115,128,149,178,271,292,313],{"title":116,"path":117,"stem":118,"children":119,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[120,124],{"title":121,"path":122,"stem":123},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F0.introduction",{"title":125,"path":126,"stem":127},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation",{"title":129,"path":130,"stem":131,"children":132,"page":39},"Syntax","\u002Fsyntax","2.syntax",[133,137,141,145],{"title":134,"path":135,"stem":136},"Markdown","\u002Fsyntax\u002Fmarkdown","2.syntax\u002F1.markdown",{"title":138,"path":139,"stem":140},"Components","\u002Fsyntax\u002Fcomponents","2.syntax\u002F2.components",{"title":142,"path":143,"stem":144},"Attributes","\u002Fsyntax\u002Fattributes","2.syntax\u002F3.attributes",{"title":146,"path":147,"stem":148},"AST","\u002Fsyntax\u002Fcomark-ast","2.syntax\u002F4.comark-ast",{"title":150,"path":151,"stem":152,"children":153,"page":39},"Rendering","\u002Frendering","3.rendering",[154,158,161,164,167,170,173],{"title":155,"path":156,"stem":157,"icon":54},"HTML","\u002Frendering\u002Fhtml","3.rendering\u002F2.html",{"title":65,"path":159,"stem":160,"icon":68},"\u002Frendering\u002Fvue","3.rendering\u002F3.vue",{"title":25,"path":162,"stem":163,"icon":28},"\u002Frendering\u002Fnuxt","3.rendering\u002F4.nuxt",{"title":56,"path":165,"stem":166,"icon":59},"\u002Frendering\u002Freact","3.rendering\u002F5.react",{"title":61,"path":168,"stem":169,"icon":33},"\u002Frendering\u002Fsvelte","3.rendering\u002F6.svelte",{"title":46,"path":171,"stem":172,"icon":49},"\u002Frendering\u002Fangular","3.rendering\u002F7.angular",{"title":174,"path":175,"stem":176,"icon":177},"ANSI (Terminal)","\u002Frendering\u002Fansi","3.rendering\u002F8.ansi","i-lucide-terminal",{"title":70,"icon":179,"path":180,"stem":181,"children":182,"page":39},"i-lucide-plug","\u002Fplugins","4.plugins",[183,254],{"title":184,"path":185,"stem":186,"children":187,"page":39},"Built-in","\u002Fplugins\u002Fbuilt-in","4.plugins\u002F1.built-in",[188,193,197,202,207,212,217,220,224,228,231,236,241,244,249],{"title":189,"path":190,"stem":191,"icon":192},"Alerts","\u002Fplugins\u002Fbuilt-in\u002Falert","4.plugins\u002F1.built-in\u002Falert","i-lucide-bell",{"title":194,"path":195,"stem":196,"icon":78},"Binding","\u002Fplugins\u002Fbuilt-in\u002Fbinding","4.plugins\u002F1.built-in\u002Fbinding",{"title":198,"path":199,"stem":200,"icon":201},"Breaks","\u002Fplugins\u002Fbuilt-in\u002Fbreaks","4.plugins\u002F1.built-in\u002Fbreaks","i-lucide-corner-down-left",{"title":203,"path":204,"stem":205,"icon":206},"Emoji","\u002Fplugins\u002Fbuilt-in\u002Femoji","4.plugins\u002F1.built-in\u002Femoji","i-lucide-smile",{"title":208,"path":209,"stem":210,"icon":211},"Footnotes","\u002Fplugins\u002Fbuilt-in\u002Ffootnotes","4.plugins\u002F1.built-in\u002Ffootnotes","i-lucide-footprints",{"title":213,"path":214,"stem":215,"icon":216},"Headings","\u002Fplugins\u002Fbuilt-in\u002Fheadings","4.plugins\u002F1.built-in\u002Fheadings","i-lucide-heading",{"title":85,"path":218,"stem":219,"icon":88},"\u002Fplugins\u002Fbuilt-in\u002Fjson-render","4.plugins\u002F1.built-in\u002Fjson-render",{"title":221,"path":222,"stem":223,"icon":93},"Mathematics","\u002Fplugins\u002Fbuilt-in\u002Fmath","4.plugins\u002F1.built-in\u002Fmath",{"title":225,"path":226,"stem":227,"icon":98},"Mermaid Diagrams","\u002Fplugins\u002Fbuilt-in\u002Fmermaid","4.plugins\u002F1.built-in\u002Fmermaid",{"title":100,"path":229,"stem":230,"icon":103},"\u002Fplugins\u002Fbuilt-in\u002Fpunctuation","4.plugins\u002F1.built-in\u002Fpunctuation",{"title":232,"path":233,"stem":234,"icon":235},"Security","\u002Fplugins\u002Fbuilt-in\u002Fsecurity","4.plugins\u002F1.built-in\u002Fsecurity","i-lucide-shield-check",{"title":237,"path":238,"stem":239,"icon":240},"Summary Extraction","\u002Fplugins\u002Fbuilt-in\u002Fsummary","4.plugins\u002F1.built-in\u002Fsummary","i-lucide-file-text",{"title":80,"path":242,"stem":243,"icon":83},"\u002Fplugins\u002Fbuilt-in\u002Fsyntax-highlight","4.plugins\u002F1.built-in\u002Fsyntax-highlight",{"title":245,"path":246,"stem":247,"icon":248},"Task List","\u002Fplugins\u002Fbuilt-in\u002Ftask-list","4.plugins\u002F1.built-in\u002Ftask-list","i-lucide-check-square",{"title":250,"path":251,"stem":252,"icon":253},"Table of Contents","\u002Fplugins\u002Fbuilt-in\u002Ftoc","4.plugins\u002F1.built-in\u002Ftoc","i-lucide-list",{"title":255,"path":256,"stem":257,"children":258,"page":39},"Custom","\u002Fplugins\u002Fcustom","4.plugins\u002F2.custom",[259,263,267],{"title":260,"path":261,"stem":262},"Plugin API","\u002Fplugins\u002Fcustom\u002Fplugin-api","4.plugins\u002F2.custom\u002F1.plugin-api",{"title":264,"path":265,"stem":266},"AST API","\u002Fplugins\u002Fcustom\u002Fast-api","4.plugins\u002F2.custom\u002F2.ast-api",{"title":268,"path":269,"stem":270},"Markdown-it","\u002Fplugins\u002Fcustom\u002Fmarkdown-it","4.plugins\u002F2.custom\u002F3.markdown-it",{"title":272,"path":273,"stem":274,"children":275,"page":39},"API Reference","\u002Fapi","5.api",[276,280,284,288],{"title":277,"path":278,"stem":279},"Render API","\u002Fapi\u002Frender","5.api\u002F0.render",{"title":281,"path":282,"stem":283},"Parse API","\u002Fapi\u002Fparse","5.api\u002F1.parse",{"title":285,"path":286,"stem":287},"Streaming API","\u002Fapi\u002Fauto-close","5.api\u002F2.auto-close",{"title":289,"path":290,"stem":291},"Cheat Sheet","\u002Fapi\u002Freference","5.api\u002F3.reference",{"title":293,"path":294,"stem":295,"children":296,"page":39},"Comparisons","\u002Fcompare","6.compare",[297,301,305,309],{"title":298,"path":299,"stem":300},"Comark vs MDX","\u002Fcompare\u002Fcomark-vs-mdx","6.compare\u002F1.comark-vs-mdx",{"title":302,"path":303,"stem":304},"Comark vs react-markdown","\u002Fcompare\u002Fcomark-vs-react-markdown","6.compare\u002F2.comark-vs-react-markdown",{"title":306,"path":307,"stem":308},"Comark vs Streamdown","\u002Fcompare\u002Fcomark-vs-streamdown","6.compare\u002F3.comark-vs-streamdown",{"title":310,"path":311,"stem":312},"Comark vs Markdoc","\u002Fcompare\u002Fcomark-vs-markdoc","6.compare\u002F4.comark-vs-markdoc",{"title":314,"path":315,"stem":316,"children":317,"page":39},"Knowledge Base","\u002Fkb","7.kb",[318,322,326,330],{"title":319,"path":320,"stem":321},"Why Comark?","\u002Fkb\u002Fwhy-comark","7.kb\u002F0.why-comark",{"title":323,"path":324,"stem":325},"Migration from MDC","\u002Fkb\u002Fmigration-from-mdc","7.kb\u002F2.migration-from-mdc",{"title":327,"path":328,"stem":329},"Migration from MDX","\u002Fkb\u002Fmigration-from-mdx","7.kb\u002F3.migration-from-mdx",{"title":331,"path":332,"stem":333},"Twoslash","\u002Fkb\u002Ftwoslash","7.kb\u002F4.twoslash",{"id":335,"title":310,"body":336,"description":939,"extension":526,"links":940,"meta":950,"navigation":958,"path":311,"seo":959,"stem":312,"__hash__":960},"docs\u002F6.compare\u002F4.comark-vs-markdoc.md",{"type":337,"value":338,"toc":928},"minimark",[339,353,358,513,517,520,646,649,653,656,667,733,737,740,798,822,826,847,851,876,879,883],[340,341,342,346,347,352],"p",{},[343,344,345],"strong",{},"TL;DR",": ",[348,349,351],"a",{"href":350},"https:\u002F\u002Fmarkdoc.dev","Markdoc"," (built by Stripe) and Comark share a philosophy: Markdown is data, components are declared in plain text, and parsing happens at runtime without a build step. They differ in what's built on top of the parser. Comark adds streaming auto-close for AI output, a more compact array-based AST, official renderers for Vue, Svelte, Angular, HTML, and ANSI, and compatibility with the markdown-it plugin ecosystem.",[354,355,357],"h2",{"id":356},"at-a-glance","At a Glance",[359,360,361,375],"table",{},[362,363,364],"thead",{},[365,366,367,370,373],"tr",{},[368,369],"th",{},[368,371,372],{},"Comark",[368,374,351],{},[376,377,378,395,405,419,430,441,452,474,487,498],"tbody",{},[365,379,380,384,390],{},[381,382,383],"td",{},"Component syntax",[381,385,386],{},[387,388,389],"code",{},"::callout{type=\"note\"}",[381,391,392],{},[387,393,394],{},"{% callout type=\"note\" %}",[365,396,397,400,403],{},[381,398,399],{},"Runtime parsing, no build step",[381,401,402],{},"Yes",[381,404,402],{},[365,406,407,410,416],{},[381,408,409],{},"Serializable AST",[381,411,412,413],{},"Yes, ",[387,414,415],{},"['tag', props, ...children]",[381,417,418],{},"Yes, renderable tree of node objects",[365,420,421,424,427],{},[381,422,423],{},"Streaming incomplete input",[381,425,426],{},"Auto-close at every frame",[381,428,429],{},"Not supported",[365,431,432,435,438],{},[381,433,434],{},"Official renderers",[381,436,437],{},"Vue, React, Svelte, Angular, Nuxt, HTML, ANSI",[381,439,440],{},"React, HTML",[365,442,443,446,449],{},[381,444,445],{},"Schema validation of tags",[381,447,448],{},"No, components validate their own props",[381,450,451],{},"Yes, first-class schemas per tag",[365,453,454,457,467],{},[381,455,456],{},"Variables & functions in content",[381,458,459,460,463,464],{},"Bindings via ",[387,461,462],{},":prop=\"expr\""," and ",[387,465,466],{},"{{ path }}",[381,468,469,470,473],{},"Built-in ",[387,471,472],{},"$variables"," and functions",[365,475,476,479,482],{},[381,477,478],{},"Partials",[381,480,481],{},"Handled in application code",[381,483,469,484],{},[387,485,486],{},"{% partial %}",[365,488,489,492,495],{},[381,490,491],{},"Plugin ecosystem",[381,493,494],{},"Comark plugins + markdown-it plugins",[381,496,497],{},"Custom nodes\u002Ftags configuration",[365,499,500,503,510],{},[381,501,502],{},"Syntax lineage",[381,504,505,509],{},[348,506,508],{"href":507},"https:\u002F\u002Ftalk.commonmark.org\u002Ft\u002Fgeneric-directives-plugins-syntax\u002F444","Markdown directives proposal",", 5 years of MDC in Nuxt Content",[381,511,512],{},"Stripe's internal docs platform",[354,514,516],{"id":515},"shared-philosophy","Shared Philosophy",[340,518,519],{},"Both tools reject the MDX model of compiling content into code. A Markdoc tag and a Comark component are declarations, not expressions:",[521,522,523,600],"code-group",{},[524,525,528],"pre",{"language":526,"filename":351,"class":527},"md","shiki shiki-themes material-theme-lighter material-theme-palenight",[387,529,531,568,569,568,587],{"class":530},"language-md",[532,533,536,540,544,547,550,553,556,560,562,565],"span",{"class":534,"style":535},"line","display: inline",[532,537,539],{"style":538},"color:#39ADB5;--shiki-dark:#89DDFF","{",[532,541,543],{"style":542},"color:#9C3EDA;--shiki-dark:#C792EA","%",[532,545,546],{"style":542}," callout",[532,548,549],{"style":542}," type",[532,551,552],{"style":538},"=",[532,554,555],{"style":538},"\"",[532,557,559],{"style":558},"color:#91B859;--shiki-dark:#C3E88D","note",[532,561,555],{"style":538},[532,563,564],{"style":542}," %",[532,566,567],{"style":538},"}","\n",[532,570,571,575,579,582,584],{"class":534,"style":535},[532,572,574],{"style":573},"color:#90A4AE;--shiki-dark:#BABED8","Useful information with ",[532,576,578],{"style":577},"color:#39ADB5;--shiki-light-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold","**",[532,580,134],{"style":581},"color:#E53935;--shiki-light-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[532,583,578],{"style":577},[532,585,586],{"style":573}," inside.",[532,588,589,591,593,596,598],{"class":534,"style":535},[532,590,539],{"style":538},[532,592,543],{"style":542},[532,594,595],{"style":542}," \u002Fcallout",[532,597,564],{"style":542},[532,599,567],{"style":538},[524,601,603],{"language":602,"filename":372,"class":527},"mdc",[387,604,606,568,630,568,642],{"class":605},"language-mdc",[532,607,608,611,615,617,620,622,624,626,628],{"class":534,"style":535},[532,609,610],{"style":538},"::",[532,612,614],{"style":613},"color:#E53935;--shiki-dark:#F07178","callout",[532,616,539],{"style":538},[532,618,619],{"style":542},"type",[532,621,552],{"style":538},[532,623,555],{"style":538},[532,625,559],{"style":558},[532,627,555],{"style":538},[532,629,567],{"style":538},[532,631,632,634,636,638,640],{"class":534,"style":535},[532,633,574],{"style":573},[532,635,578],{"style":577},[532,637,134],{"style":581},[532,639,578],{"style":577},[532,641,586],{"style":573},[532,643,644],{"class":534,"style":535},[532,645,610],{"style":538},[340,647,648],{},"Both parse to a serializable tree, both resolve components at render time from a registry, and both can run in a request handler. If you agree with \"Markdown as data, not code\", both are defensible choices. The differences are in the details below.",[354,650,652],{"id":651},"streaming","Streaming",[340,654,655],{},"Markdoc was built for documentation: complete files, validated against schemas, rendered as pages. Incomplete input is a parse-time problem it doesn't address.",[340,657,658,659,662,663,666],{},"Comark treats partial input as a primary use case. ",[348,660,661],{"href":286},"Auto-close"," completes unterminated syntax, including half-open ",[387,664,665],{},"::component"," blocks, so AI-generated content renders correctly token by token:",[524,668,670],{"language":669,"class":527},"ts",[387,671,673,568,700,568,702,568,727],{"class":672},"language-ts",[532,674,675,679,682,685,688,691,694,697],{"class":534,"style":535},[532,676,678],{"style":677},"color:#39ADB5;--shiki-light-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic","import",[532,680,681],{"style":538}," {",[532,683,684],{"style":573}," autoCloseMarkdown",[532,686,687],{"style":538}," }",[532,689,690],{"style":677}," from",[532,692,693],{"style":538}," '",[532,695,696],{"style":558},"comark",[532,698,699],{"style":538},"'",[532,701],{"class":534,"style":535},[532,703,704,708,711,713,716,719,722,724],{"class":534,"style":535},[532,705,707],{"style":706},"color:#6182B8;--shiki-dark:#82AAFF","autoCloseMarkdown",[532,709,710],{"style":573},"(",[532,712,699],{"style":538},[532,714,715],{"style":558},"::callout",[532,717,718],{"style":573},"\\n",[532,720,721],{"style":558},"Streaming in **prog",[532,723,699],{"style":538},[532,725,726],{"style":573},")",[532,728,729],{"class":534,"style":535},[532,730,732],{"style":731},"color:#90A4AE;--shiki-light-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic","\u002F\u002F '::callout\\nStreaming in **prog**\\n::'",[354,734,736],{"id":735},"ast-shape","AST Shape",[340,738,739],{},"Both produce trees; the shapes differ in weight. Comark nodes are plain arrays with a fixed layout:",[524,741,742],{"language":669,"class":527},[387,743,744],{"class":672},[532,745,746,749,751,753,755,758,760,762,765,767,769,771,774,777,779,781,783,785,788,790,793,795],{"class":534,"style":535},[532,747,748],{"style":573},"[",[532,750,699],{"style":538},[532,752,614],{"style":558},[532,754,699],{"style":538},[532,756,757],{"style":538},",",[532,759,681],{"style":538},[532,761,549],{"style":613},[532,763,764],{"style":538},":",[532,766,693],{"style":538},[532,768,559],{"style":558},[532,770,699],{"style":538},[532,772,773],{"style":538}," },",[532,775,776],{"style":573}," [",[532,778,699],{"style":538},[532,780,340],{"style":558},[532,782,699],{"style":538},[532,784,757],{"style":538},[532,786,787],{"style":538}," {},",[532,789,693],{"style":538},[532,791,792],{"style":558},"Useful information",[532,794,699],{"style":538},[532,796,797],{"style":573},"]]",[340,799,800,801,803,804,803,807,803,810,813,814,817,818,821],{},"Markdoc nodes are objects carrying ",[387,802,619],{},", ",[387,805,806],{},"tag",[387,808,809],{},"attributes",[387,811,812],{},"children",", and transform metadata. Comark's format is designed to be sent over the wire: parse on the server, ",[387,815,816],{},"JSON.stringify"," the result, and hydrate any renderer with it. See the ",[348,819,820],{"href":147},"AST reference",".",[354,823,825],{"id":824},"framework-coverage","Framework Coverage",[340,827,828,829,803,831,803,833,803,835,837,838,840,841,463,843,846],{},"Markdoc officially renders to React and HTML. Comark ships official renderers for ",[348,830,65],{"href":159},[348,832,56],{"href":165},[348,834,61],{"href":168},[348,836,46],{"href":171},", and ",[348,839,25],{"href":162},", plus ",[348,842,155],{"href":156},[348,844,845],{"href":175},"ANSI"," string output, all consuming the same AST.",[354,848,850],{"id":849},"what-markdoc-does-well","What Markdoc Does Well",[852,853,854,863],"ul",{},[855,856,857,860,861,821],"li",{},[343,858,859],{},"Schema validation",": Markdoc lets you declare each tag's allowed attributes and children, then validate documents against those schemas before rendering. Comark has no schema layer; invalid props surface in the component, and structural checks are yours to write with the ",[348,862,264],{"href":265},[855,864,865,868,869,871,872,875],{},[343,866,867],{},"Built-in variables, functions, and partials",": Markdoc resolves ",[387,870,472],{},", calls functions, and includes partials inside content. Comark keeps logic in the application: the ",[348,873,874],{"href":195},"binding plugin"," interpolates frontmatter and runtime data, and composition happens in your components.",[340,877,878],{},"For large documentation teams that need to enforce content structure editorially, Markdoc's validation layer is a genuine advantage.",[354,880,882],{"id":881},"faq","FAQ",[884,885,886,899,910,924],"accordion",{},[887,888,890,891,894,895,898],"accordion-item",{"label":889},"Is Comark's syntax a standard?","It follows the ",[348,892,893],{"href":507},"generic directives proposal"," discussed by the CommonMark community and has been used in production by Nuxt Content's MDC for over five years. Markdoc's ",[387,896,897],{},"{% %}"," syntax is specific to Markdoc.",[887,900,902,903,905,906,909],{"label":901},"Can Comark validate content like Markdoc schemas?","Not out of the box. You can implement checks with the ",[348,904,264],{"href":265},", walking the tree with ",[387,907,908],{},"visit()",", or validate props inside components. A schema layer like Markdoc's is not currently provided.",[887,911,913,914,916,917,919,920,923],{"label":912},"How do variables work in Comark?","The ",[348,915,874],{"href":195}," interpolates ",[387,918,466],{}," expressions from frontmatter, meta, or runtime data, and ",[387,921,922],{},":prop=\"expression\""," binds dynamic values to component props.",[887,925,927],{"label":926},"Which is better for documentation sites?","Both work well. Choose Markdoc if editorial schema validation is a hard requirement. Choose Comark if you need Vue\u002FSvelte\u002FAngular renderers, streaming, or the markdown-it plugin ecosystem.",{"title":929,"searchDepth":930,"depth":930,"links":931},"",2,[932,933,934,935,936,937,938],{"id":356,"depth":930,"text":357},{"id":515,"depth":930,"text":516},{"id":651,"depth":930,"text":652},{"id":735,"depth":930,"text":736},{"id":824,"depth":930,"text":825},{"id":849,"depth":930,"text":850},{"id":881,"depth":930,"text":882},"Comark and Markdoc both treat Markdown as data with runtime parsing. Comark adds streaming auto-close, a more compact AST, and renderers for Vue, Svelte, Angular, and terminals.",[941,946],{"label":942,"icon":943,"to":139,"color":944,"variant":945},"Component Syntax","i-lucide-puzzle","neutral","soft",{"label":947,"icon":948,"to":949,"color":944,"variant":945},"Playground","i-lucide-play","\u002Fplay",{"data":951},{"title":310,"description":939,"navigation":952,"seo":953,"links":955},{"title":310},{"title":954,"description":939},"Comark vs Markdoc: Runtime Markdown Component Syntax Compared",[956,957],{"label":942,"icon":943,"to":139,"color":944,"variant":945},{"label":947,"icon":948,"to":949,"color":944,"variant":945},{"title":310},{"title":954,"description":939},"zQSUyek6yYsBZXkF86vTGyxtkTSSvRIa0dPO_TpDdMQ",[962,964],{"title":306,"path":307,"stem":308,"description":963,"children":-1},"Streamdown streams Markdown in React. Comark streams Markdown with custom component syntax in Vue, React, Svelte, and Angular, with a decoupled parser and serializable AST.",{"title":319,"path":320,"stem":321,"description":965,"children":-1},"Markdown is human-readable, token-efficient, and AI-native. Comark extends it to interactive components with runtime parsing, multi-framework rendering, and first-class streaming.",1783608771583]