[{"data":1,"prerenderedAt":2175},["ShallowReactive",2],{"duxt-navigation-docs-docs":3,"i-lucide:rocket":832,"i-lucide:compass":837,"i-lucide:book-open":839,"i-lucide:ruler":841,"i-lucide:gavel":843,"i-lucide:list":845,"i-lucide:settings":847,"i-lucide:tag":849,"i-lucide:git-branch":851,"i-lucide:file-code":853,"i-lucide:blocks":855,"i-lucide:component":857,"i-lucide:function-square":859,"i-lucide:route":861,"i-lucide:wrench":863,"i-lucide:plug":865,"i-lucide:chevron-right":867,"i-lucide:menu":869,"i-lucide:chevron-down":871,"i-lucide:search":873,"i-simple-icons:github":875,"i-flag:gb-4x3":877,"i-lucide:moon":881,"docs-en-GB-\u002Freference\u002Fsources":883,"i-lucide:copy":2153,"i-lucide:thumbs-up":2155,"i-lucide:thumbs-down":2157,"i-lucide:star":2159,"i-lucide:circle-alert":2161,"i-simple-icons:discord":2163,"i-lucide:book-open-text":2165,"i-lucide:arrow-up-right":2167,"i-lucide:pencil":2169,"duxt-code-ts-refs: [\n  'main',                                     \u002F\u002F a branch\n  { branch: 'next', status: 'upcoming' },     \u002F\u002F the same, with a lifecycle\n  { tag: 'v2.0.0', label: 'v2' },             \u002F\u002F a tag\n  'latest'                                    \u002F\u002F the newest semver tag, resolved at build\n]\n":784,"duxt-code-ts-locales: [\n  'en-GB',                                              \u002F\u002F the default: docs\u002F itself\n  'de',                                                 \u002F\u002F docs\u002Fde\u002F\n  { locale: 'fr', path: 'translations\u002Ffr' },            \u002F\u002F somewhere else in this repo\n  { locale: 'es', repo: 'acme\u002Fdocs-es', path: 'docs' }  \u002F\u002F another repository\n]\n":784,"duxt-code-ts-refs: [\n  { tag: 'v2.0.0' },                     \u002F\u002F inherits the source's locales\n  { tag: 'v1.0.0', locales: ['en-GB'] }  \u002F\u002F original only\n]\n":784,"duxt-code-ts-generated: [\n  {\n    type: 'openapi',\n    label: 'API',\n    path: 'openapi\u002Fv2.yaml',\n    versions: [\n      { version: 'v2', path: 'openapi\u002Fv2.yaml' },\n      { version: 'v1', path: 'openapi\u002Fv1.yaml', status: 'deprecated' }\n    ]\n  }\n]\n":784,"i-lucide:arrow-left":2171,"i-lucide:arrow-right":2173},[4,25,94,148,743,751,771,826],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","1.getting-started",[9,13,19],{"title":5,"path":6,"stem":10,"icon":11,"description":12},"1.getting-started\u002Findex","lucide:rocket","What duxt is, and what arrives with a single line of config.",{"title":14,"path":15,"stem":16,"icon":17,"description":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","lucide:download","Add the layer, extend it, write Markdown.",{"title":20,"path":21,"stem":22,"icon":23,"description":24},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","lucide:settings","One file configures the whole site — what belongs in it, and how it merges.",{"title":26,"path":27,"stem":28,"children":29},"Concepts","\u002Fconcepts","2.concepts",[30,34,40,46,52,58,64,70,76,82,88],{"title":26,"path":27,"stem":31,"icon":32,"description":33},"2.concepts\u002Findex","lucide:compass","How the layer works — the sources model, the URL scheme, the collections and the checks.",{"title":35,"path":36,"stem":37,"icon":38,"description":39},"Layers and overriding","\u002Fconcepts\u002Flayers","2.concepts\u002F1.layers","lucide:layers","What a Nuxt layer gives you, what it takes away, and which paths do not resolve the way they read.",{"title":41,"path":42,"stem":43,"icon":44,"description":45},"Theming","\u002Fconcepts\u002Ftheming","2.concepts\u002F10.theming","lucide:palette","How the theme is put together — owned components, one token layer, and a dark mode that switches on a class.",{"title":47,"path":48,"stem":49,"icon":50,"description":51},"Sources","\u002Fconcepts\u002Fsources","2.concepts\u002F2.sources","lucide:git-branch","One list of sources becomes every collection, prefix and version the site serves.",{"title":53,"path":54,"stem":55,"icon":56,"description":57},"URLs and versions","\u002Fconcepts\u002Furls-and-versions","2.concepts\u002F3.urls-and-versions","lucide:git-compare","How the repository and version segments appear, and what a reader in an old version is told.",{"title":59,"path":60,"stem":61,"icon":62,"description":63},"Collections","\u002Fconcepts\u002Fcollections","2.concepts\u002F4.collections","lucide:database","What Content builds from the sources, and the four things the schema adds.",{"title":65,"path":66,"stem":67,"icon":68,"description":69},"Generated sections","\u002Fconcepts\u002Fgenerated-sections","2.concepts\u002F5.generated-sections","lucide:file-cog","An artefact plus a type, published as pages — what the registry is, and the two policies a type answers.",{"title":71,"path":72,"stem":73,"icon":74,"description":75},"What the build checks","\u002Fconcepts\u002Fbuild-checks","2.concepts\u002F6.build-checks","lucide:shield-check","The silent failures this layer had, turned into messages.",{"title":77,"path":78,"stem":79,"icon":80,"description":81},"Machine readers","\u002Fconcepts\u002Fmachine-readers","2.concepts\u002F7.machine-readers","lucide:bot","What a model gets — llms.txt, the raw Markdown of any page, and a real MCP server.",{"title":83,"path":84,"stem":85,"icon":86,"description":87},"SEO","\u002Fconcepts\u002Fseo","2.concepts\u002F8.seo","lucide:search","What every page emits for crawlers and social cards, which module writes it, and the one value the layer cannot guess.",{"title":89,"path":90,"stem":91,"icon":92,"description":93},"Localisation","\u002Fconcepts\u002Flocalisation","2.concepts\u002F9.localisation","lucide:languages","Seven locales ship with the layer, and every configured string takes three forms.",{"title":95,"path":96,"stem":97,"children":98},"Guides","\u002Fguides","3.guides",[99,103,109,114,119,124,130,136,142],{"title":95,"path":96,"stem":100,"icon":101,"description":102},"3.guides\u002Findex","lucide:book-open","One task per page, start to finish — several repositories, several versions, several languages, and a deploy.",{"title":104,"path":105,"stem":106,"icon":107,"description":108},"Several repositories","\u002Fguides\u002Fseveral-repositories","3.guides\u002F1.several-repositories","lucide:folder-git","Serve the documentation of several projects from one site.",{"title":110,"path":111,"stem":112,"icon":56,"description":113},"Several versions","\u002Fguides\u002Fseveral-versions","3.guides\u002F2.several-versions","Serve the same documentation at several refs, with a switcher and a banner.",{"title":115,"path":116,"stem":117,"icon":92,"description":118},"Several languages","\u002Fguides\u002Fseveral-languages","3.guides\u002F3.several-languages","Serve the interface in several languages, and translate the pages themselves.",{"title":120,"path":121,"stem":122,"icon":44,"description":123},"Override the theme","\u002Fguides\u002Foverride-the-theme","3.guides\u002F4.override-the-theme","Change a colour, replace a component, add a shadcn-vue primitive.",{"title":125,"path":126,"stem":127,"icon":128,"description":129},"Move a page","\u002Fguides\u002Fmove-a-page","3.guides\u002F5.move-a-page","lucide:signpost","redirectFrom in the frontmatter, turned into route rules under every prefix.",{"title":131,"path":132,"stem":133,"icon":134,"description":135},"Deploy a site","\u002Fguides\u002Fdeploy-a-site","3.guides\u002F6.deploy-a-site","lucide:cloud-upload","Where a duxt site can run, what it needs there, and why content is not refreshed at runtime.",{"title":137,"path":138,"stem":139,"icon":140,"description":141},"Collect page feedback","\u002Fguides\u002Fcollect-page-feedback","3.guides\u002F7.collect-page-feedback","lucide:thumbs-up","Wrap DuxtPageFeedback, keep the answer where your analytics already live.",{"title":143,"path":144,"stem":145,"icon":146,"description":147},"Brand your site","\u002Fguides\u002Fbrand-your-site","3.guides\u002F8.brand-your-site","lucide:badge-check","Set the name, the wordmark and the icons, so the site reads as yours rather than as the layer's.",{"title":149,"path":150,"stem":151,"children":152},"Reference","\u002Freference","4.reference",[153,157,161,193,197,203,343,490,611,656,716],{"title":149,"path":150,"stem":154,"icon":155,"description":156},"4.reference\u002Findex","lucide:list","The layer's public surface — config keys, frontmatter, components, composables and endpoints.",{"title":20,"path":158,"stem":159,"icon":23,"description":160},"\u002Freference\u002Fconfiguration","4.reference\u002F1.configuration","Every key under duxt in app.config.ts — what it controls, and when it is read.",{"title":162,"path":163,"stem":164,"children":165,"icon":167,"description":168},"Changelog","\u002Freference\u002Fchangelog","4.reference\u002F10.changelog\u002Findex",[166,169,175,181,187],{"title":162,"path":163,"stem":164,"icon":167,"description":168},"lucide:tag","A release log, published as pages — a timeline, a page per release, and a feed.",{"title":170,"path":171,"stem":172,"icon":173,"description":174},"Declaring the section","\u002Freference\u002Fchangelog\u002Fsection","4.reference\u002F10.changelog\u002F1.section","lucide:file-clock","The `changelog` section type — where the file lives, and the two policies it answers.",{"title":176,"path":177,"stem":178,"icon":179,"description":180},"Granularity","\u002Freference\u002Fchangelog\u002Fgranularity","4.reference\u002F10.changelog\u002F2.granularity","lucide:split","A page per release, or the file as the one page it was written as.",{"title":182,"path":183,"stem":184,"icon":185,"description":186},"What is read","\u002Freference\u002Fchangelog\u002Fwhat-is-read","4.reference\u002F10.changelog\u002F3.what-is-read","lucide:scan-text","Which headings become releases, which become groups, and what happens to the rest.",{"title":188,"path":189,"stem":190,"icon":191,"description":192},"Layout and components","\u002Freference\u002Fchangelog\u002Fcomponents","4.reference\u002F10.changelog\u002F4.components","lucide:box","The layout a split history renders in, and the two MDC components its pages are made of.",{"title":47,"path":194,"stem":195,"icon":50,"description":196},"\u002Freference\u002Fsources","4.reference\u002F2.sources","The fields of a source entry, its refs, and the options that shape the URLs.",{"title":198,"path":199,"stem":200,"icon":201,"description":202},"Frontmatter","\u002Freference\u002Ffrontmatter","4.reference\u002F3.frontmatter","lucide:file-code","The fields a page may carry beyond title and description, and the two the build fills in.",{"title":204,"path":205,"stem":206,"children":207,"icon":209,"description":210},"MDC components","\u002Freference\u002Fmdc-components","4.reference\u002F4.mdc-components\u002Findex",[208,211,217,223,229,235,241,247,253,259,297,303,308,314,320,326,332,338],{"title":204,"path":205,"stem":206,"icon":209,"description":210},"lucide:blocks","The blocks a Markdown page can call, one page each, with their props.",{"title":212,"path":213,"stem":214,"icon":215,"description":216},"Callout","\u002Freference\u002Fmdc-components\u002Fcallout","4.reference\u002F4.mdc-components\u002F1.callout","lucide:message-square-warning","An aside the reader is meant to stop at — a tip, a warning, a danger.",{"title":218,"path":219,"stem":220,"icon":221,"description":222},"Package managers","\u002Freference\u002Fmdc-components\u002Fpackage-managers","4.reference\u002F4.mdc-components\u002F10.package-managers","lucide:package","One command, one tab per package manager, remembered across pages.",{"title":224,"path":225,"stem":226,"icon":227,"description":228},"File tree","\u002Freference\u002Fmdc-components\u002Ffile-tree","4.reference\u002F4.mdc-components\u002F11.file-tree","lucide:folder-tree","A folder structure, with icons per file type.",{"title":230,"path":231,"stem":232,"icon":233,"description":234},"Preview","\u002Freference\u002Fmdc-components\u002Fpreview","4.reference\u002F4.mdc-components\u002F12.preview","lucide:eye","A component rendered as the page renders it, with its source beside it.",{"title":236,"path":237,"stem":238,"icon":239,"description":240},"Page cards","\u002Freference\u002Fmdc-components\u002Fpage-cards","4.reference\u002F4.mdc-components\u002F13.page-cards","lucide:layout-grid","A section's children, as cards.",{"title":242,"path":243,"stem":244,"icon":245,"description":246},"Partial","\u002Freference\u002Fmdc-components\u002Fpartial","4.reference\u002F4.mdc-components\u002F14.partial","lucide:puzzle","A block written once and rendered in every source that needs it.",{"title":248,"path":249,"stem":250,"icon":251,"description":252},"Since","\u002Freference\u002Fmdc-components\u002Fsince","4.reference\u002F4.mdc-components\u002F15.since","lucide:milestone","The version something arrived in, beside a heading.",{"title":254,"path":255,"stem":256,"icon":257,"description":258},"Mermaid","\u002Freference\u002Fmdc-components\u002Fmermaid","4.reference\u002F4.mdc-components\u002F16.mermaid","lucide:workflow","A diagram from a fence or a prop.",{"title":260,"path":261,"stem":262,"children":263,"icon":265,"description":266},"Prose overrides","\u002Freference\u002Fmdc-components\u002Fprose","4.reference\u002F4.mdc-components\u002F17.prose\u002Findex",[264,267,273,279,285,291],{"title":260,"path":261,"stem":262,"icon":265,"description":266},"lucide:type","What the layer changes about plain Markdown — links, headings, images, code and tables.",{"title":268,"path":269,"stem":270,"icon":271,"description":272},"ProseA","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-a","4.reference\u002F4.mdc-components\u002F17.prose\u002F1.prose-a","lucide:link","A link, resolved against the source it was written in.",{"title":274,"path":275,"stem":276,"icon":277,"description":278},"ProseH2, ProseH3, ProseH4","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-headings","4.reference\u002F4.mdc-components\u002F17.prose\u002F2.prose-headings","lucide:heading","Headings, each with a permalink anchor.",{"title":280,"path":281,"stem":282,"icon":283,"description":284},"ProseImg","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-img","4.reference\u002F4.mdc-components\u002F17.prose\u002F3.prose-img","lucide:image","An image: theme-aware, and zoomable.",{"title":286,"path":287,"stem":288,"icon":289,"description":290},"ProsePre","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-pre","4.reference\u002F4.mdc-components\u002F17.prose\u002F4.prose-pre","lucide:terminal","The code block: filename, language icon, copy button.",{"title":292,"path":293,"stem":294,"icon":295,"description":296},"ProseTable","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-table","4.reference\u002F4.mdc-components\u002F17.prose\u002F5.prose-table","lucide:table","A table that scrolls instead of the page.",{"title":298,"path":299,"stem":300,"icon":301,"description":302},"Steps","\u002Freference\u002Fmdc-components\u002Fsteps","4.reference\u002F4.mdc-components\u002F2.steps","lucide:list-ordered","An ordered list drawn as numbered steps on a rail.",{"title":304,"path":305,"stem":306,"icon":201,"description":307},"Code group","\u002Freference\u002Fmdc-components\u002Fcode-group","4.reference\u002F4.mdc-components\u002F3.code-group","Several fences as one tabbed block, labelled by filename.",{"title":309,"path":310,"stem":311,"icon":312,"description":313},"Tab group","\u002Freference\u002Fmdc-components\u002Ftab-group","4.reference\u002F4.mdc-components\u002F4.tab-group","lucide:panels-top-left","Tabs for anything that is not code.",{"title":315,"path":316,"stem":317,"icon":318,"description":319},"Tab","\u002Freference\u002Fmdc-components\u002Ftab","4.reference\u002F4.mdc-components\u002F5.tab","lucide:square","One panel of a tab group.",{"title":321,"path":322,"stem":323,"icon":324,"description":325},"Accordion","\u002Freference\u002Fmdc-components\u002Faccordion","4.reference\u002F4.mdc-components\u002F6.accordion","lucide:chevrons-up-down","Collapsible sections — a FAQ, or answers a reader picks from.",{"title":327,"path":328,"stem":329,"icon":330,"description":331},"Accordion item","\u002Freference\u002Fmdc-components\u002Faccordion-item","4.reference\u002F4.mdc-components\u002F7.accordion-item","lucide:chevron-down","One collapsible section.",{"title":333,"path":334,"stem":335,"icon":336,"description":337},"Field group","\u002Freference\u002Fmdc-components\u002Ffield-group","4.reference\u002F4.mdc-components\u002F8.field-group","lucide:list-tree","A list of fields as one block.",{"title":339,"path":340,"stem":341,"icon":167,"description":342},"Field","\u002Freference\u002Fmdc-components\u002Ffield","4.reference\u002F4.mdc-components\u002F9.field","One parameter, property or option, with its type and default.",{"title":344,"path":345,"stem":346,"children":347,"icon":349,"description":350},"Components","\u002Freference\u002Fcomponents","4.reference\u002F5.components\u002Findex",[348,351,371,412,459],{"title":344,"path":345,"stem":346,"icon":349,"description":350},"lucide:component","The layer's own components, one page each — what each is for, and what it takes.",{"title":352,"path":353,"stem":354,"children":355,"icon":357,"description":358},"Layout","\u002Freference\u002Fcomponents\u002Flayout","4.reference\u002F5.components\u002F1.layout\u002Findex",[356,359,365],{"title":352,"path":353,"stem":354,"icon":357,"description":358},"lucide:layout-panel-top","The two components that frame a page — the navbar and the footer.",{"title":360,"path":361,"stem":362,"icon":363,"description":364},"DuxtHeader","\u002Freference\u002Fcomponents\u002Flayout\u002Fduxt-header","4.reference\u002F5.components\u002F1.layout\u002F1.duxt-header","lucide:panel-top","The navbar: title, navigation, search, and the icon links.",{"title":366,"path":367,"stem":368,"icon":369,"description":370},"DuxtFooter","\u002Freference\u002Fcomponents\u002Flayout\u002Fduxt-footer","4.reference\u002F5.components\u002F1.layout\u002F2.duxt-footer","lucide:panel-bottom","The footer: the site's name, its legal links, and the layer's own line.",{"title":372,"path":373,"stem":374,"children":375,"icon":32,"description":377},"Navigation","\u002Freference\u002Fcomponents\u002Fnavigation","4.reference\u002F5.components\u002F2.navigation\u002Findex",[376,378,384,389,395,401,406],{"title":372,"path":373,"stem":374,"icon":32,"description":377},"Getting around — the section row, the sidebar, the trail, the contents and prev\u002Fnext.",{"title":379,"path":380,"stem":381,"icon":382,"description":383},"DuxtSections","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-sections","4.reference\u002F5.components\u002F2.navigation\u002F1.duxt-sections","lucide:rows-3","The second navbar row — the top-level parts of the documentation.",{"title":385,"path":386,"stem":387,"icon":336,"description":388},"DuxtNavigation","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-navigation","4.reference\u002F5.components\u002F2.navigation\u002F2.duxt-navigation","The sidebar tree.",{"title":390,"path":391,"stem":392,"icon":393,"description":394},"DuxtNavigationLink","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-navigation-link","4.reference\u002F5.components\u002F2.navigation\u002F3.duxt-navigation-link","lucide:link-2","One entry of the sidebar.",{"title":396,"path":397,"stem":398,"icon":399,"description":400},"DuxtBreadcrumb","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-breadcrumb","4.reference\u002F5.components\u002F2.navigation\u002F4.duxt-breadcrumb","lucide:chevrons-right","The trail above the page title.",{"title":402,"path":403,"stem":404,"icon":155,"description":405},"DuxtToc","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-toc","4.reference\u002F5.components\u002F2.navigation\u002F5.duxt-toc","The table of contents, and the aside under it.",{"title":407,"path":408,"stem":409,"icon":410,"description":411},"DuxtPageNav","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-page-nav","4.reference\u002F5.components\u002F2.navigation\u002F6.duxt-page-nav","lucide:arrow-left-right","Previous and next, bounded by the section.",{"title":413,"path":414,"stem":415,"children":416,"icon":418,"description":419},"Controls","\u002Freference\u002Fcomponents\u002Fcontrols","4.reference\u002F5.components\u002F3.controls\u002Findex",[417,420,425,430,436,441,447,453],{"title":413,"path":414,"stem":415,"icon":418,"description":419},"lucide:sliders-horizontal","What a reader operates — search, the switchers, the shortcut sheet, and two indicators.",{"title":421,"path":422,"stem":423,"icon":86,"description":424},"DuxtSearch","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-search","4.reference\u002F5.components\u002F3.controls\u002F1.duxt-search","Search across every source, ranked together.",{"title":426,"path":427,"stem":428,"icon":38,"description":429},"DuxtVersion","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-version","4.reference\u002F5.components\u002F3.controls\u002F2.duxt-version","The version badge, and the switcher when there is more than one.",{"title":431,"path":432,"stem":433,"icon":434,"description":435},"DuxtVersionBanner","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-version-banner","4.reference\u002F5.components\u002F3.controls\u002F3.duxt-version-banner","lucide:triangle-alert","The bar telling a reader this version is not the current one.",{"title":437,"path":438,"stem":439,"icon":92,"description":440},"DuxtLocale","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-locale","4.reference\u002F5.components\u002F3.controls\u002F4.duxt-locale","The language switcher.",{"title":442,"path":443,"stem":444,"icon":445,"description":446},"DuxtProgress","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-progress","4.reference\u002F5.components\u002F3.controls\u002F5.duxt-progress","lucide:loader","How far down the page the reader is.",{"title":448,"path":449,"stem":450,"icon":451,"description":452},"DuxtShortcuts","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-shortcuts","4.reference\u002F5.components\u002F3.controls\u002F6.duxt-shortcuts","lucide:keyboard","The keyboard shortcut sheet, on ?.",{"title":454,"path":455,"stem":456,"icon":457,"description":458},"DuxtSkipLink","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-skip-link","4.reference\u002F5.components\u002F3.controls\u002F7.duxt-skip-link","lucide:skip-forward","The first focusable element on the page.",{"title":460,"path":461,"stem":462,"children":463,"icon":465,"description":466},"Page","\u002Freference\u002Fcomponents\u002Fpage","4.reference\u002F5.components\u002F4.page\u002Findex",[464,467,473,479,484],{"title":460,"path":461,"stem":462,"icon":465,"description":466},"lucide:file-text","The components that belong to the page itself.",{"title":468,"path":469,"stem":470,"icon":471,"description":472},"DuxtPageInfo","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-page-info","4.reference\u002F5.components\u002F4.page\u002F1.duxt-page-info","lucide:git-commit-horizontal","Where the page came from: edit link, last updated, contributors.",{"title":474,"path":475,"stem":476,"icon":477,"description":478},"DuxtCopyPage","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-copy-page","4.reference\u002F5.components\u002F4.page\u002F2.duxt-copy-page","lucide:clipboard-copy","Hand this page to a model, or read its source.",{"title":480,"path":481,"stem":482,"icon":140,"description":483},"DuxtPageFeedback","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-page-feedback","4.reference\u002F5.components\u002F4.page\u002F3.duxt-page-feedback","Was this page helpful?",{"title":485,"path":486,"stem":487,"icon":488,"description":489},"DuxtCodeBlock","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-code-block","4.reference\u002F5.components\u002F4.page\u002F4.duxt-code-block","lucide:code","The card around a code block.",{"title":491,"path":492,"stem":493,"children":494,"icon":496,"description":497},"Composables","\u002Freference\u002Fcomposables","4.reference\u002F6.composables\u002Findex",[495,498,532,561],{"title":491,"path":492,"stem":493,"icon":496,"description":497},"lucide:function-square","The functions the layer exposes to your own components, one page each.",{"title":499,"path":500,"stem":501,"children":502,"icon":62,"description":504},"Config and content","\u002Freference\u002Fcomposables\u002Fconfig-and-content","4.reference\u002F6.composables\u002F1.config-and-content\u002Findex",[503,505,510,516,521,527],{"title":499,"path":500,"stem":501,"icon":62,"description":504},"The merged config, and which collection serves the page being read.",{"title":506,"path":507,"stem":508,"icon":23,"description":509},"useDuxtConfig()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-config","4.reference\u002F6.composables\u002F1.config-and-content\u002F1.use-duxt-config","The merged config, every text field already resolved.",{"title":511,"path":512,"stem":513,"icon":514,"description":515},"useDuxtCollection()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-collection","4.reference\u002F6.composables\u002F1.config-and-content\u002F2.use-duxt-collection","lucide:library","Which collection serves this route.",{"title":517,"path":518,"stem":519,"icon":336,"description":520},"useDuxtNavigation()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-navigation","4.reference\u002F6.composables\u002F1.config-and-content\u002F3.use-duxt-navigation","The navigation tree for the collection serving this route.",{"title":522,"path":523,"stem":524,"icon":525,"description":526},"useDuxtSection()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-section","4.reference\u002F6.composables\u002F1.config-and-content\u002F4.use-duxt-section","lucide:folder-open","The part of the documentation this page is in.",{"title":528,"path":529,"stem":530,"icon":399,"description":531},"useDuxtBreadcrumb()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-breadcrumb","4.reference\u002F6.composables\u002F1.config-and-content\u002F5.use-duxt-breadcrumb","The trail from the section down to a page.",{"title":533,"path":534,"stem":535,"children":536,"icon":538,"description":539},"Paths and versions","\u002Freference\u002Fcomposables\u002Fpaths-and-versions","4.reference\u002F6.composables\u002F2.paths-and-versions\u002Findex",[537,540,545,550,555],{"title":533,"path":534,"stem":535,"icon":538,"description":539},"lucide:route","Reading a URL, writing one back out, and knowing which version is being read.",{"title":541,"path":542,"stem":543,"icon":251,"description":544},"useDuxtPath()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-path","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F1.use-duxt-path","The path the documentation is at, locale stripped.",{"title":546,"path":547,"stem":548,"icon":271,"description":549},"useDuxtLink()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-link","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F2.use-duxt-link","A documentation path, written back out as a link.",{"title":551,"path":552,"stem":553,"icon":38,"description":554},"useDuxtVersion()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-version","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F3.use-duxt-version","What the switcher shows, what the banner says, whether to index.",{"title":556,"path":557,"stem":558,"icon":559,"description":560},"useDuxtSiteUrl()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-site-url","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F4.use-duxt-site-url","lucide:globe","The configured origin, and paths made absolute.",{"title":562,"path":563,"stem":564,"children":565,"icon":101,"description":567},"Reading experience","\u002Freference\u002Fcomposables\u002Freading","4.reference\u002F6.composables\u002F3.reading\u002Findex",[566,568,572,578,583,589,595,600,606],{"title":562,"path":563,"stem":564,"icon":101,"description":567},"Search, headings, focus, history, and the choices a reader makes.",{"title":569,"path":570,"stem":571,"icon":86,"description":424},"useDuxtSearch()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-search","4.reference\u002F6.composables\u002F3.reading\u002F1.use-duxt-search",{"title":573,"path":574,"stem":575,"icon":576,"description":577},"useFuzzySearch()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-fuzzy-search","4.reference\u002F6.composables\u002F3.reading\u002F2.use-fuzzy-search","lucide:spell-check","Typo tolerance beside the exact index.",{"title":579,"path":580,"stem":581,"icon":277,"description":582},"useActiveHeading()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-active-heading","4.reference\u002F6.composables\u002F3.reading\u002F3.use-active-heading","The heading currently in view.",{"title":584,"path":585,"stem":586,"icon":587,"description":588},"useDuxtPageFocus()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-page-focus","4.reference\u002F6.composables\u002F3.reading\u002F4.use-duxt-page-focus","lucide:focus","Moves focus to the heading after a client-side navigation.",{"title":590,"path":591,"stem":592,"icon":593,"description":594},"useRecentPages()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-recent-pages","4.reference\u002F6.composables\u002F3.reading\u002F5.use-recent-pages","lucide:history","The last five pages this reader opened.",{"title":596,"path":597,"stem":598,"icon":221,"description":599},"usePackageManager()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-package-manager","4.reference\u002F6.composables\u002F3.reading\u002F6.use-package-manager","The package manager a reader picked.",{"title":601,"path":602,"stem":603,"icon":604,"description":605},"useDuxtToast()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-toast","4.reference\u002F6.composables\u002F3.reading\u002F7.use-duxt-toast","lucide:bell","Notifications, wrapped so no component imports the library.",{"title":607,"path":608,"stem":609,"icon":451,"description":610},"useDuxtShortcuts()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-shortcuts","4.reference\u002F6.composables\u002F3.reading\u002F8.use-duxt-shortcuts","The keys the theme listens to.",{"title":612,"path":613,"stem":614,"children":615,"icon":538,"description":617},"Endpoints","\u002Freference\u002Fendpoints","4.reference\u002F7.endpoints\u002Findex",[616,618,623,629,634,639,644,650],{"title":612,"path":613,"stem":614,"icon":538,"description":617},"Everything the site serves besides pages, one page each.",{"title":619,"path":620,"stem":621,"icon":465,"description":622},"\u002Fllms.txt","\u002Freference\u002Fendpoints\u002Fllms-txt","4.reference\u002F7.endpoints\u002F1.llms-txt","The documentation as a Markdown index, per llmstxt.org.",{"title":624,"path":625,"stem":626,"icon":627,"description":628},"\u002Fllms-full.txt","\u002Freference\u002Fendpoints\u002Fllms-full-txt","4.reference\u002F7.endpoints\u002F2.llms-full-txt","lucide:file-stack","The same pages, whole, in one Markdown file.",{"title":630,"path":631,"stem":632,"icon":201,"description":633},"\u003Cpage>.md","\u002Freference\u002Fendpoints\u002Fpage-markdown","4.reference\u002F7.endpoints\u002F3.page-markdown","Any page source, at its own URL plus .md.",{"title":635,"path":636,"stem":637,"icon":80,"description":638},"\u002Fmcp","\u002Freference\u002Fendpoints\u002Fmcp","4.reference\u002F7.endpoints\u002F4.mcp","An MCP server over the same content.",{"title":640,"path":641,"stem":642,"icon":86,"description":643},"\u002Fsitemap.xml and \u002Frobots.txt","\u002Freference\u002Fendpoints\u002Fsitemap-and-robots","4.reference\u002F7.endpoints\u002F5.sitemap-and-robots","What a crawler is pointed at, and what it is kept out of.",{"title":645,"path":646,"stem":647,"icon":648,"description":649},"\u002Frss.xml","\u002Freference\u002Fendpoints\u002Frss-xml","4.reference\u002F7.endpoints\u002F6.rss-xml","lucide:rss","The feed, once a section is named.",{"title":651,"path":652,"stem":653,"icon":654,"description":655},"\u002F_duxt\u002Fdevtools","\u002Freference\u002Fendpoints\u002Fdevtools","4.reference\u002F7.endpoints\u002F7.devtools","lucide:wrench","The route the Nuxt Devtools panel is served from. Dev only.",{"title":657,"path":658,"stem":659,"children":660,"icon":654,"description":662},"Devtools","\u002Freference\u002Fdevtools","4.reference\u002F8.devtools\u002Findex",[661,663,667,672,677,683,689,695,700,705,710],{"title":657,"path":658,"stem":659,"icon":654,"description":662},"Ten panels that show what your sources became. Dev only.",{"title":47,"path":664,"stem":665,"icon":514,"description":666},"\u002Freference\u002Fdevtools\u002Fsources","4.reference\u002F8.devtools\u002F1.sources","What `duxt.sources` became — one collection per source, version and language.",{"title":668,"path":669,"stem":670,"icon":128,"description":671},"Redirects","\u002Freference\u002Fdevtools\u002Fredirects","4.reference\u002F8.devtools\u002F10.redirects","Every redirect the server ships, and which of them the layer wrote.",{"title":673,"path":674,"stem":675,"icon":538,"description":676},"Paths","\u002Freference\u002Fdevtools\u002Fpaths","4.reference\u002F8.devtools\u002F2.paths","Paste a URL, see which source claims it and what it finds there.",{"title":678,"path":679,"stem":680,"icon":681,"description":682},"Pages","\u002Freference\u002Fdevtools\u002Fpages","4.reference\u002F8.devtools\u002F3.pages","lucide:files","Every page of every collection, with its frontmatter and git metadata.",{"title":684,"path":685,"stem":686,"icon":687,"description":688},"Versions","\u002Freference\u002Fdevtools\u002Fversions","4.reference\u002F8.devtools\u002F4.versions","lucide:columns-3","Which version — and which language — carries which page.",{"title":690,"path":691,"stem":692,"icon":693,"description":694},"Checks","\u002Freference\u002Fdevtools\u002Fchecks","4.reference\u002F8.devtools\u002F5.checks","lucide:check-check","The build validator, run against what the site is serving now.",{"title":696,"path":697,"stem":698,"icon":86,"description":699},"Search","\u002Freference\u002Fdevtools\u002Fsearch","4.reference\u002F8.devtools\u002F6.search","What the search index holds, through the same query the dialog runs.",{"title":701,"path":702,"stem":703,"icon":418,"description":704},"Config","\u002Freference\u002Fdevtools\u002Fconfig","4.reference\u002F8.devtools\u002F7.config","The merged `duxt` config, and which side of the merge each value came from.",{"title":706,"path":707,"stem":708,"icon":92,"description":709},"i18n","\u002Freference\u002Fdevtools\u002Fi18n","4.reference\u002F8.devtools\u002F8.i18n","Message keys per locale, against the base language.",{"title":711,"path":712,"stem":713,"icon":714,"description":715},"Cache","\u002Freference\u002Fdevtools\u002Fcache","4.reference\u002F8.devtools\u002F9.cache","lucide:hard-drive","Content's download cache, and a way to drop one entry.",{"title":717,"path":718,"stem":719,"children":720,"icon":722,"description":723},"API reference","\u002Freference\u002Fopenapi","4.reference\u002F9.openapi\u002Findex",[721,724,728,732,738],{"title":717,"path":718,"stem":719,"icon":722,"description":723},"lucide:plug","An OpenAPI document, published as reference pages with a client that sends real requests.",{"title":170,"path":725,"stem":726,"icon":201,"description":727},"\u002Freference\u002Fopenapi\u002Fsection","4.reference\u002F9.openapi\u002F1.section","The `openapi` section type — where the document lives, and what it becomes.",{"title":344,"path":729,"stem":730,"icon":191,"description":731},"\u002Freference\u002Fopenapi\u002Fcomponents","4.reference\u002F9.openapi\u002F2.components","The three MDC components a generated reference page is made of.",{"title":733,"path":734,"stem":735,"icon":736,"description":737},"The try-it client","\u002Freference\u002Fopenapi\u002Ftry-it","4.reference\u002F9.openapi\u002F3.try-it","lucide:send","A real request, sent by the reader's own browser.",{"title":739,"path":740,"stem":741,"icon":488,"description":742},"Request samples","\u002Freference\u002Fopenapi\u002Frequest-samples","4.reference\u002F9.openapi\u002F4.request-samples","The same request in twelve clients, and how to add your own.",{"title":744,"path":745,"stem":746,"children":747,"icon":749,"description":750},"Credits","\u002Fcredits","5.credits\u002Findex",[748],{"title":744,"path":745,"stem":746,"icon":749,"description":750},"lucide:heart","What duxt is built on, and what it was built after.",{"title":752,"path":753,"stem":754,"children":755},"Conventions","\u002Fconventions","6.conventions",[756,760,766],{"title":752,"path":753,"stem":757,"icon":758,"description":759},"6.conventions\u002Findex","lucide:ruler","Project-specific rules — the ones a reader could not infer from the code.",{"title":761,"path":762,"stem":763,"icon":764,"description":765},"Branding","\u002Fconventions\u002Fbranding","6.conventions\u002F1.branding","lucide:shapes","The [d]uxt mark — where each asset is used, why the icon's brackets are redrawn, and the colours that are fixed.",{"title":767,"path":768,"stem":769,"icon":283,"description":770},"Icons","\u002Fconventions\u002Ficons","6.conventions\u002F2.icons","Four icon sets, and the one question that decides which of them draws a given mark.",{"title":772,"path":773,"stem":774,"children":775},"Architecture decisions","\u002Fadr","99.adr",[776,780,786,791,796,801,806,811,816,821],{"title":772,"path":773,"stem":777,"icon":778,"description":779},"99.adr\u002Findex","lucide:gavel","The decision log — every architecture decision recorded for duxt.",{"title":781,"path":782,"stem":783,"icon":784,"description":785},"Build duxt as a layer carrying a module","\u002Fadr\u002F0001-build-duxt-as-a-layer-carrying-a-module","99.adr\u002F0001-build-duxt-as-a-layer-carrying-a-module",null,"Distribute the theme as a Nuxt layer whose root is the package, rather than as a starter template.",{"title":787,"path":788,"stem":789,"icon":784,"description":790},"Generate the collections from one source list","\u002Fadr\u002F0002-generate-the-collections-from-one-source-list","99.adr\u002F0002-generate-the-collections-from-one-source-list","Compute Content collections from a compact sources list at config load time instead of having consumers declare them.",{"title":792,"path":793,"stem":794,"icon":784,"description":795},"Decide the URL prefixes at build time","\u002Fadr\u002F0003-decide-the-url-prefixes-at-build-time","99.adr\u002F0003-decide-the-url-prefixes-at-build-time","Whether a repository or version segment appears is settled by the source list before the first request, never per request.",{"title":797,"path":798,"stem":799,"icon":784,"description":800},"Render Markdown components with MDC","\u002Fadr\u002F0004-render-markdown-components-with-mdc","99.adr\u002F0004-render-markdown-components-with-mdc","Use Content's own MDC syntax for components inside Markdown rather than adopting MDX.",{"title":802,"path":803,"stem":804,"icon":784,"description":805},"Ship the layer without owner-specific links","\u002Fadr\u002F0005-ship-the-layer-without-owner-specific-links","99.adr\u002F0005-ship-the-layer-without-owner-specific-links","Every default that would name a specific project — repository, issue tracker, community, imprint — ships empty.",{"title":807,"path":808,"stem":809,"icon":784,"description":810},"Rebuild on a schedule rather than refresh at runtime","\u002Fadr\u002F0006-rebuild-on-a-schedule-rather-than-refresh-at-runtime","99.adr\u002F0006-rebuild-on-a-schedule-rather-than-refresh-at-runtime","A site reading another repository picks up its changes when it builds, and no runtime refresh is offered.",{"title":812,"path":813,"stem":814,"icon":784,"description":815},"Serve translations as collections of their own","\u002Fadr\u002F0007-serve-translations-as-collections-of-their-own","99.adr\u002F0007-serve-translations-as-collections-of-their-own","Add a locale dimension to a source rather than a locale segment to the content path.",{"title":817,"path":818,"stem":819,"icon":784,"description":820},"Build the theme on owned shadcn-vue components","\u002Fadr\u002F0008-build-the-theme-on-owned-shadcn-vue-components","99.adr\u002F0008-build-the-theme-on-owned-shadcn-vue-components","The layer holds the source of its interface components rather than importing them from a component library or a ready-made documentation theme.",{"title":822,"path":823,"stem":824,"icon":784,"description":825},"Take the SEO stack from the Nuxt SEO bundle","\u002Fadr\u002F0009-take-the-seo-stack-from-the-nuxt-seo-bundle","99.adr\u002F0009-take-the-seo-stack-from-the-nuxt-seo-bundle","The layer installs @nuxtjs\u002Fseo and hands it the head tags and structured data it used to write by hand, keeping only the rules that depend on versions and translations.",{"title":827,"path":828,"stem":829,"icon":830,"description":831},"Documentation","\u002F","index","lucide:book-open-text","A Nuxt layer that turns a repository's docs folder into a versioned, multi-repo documentation site.",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":836},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"\u002F>\u003Cpath d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"\u002F>\u003Cpath d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":838},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m16.24 7.76l-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":840},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":842},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Zm-6.8-2.8l2-2m-5-1l2-2m-5-1l2-2m7 11l2-2\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":844},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m14 13l-8.381 8.38a1 1 0 0 1-3.001-3l8.384-8.381M16 16l6-6m-.5.5l-8-8M8 8l6-6M8.5 7.5l8 8\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":846},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 5h.01M3 12h.01M3 19h.01M8 5h13M8 12h13M8 19h13\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":848},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0a2.34 2.34 0 0 0 3.319 1.915a2.34 2.34 0 0 1 2.33 4.033a2.34 2.34 0 0 0 0 3.831a2.34 2.34 0 0 1-2.33 4.033a2.34 2.34 0 0 0-3.319 1.915a2.34 2.34 0 0 1-4.659 0a2.34 2.34 0 0 0-3.32-1.915a2.34 2.34 0 0 1-2.33-4.033a2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"\u002F>\u003Ccircle cx=\"12\" cy=\"12\" r=\"3\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":850},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"\u002F>\u003Ccircle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":852},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 6a9 9 0 0 0-9 9V3\"\u002F>\u003Ccircle cx=\"18\" cy=\"6\" r=\"3\"\u002F>\u003Ccircle cx=\"6\" cy=\"18\" r=\"3\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":854},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"\u002F>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5m-10 4.5L8 15l2 2.5m4-5l2 2.5l-2 2.5\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":856},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2\"\u002F>\u003Crect width=\"8\" height=\"8\" x=\"14\" y=\"2\" rx=\"1\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":858},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0zm-13.239 0a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0zm6.619 6.619a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0zm0-13.238a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":860},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3m-6 4.2h5.7\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":862},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"6\" cy=\"19\" r=\"3\"\u002F>\u003Cpath d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\"\u002F>\u003Ccircle cx=\"18\" cy=\"5\" r=\"3\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":864},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":866},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 22v-5m3-9V2m2 6a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1zM9 8V2\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":868},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 18l6-6l-6-6\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":870},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":872},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":874},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":876},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":833,"top":833,"width":878,"height":879,"rotate":833,"vFlip":835,"hFlip":835,"body":880},640,480,"\u003Cpath fill=\"#012169\" d=\"M0 0h640v480H0z\"\u002F>\u003Cpath fill=\"#fff\" d=\"m75 0l244 181L562 0h78v62L400 241l240 178v61h-80L320 301L81 480H0v-60l239-178L0 64V0z\"\u002F>\u003Cpath fill=\"#c8102e\" d=\"m424 281l216 159v40L369 281zm-184 20l6 35L54 480H0zM640 0v3L391 191l2-44L590 0zM0 0l239 176h-60L0 42z\"\u002F>\u003Cpath fill=\"#fff\" d=\"M241 0v480h160V0zM0 160v160h640V160z\"\u002F>\u003Cpath fill=\"#c8102e\" d=\"M0 193v96h640v-96zM273 0v480h96V0z\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":882},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"page":884,"from":2152,"asked":2152},{"id":885,"title":47,"body":886,"compare":784,"contributors":2142,"date":784,"description":196,"extension":2145,"icon":50,"lastUpdated":2146,"layout":784,"meta":2147,"navigation":835,"path":194,"rawbody":2148,"redirectFrom":784,"seo":2149,"sitemap":2150,"stem":195,"__hash__":2151},"docs\u002F4.reference\u002F2.sources.md",{"type":887,"value":888,"toc":2130},"minimark",[889,905,910,1099,1102,1132,1147,1150,1164,1256,1270,1273,1276,1357,1373,1394,1403,1449,1463,1466,1530,1535,1538,1546,1701,1713,1721,1726,1748,1854,1918,1933,1943,1955,1959,1962,1994,2005,2010,2014,2084,2088,2120,2126],[890,891,892,896,897,900,901,904],"p",{},[893,894,895],"code",{},"duxt.sources"," is a list of source entries; ",[893,898,899],{},"duxt.sourceOptions"," says how they\nbecome URLs. Both are read at build time. What they generate, and why, is in\n",[902,903,47],"a",{"href":48},".",[906,907,909],"h2",{"id":908},"a-source-entry","A source entry",[911,912,913,929],"table",{},[914,915,916],"thead",{},[917,918,919,923,926],"tr",{},[920,921,339],"th",{"align":922},"left",[920,924,925],{"align":922},"Type",[920,927,928],{"align":922},"Notes",[930,931,932,948,969,982,1000,1013,1031,1043,1058,1073,1086],"tbody",{},[917,933,934,940,945],{},[935,936,937],"td",{"align":922},[893,938,939],{},"path",[935,941,942],{"align":922},[893,943,944],{},"string",[935,946,947],{"align":922},"Folder holding the Markdown, relative to the repository root",[917,949,950,955,959],{},[935,951,952],{"align":922},[893,953,954],{},"repo",[935,956,957],{"align":922},[893,958,944],{},[935,960,961,964,965],{"align":922},[893,962,963],{},"owner\u002Fname"," or a git URL. ",[966,967,968],"strong",{},"Omitted means this repository",[917,970,971,976,979],{},[935,972,973],{"align":922},[893,974,975],{},"refs",[935,977,978],{"align":922},"ref list",[935,980,981],{"align":922},"Refs to publish as versions. Omitted means the current checkout",[917,983,984,989,993],{},[935,985,986],{"align":922},[893,987,988],{},"version",[935,990,991],{"align":922},[893,992,944],{},[935,994,995,996,999],{"align":922},"The version this source ",[966,997,998],{},"is",", where no ref names one",[917,1001,1002,1007,1010],{},[935,1003,1004],{"align":922},[893,1005,1006],{},"label",[935,1008,1009],{"align":922},"text",[935,1011,1012],{"align":922},"Shown in the switcher and used in the URL; defaults to the ref",[917,1014,1015,1020,1024],{},[935,1016,1017],{"align":922},[893,1018,1019],{},"slug",[935,1021,1022],{"align":922},[893,1023,944],{},[935,1025,1026,1027,1030],{"align":922},"This source's URL segment. ",[966,1028,1029],{},"Naming one claims it"," — see below",[917,1032,1033,1038,1040],{},[935,1034,1035],{"align":922},[893,1036,1037],{},"status",[935,1039,1037],{"align":922},[935,1041,1042],{"align":922},"Lifecycle of every version this entry publishes",[917,1044,1045,1050,1055],{},[935,1046,1047],{"align":922},[893,1048,1049],{},"origin",[935,1051,1052],{"align":922},[893,1053,1054],{},"{ repo, ref? }",[935,1056,1057],{"align":922},"Where pages read off disk live, for links back to them",[917,1059,1060,1065,1070],{},[935,1061,1062],{"align":922},[893,1063,1064],{},"history",[935,1066,1067],{"align":922},[893,1068,1069],{},"boolean",[935,1071,1072],{"align":922},"Read this source's git history",[917,1074,1075,1080,1083],{},[935,1076,1077],{"align":922},[893,1078,1079],{},"locales",[935,1081,1082],{"align":922},"locale list",[935,1084,1085],{"align":922},"Languages this source is available in — see below",[917,1087,1088,1093,1096],{},[935,1089,1090],{"align":922},[893,1091,1092],{},"generated",[935,1094,1095],{"align":922},"section list",[935,1097,1098],{"align":922},"Artefacts published as pages beside the Markdown — see below",[890,1100,1101],{},"Two fields are easy to confuse and expensive to get wrong:",[1103,1104,1105,1120],"ul",{},[1106,1107,1108,1116,1117,1119],"li",{},[966,1109,1110,1112,1113,1115],{},[893,1111,954],{}," downloads, ",[893,1114,1049],{}," only links."," Naming your own repository in ",[893,1118,954],{},"\nhas the build clone the checkout it is already standing in.",[1106,1121,1122,1127,1128,1131],{},[966,1123,1124,1126],{},[893,1125,1064],{}," costs a full clone."," Content clones a remote repository with\n",[893,1129,1130],{},"--depth 1",", so its checkout holds one commit and every file looks as if the\nperson who cut the tip wrote it — wrong data, not missing data. Turning this on\nunshallows the clone once. A source read off disk is a full checkout already and\nis read regardless.",[890,1133,1134,1139,1140,1142,1143,1146],{},[966,1135,1136,1138],{},[893,1137,1019],{}," claims a segment."," A source is normally given one only once the list\nnames more than one repository — all or nothing, across the whole site. A source\nthat writes its own ",[893,1141,1019],{}," is served under it either way, and the sources that\nwrite none stay where they are, which is what lets one thing sit at ",[893,1144,1145],{},"\u002Fdemo","\nbeside documentation that keeps the root.",[906,1148,1149],{"id":975},"Refs",[890,1151,1152,1153,1156,1157,1160,1161,904],{},"A bare string is a ",[966,1154,1155],{},"branch",". A tag has to say so: git keeps branches and tags\nin separate namespaces, and asking for a tag under ",[893,1158,1159],{},"refs\u002Fheads"," fails the build\nwith ",[893,1162,1163],{},"Could not find refs\u002Fheads\u002F…",[1165,1166,1171],"pre",{"className":1167,"code":1168,"language":1169,"meta":1170,"style":1170},"language-ts shiki shiki-themes github-light github-dark","refs: [\n  'main',                                     \u002F\u002F a branch\n  { branch: 'next', status: 'upcoming' },     \u002F\u002F the same, with a lifecycle\n  { tag: 'v2.0.0', label: 'v2' },             \u002F\u002F a tag\n  'latest'                                    \u002F\u002F the newest semver tag, resolved at build\n]\n","ts","",[893,1172,1173,1185,1199,1220,1241,1250],{"__ignoreMap":1170},[1174,1175,1178,1181],"span",{"class":1176,"line":1177},"line",1,[1174,1179,975],{"class":1180},"sScJk",[1174,1182,1184],{"class":1183},"sVt8B",": [\n",[1174,1186,1188,1192,1195],{"class":1176,"line":1187},2,[1174,1189,1191],{"class":1190},"sZZnC","  'main'",[1174,1193,1194],{"class":1183},",                                     ",[1174,1196,1198],{"class":1197},"sJ8bj","\u002F\u002F a branch\n",[1174,1200,1202,1205,1208,1211,1214,1217],{"class":1176,"line":1201},3,[1174,1203,1204],{"class":1183},"  { branch: ",[1174,1206,1207],{"class":1190},"'next'",[1174,1209,1210],{"class":1183},", status: ",[1174,1212,1213],{"class":1190},"'upcoming'",[1174,1215,1216],{"class":1183}," },     ",[1174,1218,1219],{"class":1197},"\u002F\u002F the same, with a lifecycle\n",[1174,1221,1223,1226,1229,1232,1235,1238],{"class":1176,"line":1222},4,[1174,1224,1225],{"class":1183},"  { tag: ",[1174,1227,1228],{"class":1190},"'v2.0.0'",[1174,1230,1231],{"class":1183},", label: ",[1174,1233,1234],{"class":1190},"'v2'",[1174,1236,1237],{"class":1183}," },             ",[1174,1239,1240],{"class":1197},"\u002F\u002F a tag\n",[1174,1242,1244,1247],{"class":1176,"line":1243},5,[1174,1245,1246],{"class":1190},"  'latest'",[1174,1248,1249],{"class":1197},"                                    \u002F\u002F the newest semver tag, resolved at build\n",[1174,1251,1253],{"class":1176,"line":1252},6,[1174,1254,1255],{"class":1183},"]\n",[890,1257,1258,1261,1262,1265,1266,1269],{},[893,1259,1260],{},"'latest'"," is reserved. A branch genuinely called ",[893,1263,1264],{},"latest"," needs the ",[893,1267,1268],{},"{ branch }","\nform.",[906,1271,1272],{"id":1079},"Locales",[890,1274,1275],{},"Omitted, the source has one language and one collection. Listed, each entry\nbecomes a collection of its own.",[1165,1277,1279],{"className":1167,"code":1278,"language":1169,"meta":1170,"style":1170},"locales: [\n  'en-GB',                                              \u002F\u002F the default: docs\u002F itself\n  'de',                                                 \u002F\u002F docs\u002Fde\u002F\n  { locale: 'fr', path: 'translations\u002Ffr' },            \u002F\u002F somewhere else in this repo\n  { locale: 'es', repo: 'acme\u002Fdocs-es', path: 'docs' }  \u002F\u002F another repository\n]\n",[893,1280,1281,1287,1298,1309,1329,1353],{"__ignoreMap":1170},[1174,1282,1283,1285],{"class":1176,"line":1177},[1174,1284,1079],{"class":1180},[1174,1286,1184],{"class":1183},[1174,1288,1289,1292,1295],{"class":1176,"line":1187},[1174,1290,1291],{"class":1190},"  'en-GB'",[1174,1293,1294],{"class":1183},",                                              ",[1174,1296,1297],{"class":1197},"\u002F\u002F the default: docs\u002F itself\n",[1174,1299,1300,1303,1306],{"class":1176,"line":1201},[1174,1301,1302],{"class":1190},"  'de'",[1174,1304,1305],{"class":1183},",                                                 ",[1174,1307,1308],{"class":1197},"\u002F\u002F docs\u002Fde\u002F\n",[1174,1310,1311,1314,1317,1320,1323,1326],{"class":1176,"line":1222},[1174,1312,1313],{"class":1183},"  { locale: ",[1174,1315,1316],{"class":1190},"'fr'",[1174,1318,1319],{"class":1183},", path: ",[1174,1321,1322],{"class":1190},"'translations\u002Ffr'",[1174,1324,1325],{"class":1183}," },            ",[1174,1327,1328],{"class":1197},"\u002F\u002F somewhere else in this repo\n",[1174,1330,1331,1333,1336,1339,1342,1344,1347,1350],{"class":1176,"line":1243},[1174,1332,1313],{"class":1183},[1174,1334,1335],{"class":1190},"'es'",[1174,1337,1338],{"class":1183},", repo: ",[1174,1340,1341],{"class":1190},"'acme\u002Fdocs-es'",[1174,1343,1319],{"class":1183},[1174,1345,1346],{"class":1190},"'docs'",[1174,1348,1349],{"class":1183}," }  ",[1174,1351,1352],{"class":1197},"\u002F\u002F another repository\n",[1174,1354,1355],{"class":1176,"line":1252},[1174,1356,1255],{"class":1183},[890,1358,1359,1360,1362,1363,1365,1366,1368,1369,1372],{},"A string is a folder inside the source's ",[893,1361,939],{},". The object form overrides\n",[893,1364,939],{},", ",[893,1367,954],{}," and ",[893,1370,1371],{},"ref"," for that language alone — which is what lets a\ntranslation live in a repository of its own, with its own maintainers and its\nown release schedule.",[890,1374,1375,1381,1382,1385,1386,1389,1390,1393],{},[966,1376,1377,1378,1380],{},"The default locale is the tree in ",[893,1379,939],{}," itself and takes no folder."," Which\none that is comes from ",[893,1383,1384],{},"sourceOptions.defaultLocale",", and it has to agree with\n",[893,1387,1388],{},"i18n.defaultLocale"," — the build fails when they differ, because\n",[893,1391,1392],{},"content.config.ts"," resolves the collections without access to the Nuxt config.",[890,1395,1396,1397,1399,1400,1402],{},"A ref may carry its own ",[893,1398,1079],{},", overriding the source's exactly as ",[893,1401,1037],{},"\ndoes. That is the usual shape: the current version is translated, the ones\nbehind it are not.",[1165,1404,1406],{"className":1167,"code":1405,"language":1169,"meta":1170,"style":1170},"refs: [\n  { tag: 'v2.0.0' },                     \u002F\u002F inherits the source's locales\n  { tag: 'v1.0.0', locales: ['en-GB'] }  \u002F\u002F original only\n]\n",[893,1407,1408,1414,1426,1445],{"__ignoreMap":1170},[1174,1409,1410,1412],{"class":1176,"line":1177},[1174,1411,975],{"class":1180},[1174,1413,1184],{"class":1183},[1174,1415,1416,1418,1420,1423],{"class":1176,"line":1187},[1174,1417,1225],{"class":1183},[1174,1419,1228],{"class":1190},[1174,1421,1422],{"class":1183}," },                     ",[1174,1424,1425],{"class":1197},"\u002F\u002F inherits the source's locales\n",[1174,1427,1428,1430,1433,1436,1439,1442],{"class":1176,"line":1201},[1174,1429,1225],{"class":1183},[1174,1431,1432],{"class":1190},"'v1.0.0'",[1174,1434,1435],{"class":1183},", locales: [",[1174,1437,1438],{"class":1190},"'en-GB'",[1174,1440,1441],{"class":1183},"] }  ",[1174,1443,1444],{"class":1197},"\u002F\u002F original only\n",[1174,1446,1447],{"class":1176,"line":1222},[1174,1448,1255],{"class":1183},[890,1450,1451,1452,1455,1456,1368,1459,1462],{},"Name a folder by LANGUAGE where a region adds nothing: ",[893,1453,1454],{},"docs\u002Fpt\u002F"," serves both\n",[893,1457,1458],{},"pt-PT",[893,1460,1461],{},"pt-BR",", because a page falls back through its base language. The\nsame rule the layer's own locale files follow.",[906,1464,1465],{"id":1037},"Status",[911,1467,1468,1478],{},[914,1469,1470],{},[917,1471,1472,1475],{},[920,1473,1474],{"align":922},"Value",[920,1476,1477],{"align":922},"Means",[930,1479,1480,1490,1500,1510,1520],{},[917,1481,1482,1487],{},[935,1483,1484],{"align":922},[893,1485,1486],{},"upcoming",[935,1488,1489],{"align":922},"Not released yet — may still change",[917,1491,1492,1497],{},[935,1493,1494],{"align":922},[893,1495,1496],{},"current",[935,1498,1499],{"align":922},"The documentation to read",[917,1501,1502,1507],{},[935,1503,1504],{"align":922},[893,1505,1506],{},"maintained",[935,1508,1509],{"align":922},"Older, still supported",[917,1511,1512,1517],{},[935,1513,1514],{"align":922},[893,1515,1516],{},"deprecated",[935,1518,1519],{"align":922},"Older, and the reader should upgrade",[917,1521,1522,1527],{},[935,1523,1524],{"align":922},[893,1525,1526],{},"eol",[935,1528,1529],{"align":922},"Dead — warned about, and out of the sitemap",[890,1531,1532,1533,904],{},"What each one costs a page is in\n",[902,1534,53],{"href":54},[906,1536,65],{"id":1537},"generated-sections",[890,1539,1540,1542,1543,1545],{},[893,1541,1092],{}," lists artefacts that are not Markdown and the type that reads each\none into pages. What the mechanism is, and the two policies a type answers, is in\n",[902,1544,65],{"href":66},"; the fields below are the same\nwhichever type reads them.",[911,1547,1548,1558],{},[914,1549,1550],{},[917,1551,1552,1554,1556],{},[920,1553,339],{"align":922},[920,1555,925],{"align":922},[920,1557,928],{"align":922},[930,1559,1560,1581,1594,1607,1620,1633,1646,1664,1687],{},[917,1561,1562,1567,1571],{},[935,1563,1564],{"align":922},[893,1565,1566],{},"type",[935,1568,1569],{"align":922},[893,1570,944],{},[935,1572,1573,1574,1365,1577,1580],{"align":922},"The registry key of the type — ",[893,1575,1576],{},"changelog",[893,1578,1579],{},"openapi",", your own",[917,1582,1583,1587,1591],{},[935,1584,1585],{"align":922},[893,1586,939],{},[935,1588,1589],{"align":922},[893,1590,944],{},[935,1592,1593],{"align":922},"The artefact, relative to the source's own root",[917,1595,1596,1600,1604],{},[935,1597,1598],{"align":922},[893,1599,1006],{},[935,1601,1602],{"align":922},[893,1603,944],{},[935,1605,1606],{"align":922},"The navbar entry, and — slugified — the URL segment",[917,1608,1609,1613,1617],{},[935,1610,1611],{"align":922},[893,1612,1019],{},[935,1614,1615],{"align":922},[893,1616,944],{},[935,1618,1619],{"align":922},"Overrides the segment the label would produce",[917,1621,1622,1627,1630],{},[935,1623,1624],{"align":922},[893,1625,1626],{},"options",[935,1628,1629],{"align":922},"object",[935,1631,1632],{"align":922},"The knobs that type offers; each type validates its own",[917,1634,1635,1640,1643],{},[935,1636,1637],{"align":922},[893,1638,1639],{},"versions",[935,1641,1642],{"align":922},"version list",[935,1644,1645],{"align":922},"The versions of this artefact — see below",[917,1647,1648,1652,1657],{},[935,1649,1650],{"align":922},[893,1651,1079],{},[935,1653,1654],{"align":922},[893,1655,1656],{},"Record\u003Cstring, string>",[935,1658,1659,1660,1663],{"align":922},"An artefact per locale, read by a ",[893,1661,1662],{},"per-locale"," type only",[917,1665,1666,1671,1674],{},[935,1667,1668],{"align":922},[893,1669,1670],{},"navigation",[935,1672,1673],{"align":922},"placement",[935,1675,1676,1679,1680,1683,1684],{"align":922},[893,1677,1678],{},"'sections'"," (the default), ",[893,1681,1682],{},"'navigation'",", or ",[893,1685,1686],{},"false",[917,1688,1689,1694,1698],{},[935,1690,1691],{"align":922},[893,1692,1693],{},"icon",[935,1695,1696],{"align":922},[893,1697,944],{},[935,1699,1700],{"align":922},"Falls back to the type's own",[890,1702,1703,1708,1709,1712],{},[966,1704,1705,1707],{},[893,1706,939],{}," is a path and never a URL."," For a source Content clones it is relative\nto the root of that checkout, so the artefact travels with the version it belongs\nto — one rule in both directions. An arbitrary location would let an artefact be\nfetched from anywhere and reopen the build-time-network question ",[893,1710,1711],{},"sources"," has\nalready closed.",[890,1714,1715,1720],{},[966,1716,1717,1719],{},[893,1718,1006],{}," is a plain string, not a translated text",", for the same reason a\nversion's label is: a translated text is not a stable URL.",[1722,1723,1725],"h3",{"id":1724},"a-section-with-versions-of-its-own","A section with versions of its own",[890,1727,1728,1729,1732,1733,1735,1736,1739,1740,1743,1744,1747],{},"A version is normally a ",[966,1730,1731],{},"checkout",": list ",[893,1734,975],{}," on the source and every section\nit carries is published once per ref. An API is usually not kept that way —\n",[893,1737,1738],{},"openapi\u002Fv1.yaml"," sits beside ",[893,1741,1742],{},"openapi\u002Fv2.yaml"," in one repository, versioned by\n",[966,1745,1746],{},"file"," — and without this key the two are two unrelated sections with two\nentries in the navbar.",[1165,1749,1752],{"className":1167,"code":1750,"filename":1751,"language":1169,"meta":1170,"style":1170},"generated: [\n  {\n    type: 'openapi',\n    label: 'API',\n    path: 'openapi\u002Fv2.yaml',\n    versions: [\n      { version: 'v2', path: 'openapi\u002Fv2.yaml' },\n      { version: 'v1', path: 'openapi\u002Fv1.yaml', status: 'deprecated' }\n    ]\n  }\n]\n","app\u002Fapp.config.ts",[893,1753,1754,1760,1765,1776,1786,1796,1801,1816,1837,1843,1849],{"__ignoreMap":1170},[1174,1755,1756,1758],{"class":1176,"line":1177},[1174,1757,1092],{"class":1180},[1174,1759,1184],{"class":1183},[1174,1761,1762],{"class":1176,"line":1187},[1174,1763,1764],{"class":1183},"  {\n",[1174,1766,1767,1770,1773],{"class":1176,"line":1201},[1174,1768,1769],{"class":1183},"    type: ",[1174,1771,1772],{"class":1190},"'openapi'",[1174,1774,1775],{"class":1183},",\n",[1174,1777,1778,1781,1784],{"class":1176,"line":1222},[1174,1779,1780],{"class":1183},"    label: ",[1174,1782,1783],{"class":1190},"'API'",[1174,1785,1775],{"class":1183},[1174,1787,1788,1791,1794],{"class":1176,"line":1243},[1174,1789,1790],{"class":1183},"    path: ",[1174,1792,1793],{"class":1190},"'openapi\u002Fv2.yaml'",[1174,1795,1775],{"class":1183},[1174,1797,1798],{"class":1176,"line":1252},[1174,1799,1800],{"class":1183},"    versions: [\n",[1174,1802,1804,1807,1809,1811,1813],{"class":1176,"line":1803},7,[1174,1805,1806],{"class":1183},"      { version: ",[1174,1808,1234],{"class":1190},[1174,1810,1319],{"class":1183},[1174,1812,1793],{"class":1190},[1174,1814,1815],{"class":1183}," },\n",[1174,1817,1819,1821,1824,1826,1829,1831,1834],{"class":1176,"line":1818},8,[1174,1820,1806],{"class":1183},[1174,1822,1823],{"class":1190},"'v1'",[1174,1825,1319],{"class":1183},[1174,1827,1828],{"class":1190},"'openapi\u002Fv1.yaml'",[1174,1830,1210],{"class":1183},[1174,1832,1833],{"class":1190},"'deprecated'",[1174,1835,1836],{"class":1183}," }\n",[1174,1838,1840],{"class":1176,"line":1839},9,[1174,1841,1842],{"class":1183},"    ]\n",[1174,1844,1846],{"class":1176,"line":1845},10,[1174,1847,1848],{"class":1183},"  }\n",[1174,1850,1852],{"class":1176,"line":1851},11,[1174,1853,1255],{"class":1183},[911,1855,1856,1864],{},[914,1857,1858],{},[917,1859,1860,1862],{},[920,1861,339],{"align":922},[920,1863,928],{"align":922},[930,1865,1866,1875,1884,1893,1908],{},[917,1867,1868,1872],{},[935,1869,1870],{"align":922},[893,1871,988],{},[935,1873,1874],{"align":922},"Shown in the switcher and used in the URL",[917,1876,1877,1881],{},[935,1878,1879],{"align":922},[893,1880,939],{},[935,1882,1883],{"align":922},"The artefact this version reads; defaults to the declaration's",[917,1885,1886,1890],{},[935,1887,1888],{"align":922},[893,1889,1079],{},[935,1891,1892],{"align":922},"Per-locale artefacts for this version",[917,1894,1895,1899],{},[935,1896,1897],{"align":922},[893,1898,1037],{},[935,1900,1901,1902,1365,1904,1365,1906],{"align":922},"Lifecycle of this version — ",[893,1903,1516],{},[893,1905,1526],{},[893,1907,1486],{},[917,1909,1910,1915],{},[935,1911,1912],{"align":922},[893,1913,1914],{},"default",[935,1916,1917],{"align":922},"Served without a version segment. Defaults to the first entry",[890,1919,1920,1921,1924,1925,1928,1929,1932],{},"The default is served at ",[893,1922,1923],{},"\u002Fapi",", every other version under its own segment\n(",[893,1926,1927],{},"\u002Fv1\u002Fapi","), and the switcher offers them exactly as it offers a source's refs —\nwith the deprecation banner, the ",[893,1930,1931],{},"noindex"," and the canonical that go with a\nversion that is not the current one.",[890,1934,1935,1938,1939,1942],{},[966,1936,1937],{},"Declared here rather than as two sources",", and that is the design rather than\na convenience: two sections are offered as versions of one another only when\n",[966,1940,1941],{},"one declaration"," produced them, and a source always publishes a documentation\ntree — so a source per API version would publish the prose twice.",[890,1944,1945,1950,1951,1954],{},[966,1946,1947,1948,904],{},"Never beside a source versioned by ",[893,1949,975],{}," Both want the same segment of the\nURL, and the build says so instead of nesting them. A ",[893,1952,1953],{},"global"," type — a changelog\n— refuses them too: it publishes one history at a version-neutral URL, so a list\nof versions is a contradiction rather than a shape to resolve.",[1722,1956,1958],{"id":1957},"which-version-is-which","Which version is which",[890,1960,1961],{},"Three things are called a version around a reference page, and only two of them\nare duxt's:",[1103,1963,1964,1973,1981],{},[1106,1965,1966,1969,1970,1972],{},[966,1967,1968],{},"The version in the URL and the switcher"," — a ref, or a ",[893,1971,988],{}," declared as\nabove. It is what the badge in the header shows: which variant you are reading.",[1106,1974,1975,1980],{},[966,1976,1977],{},[893,1978,1979],{},"duxt.version"," — the site's own string, shown in that badge only where\nthere is nothing to switch between.",[1106,1982,1983,1989,1990,1993],{},[966,1984,1985,1988],{},[893,1986,1987],{},"info.version"," of an OpenAPI document"," — what the document says about the\nAPI it describes. It is drawn on the reference's own page, labelled ",[966,1991,1992],{},"API\nversion",", and never in the badge: a badge is the switcher's trigger, and a\ndocument's own claim is not somewhere you can switch to.",[890,1995,1996,1997,2000,2001,2004],{},"They often carry the same number, because a repository that tags ",[893,1998,1999],{},"v2.0.0"," usually\nwrites ",[893,2002,2003],{},"2.1.0"," in the document it tagged. They are still different facts, and\nduxt derives neither from the other.",[890,2006,2007,2009],{},[893,2008,1626],{}," is opaque to everything but the type that reads it — a granularity\nmeans something to a changelog and nothing to an API reference. A key the type\ndoes not know fails the build rather than being ignored, because a misspelled\noption is a site quietly not getting what it configured.",[906,2011,2013],{"id":2012},"source-options","Source options",[911,2015,2016,2028],{},[914,2017,2018],{},[917,2019,2020,2022,2025],{},[920,2021,339],{"align":922},[920,2023,2024],{"align":922},"Default",[920,2026,2027],{"align":922},"What it does",[930,2029,2030,2043,2055,2068],{},[917,2031,2032,2037,2040],{},[935,2033,2034],{"align":922},[893,2035,2036],{},"showRepo",[935,2038,2039],{"align":922},"off",[935,2041,2042],{"align":922},"Force a repository segment with a single repository",[917,2044,2045,2050,2052],{},[935,2046,2047],{"align":922},[893,2048,2049],{},"showVersion",[935,2051,2039],{"align":922},[935,2053,2054],{"align":922},"Force a version segment with a single version",[917,2056,2057,2062,2065],{},[935,2058,2059],{"align":922},[893,2060,2061],{},"defaultRef",[935,2063,2064],{"align":922},"the first ref",[935,2066,2067],{"align":922},"The ref served without a version prefix",[917,2069,2070,2075,2078],{},[935,2071,2072],{"align":922},[893,2073,2074],{},"defaultLocale",[935,2076,2077],{"align":922},"the first locale",[935,2079,2080,2081,2083],{"align":922},"The locale served from ",[893,2082,939],{}," itself, with no folder",[906,2085,2087],{"id":2086},"the-resolved-manifest","The resolved manifest",[890,2089,2090,2091,2094,2095,2097,2098,1365,2101,1365,2103,1365,2105,1365,2108,1775,2111,1365,2114,2116,2117,2119],{},"The build turns the list above into ",[893,2092,2093],{},"duxt.resolvedSources",", and that is what the\ntheme reads. ",[893,2096,511],{}," exposes it; each entry carries the collection\nname, the URL ",[893,2099,2100],{},"prefix",[893,2102,954],{},[893,2104,988],{},[893,2106,2107],{},"isDefault",[893,2109,2110],{},"locale",[893,2112,2113],{},"isDefaultLocale",[893,2115,1037],{},", the repository and ref the pages came from, and\nwhether its ",[893,2118,1064],{}," was read.",[890,2121,2122,2123,2125],{},"The locale is deliberately absent from ",[893,2124,2100],{},": i18n puts it in front of the\npath already, so every language of one source shares a prefix and differs only\nby collection.",[2127,2128,2129],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1170,"searchDepth":1187,"depth":1187,"links":2131},[2132,2133,2134,2135,2136,2140,2141],{"id":908,"depth":1187,"text":909},{"id":975,"depth":1187,"text":1149},{"id":1079,"depth":1187,"text":1272},{"id":1037,"depth":1187,"text":1465},{"id":1537,"depth":1187,"text":65,"children":2137},[2138,2139],{"id":1724,"depth":1201,"text":1725},{"id":1957,"depth":1201,"text":1958},{"id":2012,"depth":1187,"text":2013},{"id":2086,"depth":1187,"text":2087},[2143],{"name":2144,"commits":1243},"Titus Kirch","md","2026-09-10T01:31:33+02:00",{},"---\ntitle: Sources\ndescription: The fields of a source entry, its refs, and the options that shape the URLs.\nicon: lucide:git-branch\n---\n\n`duxt.sources` is a list of source entries; `duxt.sourceOptions` says how they\nbecome URLs. Both are read at build time. What they generate, and why, is in\n[Sources](\u002Fconcepts\u002Fsources).\n\n## A source entry\n\n| Field     | Type                     | Notes                                                          |\n| :-------- | :----------------------- | :------------------------------------------------------------- |\n| `path`    | `string`                 | Folder holding the Markdown, relative to the repository root    |\n| `repo`    | `string`                 | `owner\u002Fname` or a git URL. **Omitted means this repository**    |\n| `refs`    | ref list                 | Refs to publish as versions. Omitted means the current checkout |\n| `version` | `string`                 | The version this source **is**, where no ref names one          |\n| `label`   | text                     | Shown in the switcher and used in the URL; defaults to the ref  |\n| `slug`    | `string`                 | This source's URL segment. **Naming one claims it** — see below |\n| `status`  | status                   | Lifecycle of every version this entry publishes                 |\n| `origin`  | `{ repo, ref? }`         | Where pages read off disk live, for links back to them          |\n| `history` | `boolean`                | Read this source's git history                                  |\n| `locales` | locale list              | Languages this source is available in — see below               |\n| `generated` | section list           | Artefacts published as pages beside the Markdown — see below     |\n\nTwo fields are easy to confuse and expensive to get wrong:\n\n- **`repo` downloads, `origin` only links.** Naming your own repository in `repo`\n  has the build clone the checkout it is already standing in.\n- **`history` costs a full clone.** Content clones a remote repository with\n  `--depth 1`, so its checkout holds one commit and every file looks as if the\n  person who cut the tip wrote it — wrong data, not missing data. Turning this on\n  unshallows the clone once. A source read off disk is a full checkout already and\n  is read regardless.\n\n**`slug` claims a segment.** A source is normally given one only once the list\nnames more than one repository — all or nothing, across the whole site. A source\nthat writes its own `slug` is served under it either way, and the sources that\nwrite none stay where they are, which is what lets one thing sit at `\u002Fdemo`\nbeside documentation that keeps the root.\n\n## Refs\n\nA bare string is a **branch**. A tag has to say so: git keeps branches and tags\nin separate namespaces, and asking for a tag under `refs\u002Fheads` fails the build\nwith `Could not find refs\u002Fheads\u002F…`.\n\n```ts\nrefs: [\n  'main',                                     \u002F\u002F a branch\n  { branch: 'next', status: 'upcoming' },     \u002F\u002F the same, with a lifecycle\n  { tag: 'v2.0.0', label: 'v2' },             \u002F\u002F a tag\n  'latest'                                    \u002F\u002F the newest semver tag, resolved at build\n]\n```\n\n`'latest'` is reserved. A branch genuinely called `latest` needs the `{ branch }`\nform.\n\n## Locales\n\nOmitted, the source has one language and one collection. Listed, each entry\nbecomes a collection of its own.\n\n```ts\nlocales: [\n  'en-GB',                                              \u002F\u002F the default: docs\u002F itself\n  'de',                                                 \u002F\u002F docs\u002Fde\u002F\n  { locale: 'fr', path: 'translations\u002Ffr' },            \u002F\u002F somewhere else in this repo\n  { locale: 'es', repo: 'acme\u002Fdocs-es', path: 'docs' }  \u002F\u002F another repository\n]\n```\n\nA string is a folder inside the source's `path`. The object form overrides\n`path`, `repo` and `ref` for that language alone — which is what lets a\ntranslation live in a repository of its own, with its own maintainers and its\nown release schedule.\n\n**The default locale is the tree in `path` itself and takes no folder.** Which\none that is comes from `sourceOptions.defaultLocale`, and it has to agree with\n`i18n.defaultLocale` — the build fails when they differ, because\n`content.config.ts` resolves the collections without access to the Nuxt config.\n\nA ref may carry its own `locales`, overriding the source's exactly as `status`\ndoes. That is the usual shape: the current version is translated, the ones\nbehind it are not.\n\n```ts\nrefs: [\n  { tag: 'v2.0.0' },                     \u002F\u002F inherits the source's locales\n  { tag: 'v1.0.0', locales: ['en-GB'] }  \u002F\u002F original only\n]\n```\n\nName a folder by LANGUAGE where a region adds nothing: `docs\u002Fpt\u002F` serves both\n`pt-PT` and `pt-BR`, because a page falls back through its base language. The\nsame rule the layer's own locale files follow.\n\n## Status\n\n| Value        | Means                                              |\n| :----------- | :------------------------------------------------- |\n| `upcoming`   | Not released yet — may still change                 |\n| `current`    | The documentation to read                           |\n| `maintained` | Older, still supported                              |\n| `deprecated` | Older, and the reader should upgrade                |\n| `eol`        | Dead — warned about, and out of the sitemap         |\n\nWhat each one costs a page is in\n[URLs and versions](\u002Fconcepts\u002Furls-and-versions).\n\n## Generated sections\n\n`generated` lists artefacts that are not Markdown and the type that reads each\none into pages. What the mechanism is, and the two policies a type answers, is in\n[Generated sections](\u002Fconcepts\u002Fgenerated-sections); the fields below are the same\nwhichever type reads them.\n\n| Field        | Type                     | Notes                                                     |\n| :----------- | :----------------------- | :--------------------------------------------------------- |\n| `type`       | `string`                 | The registry key of the type — `changelog`, `openapi`, your own |\n| `path`       | `string`                 | The artefact, relative to the source's own root             |\n| `label`      | `string`                 | The navbar entry, and — slugified — the URL segment         |\n| `slug`       | `string`                 | Overrides the segment the label would produce               |\n| `options`    | object                   | The knobs that type offers; each type validates its own     |\n| `versions`   | version list             | The versions of this artefact — see below                   |\n| `locales`    | `Record\u003Cstring, string>` | An artefact per locale, read by a `per-locale` type only    |\n| `navigation` | placement                | `'sections'` (the default), `'navigation'`, or `false`      |\n| `icon`       | `string`                 | Falls back to the type's own                                |\n\n**`path` is a path and never a URL.** For a source Content clones it is relative\nto the root of that checkout, so the artefact travels with the version it belongs\nto — one rule in both directions. An arbitrary location would let an artefact be\nfetched from anywhere and reopen the build-time-network question `sources` has\nalready closed.\n\n**`label` is a plain string, not a translated text**, for the same reason a\nversion's label is: a translated text is not a stable URL.\n\n### A section with versions of its own\n\nA version is normally a **checkout**: list `refs` on the source and every section\nit carries is published once per ref. An API is usually not kept that way —\n`openapi\u002Fv1.yaml` sits beside `openapi\u002Fv2.yaml` in one repository, versioned by\n**file** — and without this key the two are two unrelated sections with two\nentries in the navbar.\n\n```ts [app\u002Fapp.config.ts]\ngenerated: [\n  {\n    type: 'openapi',\n    label: 'API',\n    path: 'openapi\u002Fv2.yaml',\n    versions: [\n      { version: 'v2', path: 'openapi\u002Fv2.yaml' },\n      { version: 'v1', path: 'openapi\u002Fv1.yaml', status: 'deprecated' }\n    ]\n  }\n]\n```\n\n| Field     | Notes                                                            |\n| :-------- | :--------------------------------------------------------------- |\n| `version` | Shown in the switcher and used in the URL                        |\n| `path`    | The artefact this version reads; defaults to the declaration's    |\n| `locales` | Per-locale artefacts for this version                            |\n| `status`  | Lifecycle of this version — `deprecated`, `eol`, `upcoming`      |\n| `default` | Served without a version segment. Defaults to the first entry     |\n\nThe default is served at `\u002Fapi`, every other version under its own segment\n(`\u002Fv1\u002Fapi`), and the switcher offers them exactly as it offers a source's refs —\nwith the deprecation banner, the `noindex` and the canonical that go with a\nversion that is not the current one.\n\n**Declared here rather than as two sources**, and that is the design rather than\na convenience: two sections are offered as versions of one another only when\n**one declaration** produced them, and a source always publishes a documentation\ntree — so a source per API version would publish the prose twice.\n\n**Never beside a source versioned by `refs`.** Both want the same segment of the\nURL, and the build says so instead of nesting them. A `global` type — a changelog\n— refuses them too: it publishes one history at a version-neutral URL, so a list\nof versions is a contradiction rather than a shape to resolve.\n\n### Which version is which\n\nThree things are called a version around a reference page, and only two of them\nare duxt's:\n\n- **The version in the URL and the switcher** — a ref, or a `version` declared as\n  above. It is what the badge in the header shows: which variant you are reading.\n- **`duxt.version`** — the site's own string, shown in that badge only where\n  there is nothing to switch between.\n- **`info.version` of an OpenAPI document** — what the document says about the\n  API it describes. It is drawn on the reference's own page, labelled **API\n  version**, and never in the badge: a badge is the switcher's trigger, and a\n  document's own claim is not somewhere you can switch to.\n\nThey often carry the same number, because a repository that tags `v2.0.0` usually\nwrites `2.1.0` in the document it tagged. They are still different facts, and\nduxt derives neither from the other.\n\n`options` is opaque to everything but the type that reads it — a granularity\nmeans something to a changelog and nothing to an API reference. A key the type\ndoes not know fails the build rather than being ignored, because a misspelled\noption is a site quietly not getting what it configured.\n\n## Source options\n\n| Field         | Default          | What it does                                     |\n| :------------ | :--------------- | :----------------------------------------------- |\n| `showRepo`    | off              | Force a repository segment with a single repository |\n| `showVersion` | off              | Force a version segment with a single version     |\n| `defaultRef`  | the first ref    | The ref served without a version prefix           |\n| `defaultLocale` | the first locale | The locale served from `path` itself, with no folder |\n\n## The resolved manifest\n\nThe build turns the list above into `duxt.resolvedSources`, and that is what the\ntheme reads. `useDuxtCollection()` exposes it; each entry carries the collection\nname, the URL `prefix`, `repo`, `version`, `isDefault`, `locale`,\n`isDefaultLocale`, `status`, the repository and ref the pages came from, and\nwhether its `history` was read.\n\nThe locale is deliberately absent from `prefix`: i18n puts it in front of the\npath already, so every language of one source shares a prefix and differs only\nby collection.\n",{"title":47,"description":196},{"loc":194},"f-HdUepMq4Gqhyo1DtTNrpAnol-MLdddIWfzVEerd5Y","en-GB",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2154},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2156},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 5.88L14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88M7 10v12\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2158},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 18.12L10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88M17 14V2\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2160},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2162},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 8v4m0 4h.01\"\u002F>\u003C\u002Fg>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2164},"\u003Cpath fill=\"currentColor\" d=\"M20.317 4.37a19.8 19.8 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.3 18.3 0 0 0-5.487 0a13 13 0 0 0-.617-1.25a.08.08 0 0 0-.079-.037A19.7 19.7 0 0 0 3.677 4.37a.1.1 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.08.08 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.08.08 0 0 0 .084-.028a14 14 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13 13 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10 10 0 0 0 .372-.292a.07.07 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.07.07 0 0 1 .078.01q.181.149.373.292a.077.077 0 0 1-.006.127a12.3 12.3 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.08.08 0 0 0 .084.028a19.8 19.8 0 0 0 6.002-3.03a.08.08 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.06.06 0 0 0-.031-.03M8.02 15.33c-1.182 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418m7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2166},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m4-8h2m-2-4h2m2.001 10A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2zM6 13h2M6 9h2\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2168},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2170},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497zM15 5l4 4\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2172},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",{"left":833,"top":833,"width":834,"height":834,"rotate":833,"vFlip":835,"hFlip":835,"body":2174},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",1789004652678]