[{"data":1,"prerenderedAt":926},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fgetting-started":134},[4],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"Docs","\u002Fdocs","docs",[9,12,16,20,24,42,63,92,113],{"title":10,"path":6,"stem":11},"What is Fougere","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":17,"path":18,"stem":19},"Existing Nuxt app","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"The CLI","\u002Fdocs\u002Fcli","docs\u002F03.cli",{"title":25,"path":26,"stem":27,"children":28,"page":41},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[29,33,37],{"title":30,"path":31,"stem":32},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":34,"path":35,"stem":36},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":38,"path":39,"stem":40},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",false,{"title":43,"path":44,"stem":45,"children":46,"page":41},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[47,51,55,59],{"title":48,"path":49,"stem":50},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":52,"path":53,"stem":54},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":56,"path":57,"stem":58},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":60,"path":61,"stem":62},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":64,"path":65,"stem":66,"children":67,"page":41},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[68,72,76,80,84,88],{"title":69,"path":70,"stem":71},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":73,"path":74,"stem":75},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":77,"path":78,"stem":79},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":81,"path":82,"stem":83},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":85,"path":86,"stem":87},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":89,"path":90,"stem":91},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":93,"path":94,"stem":95,"children":96,"page":41},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[97,101,105,109],{"title":98,"path":99,"stem":100},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":102,"path":103,"stem":104},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":106,"path":107,"stem":108},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":110,"path":111,"stem":112},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":114,"path":115,"stem":116,"children":117,"page":41},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[118,122,126,130],{"title":119,"path":120,"stem":121},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":123,"path":124,"stem":125},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":127,"path":128,"stem":129},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":131,"path":132,"stem":133},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"id":135,"title":13,"body":136,"description":921,"extension":922,"meta":923,"navigation":493,"path":14,"seo":924,"stem":15,"__hash__":925},"docs_en\u002Fdocs\u002F01.getting-started.md",{"type":137,"value":138,"toc":913},"minimark",[139,143,211,243,248,255,263,269,275,308,341,359,367,373,379,400,413,417,864,867,871,894,897,903,909],[140,141,13],"h1",{"id":142},"getting-started",[144,145,150],"pre",{"className":146,"code":147,"language":148,"meta":149,"style":149},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","npm create fougere shop --frond blog --app nuxt\ncd shop && pnpm install && pnpm dev\n","bash","",[151,152,153,185],"code",{"__ignoreMap":149},[154,155,158,162,166,169,172,176,179,182],"span",{"class":156,"line":157},"line",1,[154,159,161],{"class":160},"sbgvK","npm",[154,163,165],{"class":164},"s_sjI"," create",[154,167,168],{"class":164}," fougere",[154,170,171],{"class":164}," shop",[154,173,175],{"class":174},"stzsN"," --frond",[154,177,178],{"class":164}," blog",[154,180,181],{"class":174}," --app",[154,183,184],{"class":164}," nuxt\n",[154,186,188,192,194,198,201,204,206,208],{"class":156,"line":187},2,[154,189,191],{"class":190},"sptTA","cd",[154,193,171],{"class":164},[154,195,197],{"class":196},"sP7_E"," &&",[154,199,200],{"class":160}," pnpm",[154,202,203],{"class":164}," install",[154,205,197],{"class":196},[154,207,200],{"class":160},[154,209,210],{"class":164}," dev\n",[212,213,214],"blockquote",{},[215,216,217,221,222,225,226,229,230,233,234,237,238,242],"p",{},[218,219,220],"strong",{},"Alpha."," The ",[151,223,224],{},"@fougere\u002F*"," packages are on npm under the ",[151,227,228],{},"alpha"," tag — the version\nis the whole promise, the surface can still move. This site (",[151,231,232],{},"site\u002F",") and\n",[151,235,236],{},"demos\u002Fnuxt-blog"," are complete references. The structure below matches the current\nimplementation. Already have a Nuxt app? ",[239,240,241],"a",{"href":18},"Add Fougere to it",".",[244,245,247],"h2",{"id":246},"application-structure","Application structure",[215,249,250,251,254],{},"A Fougere app is a Nuxt app plus a ",[151,252,253],{},"fronds\u002F"," directory and one config file:",[144,256,261],{"className":257,"code":259,"language":260},[258],"language-text","my-app\u002F\n  fougere.config.ts       ← persistence, auth, topology\n  nuxt.config.ts          ← modules: ['@fougere\u002Fnuxt']\n  fronds\u002F\n    blog\u002F\n      entities\u002FPost.ts\n      handlers\u002FPostHandler.ts\n      collectors\u002FCurrentUserCollector.ts\n      seeds\u002FPost.seed.ts\n    user\u002F                 ← a second domain\n      entities\u002FUser.ts\n  app\u002F\n    pages\u002F                ← ordinary Nuxt pages, talking through the primitives\n","text",[151,262,259],{"__ignoreMap":149},[215,264,265,266,268],{},"The scanner discovers entities, handlers, collectors, and seeds under ",[151,267,253],{},". File\nlocation and class name are used for registration; no additional wiring file is needed.",[215,270,271,272,274],{},"Each directory directly under ",[151,273,253],{}," defines a Frond. A page imports an entity using\nthat directory name:",[144,276,280],{"className":277,"code":278,"language":279,"meta":149,"style":149},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import Post from '@frond\u002Fblog\u002Fentities\u002FPost';\n","ts",[151,281,282],{"__ignoreMap":149},[154,283,284,288,292,295,299,302,305],{"class":156,"line":157},[154,285,287],{"class":286},"sVHd0","import",[154,289,291],{"class":290},"su5hD"," Post ",[154,293,294],{"class":286},"from",[154,296,298],{"class":297},"sjJ54"," '",[154,300,301],{"class":164},"@frond\u002Fblog\u002Fentities\u002FPost",[154,303,304],{"class":297},"'",[154,306,307],{"class":196},";\n",[215,309,310,313,314,317,318,321,322,325,326,329,330,333,334,336,337,242],{},[151,311,312],{},"@fougere\u002Fnuxt"," reads the scan and registers a ",[151,315,316],{},"@frond\u002F\u003Cname>"," alias per Frond, so that\nimport works for ",[151,319,320],{},"blog"," and ",[151,323,324],{},"user"," alike — nothing to add, no ",[151,327,328],{},"package.json",", no\n",[151,331,332],{},"pnpm-workspace.yaml"," entry. Renaming a Frond, or importing one from outside a Nuxt app,\nis where a Frond's ",[151,335,328],{}," earns its keep: see\n",[239,338,340],{"href":339},"\u002Fdocs\u002Fconcepts\u002Ffrond#naming-and-importing-a-frond","Frond — naming and importing",[215,342,343,346,347,350,351,354,355,358],{},[151,344,345],{},"fougere new"," writes the same directories one level out — the app under ",[151,348,349],{},"apps\u002F\u003Cname>\u002F",", the\nFronds shared at the workspace root, ",[151,352,353],{},"fougere: { root: '..\u002F..' }"," in ",[151,356,357],{},"nuxt.config.ts"," — so\nthat several apps consume the same domains. One app, one directory: the shape above.",[360,361,363,364,366],"h3",{"id":362},"one-domain-no-fronds-at-all","One domain, no ",[151,365,253],{}," at all",[215,368,369,370,372],{},"The project root can use the same convention as a directory under ",[151,371,253],{},". A\nsingle-domain app can therefore place its entities and handlers directly at the root:",[144,374,377],{"className":375,"code":376,"language":260},[258],"my-shop\u002F\n  fougere.config.ts\n  nuxt.config.ts\n  entities\u002FProduct.ts       ← the root IS the Frond, named after the directory\n  handlers\u002FProductHandler.ts\n  app\u002Fpages\u002F\n",[151,378,376],{"__ignoreMap":149},[215,380,381,384,385,388,389,391,392,395,396,399],{},[151,382,383],{},"fougere new my-shop --flat --frond blog"," writes exactly that. ",[151,386,387],{},"import Product from '@frond\u002Fmy-shop\u002Fentities\u002FProduct'"," — same alias rule, no ",[151,390,253],{}," segment, and the word\nnever comes up until there are two domains to tell apart. The root needs at least an\n",[151,393,394],{},"entities\u002F"," to count; a lone ",[151,397,398],{},"services\u002F"," is an ordinary directory name.",[215,401,402,403,321,406,409,410,412],{},"When the second domain arrives it goes to ",[151,404,405],{},"fronds\u002Fbilling\u002F",[218,407,408],{},"the root Frond stays\nwhere it is"," — nothing moves, no import is rewritten. ",[151,411,253],{}," is not what defines a\nFrond, it is where the others live.",[244,414,416],{"id":415},"fougereconfigts-reference","fougere.config.ts — reference",[144,418,420],{"className":277,"code":419,"language":279,"meta":149,"style":149},"import { defineFougere } from '@fougere\u002Fcore';\nimport { betterAuth } from '@fougere\u002Fauth-better';\nimport User from '.\u002Ffronds\u002Fuser\u002Fentities\u002FUser';\n\nexport default defineFougere({\n  \u002F\u002F Persistence. Three forms:\n  \u002F\u002F   'sqlite'                          → in-memory on the Nuxt side (reseeded each reload)\n  \u002F\u002F   { dialect: 'sqlite', path: '…' }  → file-backed (survives reloads and deploys)\n  \u002F\u002F   false                             → no db\n  db: { dialect: 'sqlite', path: '.data\u002Fapp.db' },\n\n  \u002F\u002F Topology. A Frond listed here is STILL scanned (its entities keep feeding\n  \u002F\u002F metadata to forms and validation) but is not hosted locally: calls travel\n  \u002F\u002F as JSON-RPC to the process that hosts it. Comment the line → in-process.\n  \u002F\u002F remotes: { blog: 'http:\u002F\u002F127.0.0.1:4100' },\n\n  \u002F\u002F Auth (optional) — better-auth behind a thin translation layer.\n  auth: betterAuth({\n    user: User,                             \u002F\u002F your entity extending AuthUser\n    secret: process.env.AUTH_SECRET!,       \u002F\u002F 32+ chars\n    baseUrl: process.env.SITE_URL ?? 'http:\u002F\u002Flocalhost:3000',\n    basePath: '\u002Fauth',                      \u002F\u002F mounts \u002Fauth\u002F** (sign-in, sign-up, sign-out…)\n    trustedOrigins: ['http:\u002F\u002Flocalhost:3000'],\n    sessionTtl: 30 * 24 * 60 * 60 * 1000,\n    providers: {\n      credential: { minPasswordLength: 8, autoSignIn: true },\n      \u002F\u002F google: { clientId: …, clientSecret: … },\n    },\n  }),\n});\n",[151,421,422,447,469,488,495,513,520,526,532,538,580,585,591,597,603,609,614,620,634,650,681,713,733,755,789,800,831,837,843,854],{"__ignoreMap":149},[154,423,424,426,429,432,435,438,440,443,445],{"class":156,"line":157},[154,425,287],{"class":286},[154,427,428],{"class":196}," {",[154,430,431],{"class":290}," defineFougere",[154,433,434],{"class":196}," }",[154,436,437],{"class":286}," from",[154,439,298],{"class":297},[154,441,442],{"class":164},"@fougere\u002Fcore",[154,444,304],{"class":297},[154,446,307],{"class":196},[154,448,449,451,453,456,458,460,462,465,467],{"class":156,"line":187},[154,450,287],{"class":286},[154,452,428],{"class":196},[154,454,455],{"class":290}," betterAuth",[154,457,434],{"class":196},[154,459,437],{"class":286},[154,461,298],{"class":297},[154,463,464],{"class":164},"@fougere\u002Fauth-better",[154,466,304],{"class":297},[154,468,307],{"class":196},[154,470,472,474,477,479,481,484,486],{"class":156,"line":471},3,[154,473,287],{"class":286},[154,475,476],{"class":290}," User ",[154,478,294],{"class":286},[154,480,298],{"class":297},[154,482,483],{"class":164},".\u002Ffronds\u002Fuser\u002Fentities\u002FUser",[154,485,304],{"class":297},[154,487,307],{"class":196},[154,489,491],{"class":156,"line":490},4,[154,492,494],{"emptyLinePlaceholder":493},true,"\n",[154,496,498,501,504,507,510],{"class":156,"line":497},5,[154,499,500],{"class":286},"export",[154,502,503],{"class":286}," default",[154,505,431],{"class":506},"sGLFI",[154,508,509],{"class":290},"(",[154,511,512],{"class":196},"{\n",[154,514,516],{"class":156,"line":515},6,[154,517,519],{"class":518},"sutJx","  \u002F\u002F Persistence. Three forms:\n",[154,521,523],{"class":156,"line":522},7,[154,524,525],{"class":518},"  \u002F\u002F   'sqlite'                          → in-memory on the Nuxt side (reseeded each reload)\n",[154,527,529],{"class":156,"line":528},8,[154,530,531],{"class":518},"  \u002F\u002F   { dialect: 'sqlite', path: '…' }  → file-backed (survives reloads and deploys)\n",[154,533,535],{"class":156,"line":534},9,[154,536,537],{"class":518},"  \u002F\u002F   false                             → no db\n",[154,539,541,545,548,550,553,555,557,560,562,565,568,570,572,575,577],{"class":156,"line":540},10,[154,542,544],{"class":543},"skxfh","  db",[154,546,547],{"class":196},":",[154,549,428],{"class":196},[154,551,552],{"class":543}," dialect",[154,554,547],{"class":196},[154,556,298],{"class":297},[154,558,559],{"class":164},"sqlite",[154,561,304],{"class":297},[154,563,564],{"class":196},",",[154,566,567],{"class":543}," path",[154,569,547],{"class":196},[154,571,298],{"class":297},[154,573,574],{"class":164},".data\u002Fapp.db",[154,576,304],{"class":297},[154,578,579],{"class":196}," },\n",[154,581,583],{"class":156,"line":582},11,[154,584,494],{"emptyLinePlaceholder":493},[154,586,588],{"class":156,"line":587},12,[154,589,590],{"class":518},"  \u002F\u002F Topology. A Frond listed here is STILL scanned (its entities keep feeding\n",[154,592,594],{"class":156,"line":593},13,[154,595,596],{"class":518},"  \u002F\u002F metadata to forms and validation) but is not hosted locally: calls travel\n",[154,598,600],{"class":156,"line":599},14,[154,601,602],{"class":518},"  \u002F\u002F as JSON-RPC to the process that hosts it. Comment the line → in-process.\n",[154,604,606],{"class":156,"line":605},15,[154,607,608],{"class":518},"  \u002F\u002F remotes: { blog: 'http:\u002F\u002F127.0.0.1:4100' },\n",[154,610,612],{"class":156,"line":611},16,[154,613,494],{"emptyLinePlaceholder":493},[154,615,617],{"class":156,"line":616},17,[154,618,619],{"class":518},"  \u002F\u002F Auth (optional) — better-auth behind a thin translation layer.\n",[154,621,623,626,628,630,632],{"class":156,"line":622},18,[154,624,625],{"class":543},"  auth",[154,627,547],{"class":196},[154,629,455],{"class":506},[154,631,509],{"class":290},[154,633,512],{"class":196},[154,635,637,640,642,645,647],{"class":156,"line":636},19,[154,638,639],{"class":543},"    user",[154,641,547],{"class":196},[154,643,644],{"class":290}," User",[154,646,564],{"class":196},[154,648,649],{"class":518},"                             \u002F\u002F your entity extending AuthUser\n",[154,651,653,656,658,661,663,666,668,672,676,678],{"class":156,"line":652},20,[154,654,655],{"class":543},"    secret",[154,657,547],{"class":196},[154,659,660],{"class":290}," process",[154,662,242],{"class":196},[154,664,665],{"class":290},"env",[154,667,242],{"class":196},[154,669,671],{"class":670},"s_hVV","AUTH_SECRET",[154,673,675],{"class":674},"smGrS","!",[154,677,564],{"class":196},[154,679,680],{"class":518},"       \u002F\u002F 32+ chars\n",[154,682,684,687,689,691,693,695,697,700,703,705,708,710],{"class":156,"line":683},21,[154,685,686],{"class":543},"    baseUrl",[154,688,547],{"class":196},[154,690,660],{"class":290},[154,692,242],{"class":196},[154,694,665],{"class":290},[154,696,242],{"class":196},[154,698,699],{"class":670},"SITE_URL",[154,701,702],{"class":674}," ??",[154,704,298],{"class":297},[154,706,707],{"class":164},"http:\u002F\u002Flocalhost:3000",[154,709,304],{"class":297},[154,711,712],{"class":196},",\n",[154,714,716,719,721,723,726,728,730],{"class":156,"line":715},22,[154,717,718],{"class":543},"    basePath",[154,720,547],{"class":196},[154,722,298],{"class":297},[154,724,725],{"class":164},"\u002Fauth",[154,727,304],{"class":297},[154,729,564],{"class":196},[154,731,732],{"class":518},"                      \u002F\u002F mounts \u002Fauth\u002F** (sign-in, sign-up, sign-out…)\n",[154,734,736,739,741,744,746,748,750,753],{"class":156,"line":735},23,[154,737,738],{"class":543},"    trustedOrigins",[154,740,547],{"class":196},[154,742,743],{"class":290}," [",[154,745,304],{"class":297},[154,747,707],{"class":164},[154,749,304],{"class":297},[154,751,752],{"class":290},"]",[154,754,712],{"class":196},[154,756,758,761,763,767,770,773,775,778,780,782,784,787],{"class":156,"line":757},24,[154,759,760],{"class":543},"    sessionTtl",[154,762,547],{"class":196},[154,764,766],{"class":765},"srdBf"," 30",[154,768,769],{"class":674}," *",[154,771,772],{"class":765}," 24",[154,774,769],{"class":674},[154,776,777],{"class":765}," 60",[154,779,769],{"class":674},[154,781,777],{"class":765},[154,783,769],{"class":674},[154,785,786],{"class":765}," 1000",[154,788,712],{"class":196},[154,790,792,795,797],{"class":156,"line":791},25,[154,793,794],{"class":543},"    providers",[154,796,547],{"class":196},[154,798,799],{"class":196}," {\n",[154,801,803,806,808,810,813,815,818,820,823,825,829],{"class":156,"line":802},26,[154,804,805],{"class":543},"      credential",[154,807,547],{"class":196},[154,809,428],{"class":196},[154,811,812],{"class":543}," minPasswordLength",[154,814,547],{"class":196},[154,816,817],{"class":765}," 8",[154,819,564],{"class":196},[154,821,822],{"class":543}," autoSignIn",[154,824,547],{"class":196},[154,826,828],{"class":827},"syTEX"," true",[154,830,579],{"class":196},[154,832,834],{"class":156,"line":833},27,[154,835,836],{"class":518},"      \u002F\u002F google: { clientId: …, clientSecret: … },\n",[154,838,840],{"class":156,"line":839},28,[154,841,842],{"class":196},"    },\n",[154,844,846,849,852],{"class":156,"line":845},29,[154,847,848],{"class":196},"  }",[154,850,851],{"class":290},")",[154,853,712],{"class":196},[154,855,857,860,862],{"class":156,"line":856},30,[154,858,859],{"class":196},"}",[154,861,851],{"class":290},[154,863,307],{"class":196},[215,865,866],{},"Tables are derived from your entities. At boot, SQLite auto-DDL creates missing tables and\nadds missing columns. Renames, removals and type changes require an explicit migration.\nSeeds run after that schema sync and call operations with their usual validation.",[244,868,870],{"id":869},"run","Run",[144,872,874],{"className":146,"code":873,"language":148,"meta":149,"style":149},"pnpm install\npnpm dev          # scan → sync additive schema → seed → serve on :3000\n",[151,875,876,884],{"__ignoreMap":149},[154,877,878,881],{"class":156,"line":157},[154,879,880],{"class":160},"pnpm",[154,882,883],{"class":164}," install\n",[154,885,886,888,891],{"class":156,"line":187},[154,887,880],{"class":160},[154,889,890],{"class":164}," dev",[154,892,893],{"class":518},"          # scan → sync additive schema → seed → serve on :3000\n",[215,895,896],{},"Check the boot log for the number of discovered Fronds:",[144,898,901],{"className":899,"code":900,"language":260},[258],"INF [boot:app] scanned 2 frond(s) in 467ms\nINF [boot] ready in 483ms — 2 frond(s) + auth (\u002Fauth)\n",[151,902,900],{"__ignoreMap":149},[215,904,905,906,908],{},"Next: ",[239,907,48],{"href":49}," — the field vocabulary and the four axes.",[910,911,912],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":149,"searchDepth":187,"depth":187,"links":914},[915,919,920],{"id":246,"depth":187,"text":247,"children":916},[917],{"id":362,"depth":471,"text":918},"One domain, no fronds\u002F at all",{"id":415,"depth":187,"text":416},{"id":869,"depth":187,"text":870},"The structure of a Fougere app and the fougere.config.ts reference.","md",{},{"title":13,"description":921},"jY1OKwZ80zN-yjz3R6dHxBjA1tdkg1FNbDasI7GmvY8",1786637818908]