[{"data":1,"prerenderedAt":626},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fconfig":6,"reference-pages":436},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":339,"extension":340,"file":341,"meta":431,"navigation":370,"path":432,"seo":433,"stem":434,"__hash__":435},"reference\u002Freference\u002F03.config.md","fougere.config.ts",{"type":10,"value":11,"toc":325},"minimark",[12,16,26,29,36,42,52,117,122,127,130,136,141,144,150,155,158,163,168,171,206,211,216,219,229,234,239,242,266,271,276,282,305,310,315],[13,14,8],"h1",{"id":15},"fougereconfigts",[17,18,19,20,25],"p",{},"What the app decides: where each frond runs, what answers each port, where rows live, what is served. A key open to packages lists who answers it — import the package, and its word exists. See ",[21,22,24],"a",{"href":23},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",".",[27,28],"reference-annotated-file",{},[30,31,33],"h3",{"id":32},"sources",[34,35,32],"code",{},[17,37,38,41],{},[34,39,40],{},"Record\u003Cstring, SourceConfig>"," · optional",[17,43,44,45,48,49,25],{},"Where entities live: a name, a type and its options, then ",[34,46,47],{},"rows:"," and ",[34,50,51],{},"values:",[17,53,54,61,62,65,66,70,71,65,74,70,78,65,81,70,85,65,88,70,92,65,95,70,97,65,100,70,102,65,105,70,107,65,110,112,113,25],{},[55,56,57,60],"strong",{},[34,58,59],{},"type"," is one of:"," ",[34,63,64],{},"env"," (",[21,67,69],{"href":68},"\u002Freference\u002Fpackages\u002Fadapter-env","@fougere\u002Fadapter-env",") · ",[34,72,73],{},"file",[21,75,77],{"href":76},"\u002Freference\u002Fpackages\u002Fadapter-file","@fougere\u002Fadapter-file",[34,79,80],{},"memory",[21,82,84],{"href":83},"\u002Freference\u002Fpackages\u002Fadapter-memory","@fougere\u002Fadapter-memory",[34,86,87],{},"sqlite",[21,89,91],{"href":90},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql",[34,93,94],{},"pg",[21,96,91],{"href":90},[34,98,99],{},"mysql",[21,101,91],{"href":90},[34,103,104],{},"mssql",[21,106,91],{"href":90},[34,108,109],{},"d1",[21,111,91],{"href":90},"). Every key each one admits: ",[21,114,116],{"href":115},"\u002Freference\u002Fsources","Source types",[30,118,120],{"id":119},"conventions",[34,121,119],{},[17,123,124,41],{},[34,125,126],{},"ConventionsInput",[17,128,129],{},"The names the scan reads: the import scope, the fronds directory, every convention directory.",[30,131,133],{"id":132},"loglevel",[34,134,135],{},"logLevel",[17,137,138,41],{},[34,139,140],{},"LogLevel",[17,142,143],{},"How much every logger says.",[30,145,147],{"id":146},"maxbodybytes",[34,148,149],{},"maxBodyBytes",[17,151,152,41],{},[34,153,154],{},"number",[17,156,157],{},"How many bytes a caller may send in one call — 2 MiB when unsaid. Consulted at every door.",[30,159,161],{"id":160},"fronds",[34,162,160],{},[17,164,165,41],{},[34,166,167],{},"FrondEntries",[17,169,170],{},"What this app is made of, keyed by frond name or module specifier.",[17,172,173,61,176,182,183,182,189,182,195,201,202,205],{},[55,174,175],{},"A package key:",[21,177,179],{"href":178},"\u002Freference\u002Fpackages\u002Fcalls",[34,180,181],{},"'@fougere\u002Fcalls'"," · ",[21,184,186],{"href":185},"\u002Freference\u002Fpackages\u002Fobservability",[34,187,188],{},"'@fougere\u002Fobservability'",[21,190,192],{"href":191},"\u002Freference\u002Fpackages\u002Flog",[34,193,194],{},"'@fougere\u002Flog'",[21,196,198],{"href":197},"\u002Freference\u002Fpackages\u002Fworkflow",[34,199,200],{},"'@fougere\u002Fworkflow'"," — or a frond name, ",[34,203,204],{},"{ remote: '…' }"," to place it elsewhere.",[30,207,209],{"id":208},"ports",[34,210,208],{},[17,212,213,41],{},[34,214,215],{},"PortChoice",[17,217,218],{},"What answers a port — a name, or the chain from the outside in.",[17,220,221,224,225,25],{},[55,222,223],{},"Fougere's own ports:"," see ",[21,226,228],{"href":227},"\u002Freference\u002Fports","Ports Fougere opens",[30,230,232],{"id":231},"protocols",[34,233,231],{},[17,235,236,41],{},[34,237,238],{},"ProtocolConfig",[17,240,241],{},"The protocols this app serves beside its own calls — named here, made available by an import.",[17,243,244,61,247,65,250,70,254,65,257,261,262,25],{},[55,245,246],{},"Serves:",[34,248,249],{},"graphql",[21,251,253],{"href":252},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql",[34,255,256],{},"rest",[21,258,260],{"href":259},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","). See ",[21,263,265],{"href":264},"\u002Freference\u002Fprotocols","Protocols",[30,267,269],{"id":268},"state",[34,270,268],{},[17,272,273,41],{},[34,274,275],{},"Record\u003Cstring, StateEntry>",[17,277,278,279,25],{},"How each name of the caller's state is kept between requests.\nEx: ",[34,280,281],{},"{ cart: { cookie: { maxAge: 604800 } } }",[17,283,284,61,287,65,290,70,294,65,297,261,301,25],{},[55,285,286],{},"Kept by:",[34,288,289],{},"cookie",[21,291,293],{"href":292},"\u002Freference\u002Fpackages\u002Fstate-cookie","@fougere\u002Fstate-cookie",[34,295,296],{},"session",[21,298,300],{"href":299},"\u002Freference\u002Fpackages\u002Fstate-session","@fougere\u002Fstate-session",[21,302,304],{"href":303},"\u002Freference\u002Fstates","State keepers",[30,306,308],{"id":307},"server",[34,309,307],{},[17,311,312,41],{},[34,313,314],{},"ServerConfig",[17,316,317,318,321,322,25],{},"The srvx middlewares around what ",[34,319,320],{},"fougere serve"," answers, outside in.\nEx: ",[34,323,324],{},"{ use: [cors()] }",{"title":326,"searchDepth":327,"depth":327,"links":328},"",2,[329,331,332,333,334,335,336,337,338],{"id":32,"depth":330,"text":32},3,{"id":119,"depth":330,"text":119},{"id":132,"depth":330,"text":135},{"id":146,"depth":330,"text":149},{"id":160,"depth":330,"text":160},{"id":208,"depth":330,"text":208},{"id":231,"depth":330,"text":231},{"id":268,"depth":330,"text":268},{"id":307,"depth":330,"text":307},"Every key the app config admits, and which package answers each one.","md",{"name":8,"lines":342,"notes":368},[343,345,346,348,350,352,354,356,358,360,362,364,366],{"text":344},"import { defineFougere } from '@fougere\u002Fcore';",{"text":326},{"text":347},"export default defineFougere({",{"text":349,"key":32},"  sources: { … },",{"text":351,"key":119},"  conventions: { … },",{"text":353,"key":135},"  logLevel: …,",{"text":355,"key":149},"  maxBodyBytes: …,",{"text":357,"key":160},"  fronds: { … },",{"text":359,"key":208},"  ports: { … },",{"text":361,"key":231},"  protocols: { … },",{"text":363,"key":268},"  state: { … },",{"text":365,"key":307},"  server: { … },",{"text":367},"});",{"sources":369,"conventions":391,"logLevel":393,"maxBodyBytes":395,"fronds":398,"ports":408,"protocols":411,"state":419,"server":428},{"type":40,"optional":370,"doc":371,"links":372},true,"Where entities live: a name, a type and its options, then `rows:` and `values:`.",[373,375,377,379,381,383,385,387,389],{"label":374,"path":68},"env — @fougere\u002Fadapter-env",{"label":376,"path":76},"file — @fougere\u002Fadapter-file",{"label":378,"path":83},"memory — @fougere\u002Fadapter-memory",{"label":380,"path":90},"sqlite — @fougere\u002Fadapter-sql",{"label":382,"path":90},"pg — @fougere\u002Fadapter-sql",{"label":384,"path":90},"mysql — @fougere\u002Fadapter-sql",{"label":386,"path":90},"mssql — @fougere\u002Fadapter-sql",{"label":388,"path":90},"d1 — @fougere\u002Fadapter-sql",{"label":390,"path":115},"Every source type",{"type":126,"optional":370,"doc":129,"links":392},[],{"type":140,"optional":370,"doc":143,"links":394},[],{"type":154,"optional":370,"doc":396,"links":397},"How many bytes a caller may send in one call — 2 MiB when unsaid.",[],{"type":167,"optional":370,"doc":170,"links":399},[400,402,404,406],{"label":401,"path":178},"@fougere\u002Fcalls",{"label":403,"path":185},"@fougere\u002Fobservability",{"label":405,"path":191},"@fougere\u002Flog",{"label":407,"path":197},"@fougere\u002Fworkflow",{"type":215,"optional":370,"doc":218,"links":409},[410],{"label":228,"path":227},{"type":238,"optional":370,"doc":241,"links":412},[413,415,417],{"label":414,"path":252},"graphql — @fougere\u002Fadapter-graphql",{"label":416,"path":259},"rest — @fougere\u002Fadapter-rest",{"label":418,"path":264},"Every protocol",{"type":275,"optional":370,"doc":420,"links":421},"How each name of the caller's state is kept between requests.",[422,424,426],{"label":423,"path":292},"cookie — @fougere\u002Fstate-cookie",{"label":425,"path":299},"session — @fougere\u002Fstate-session",{"label":427,"path":303},"Every state keeper",{"type":314,"optional":370,"doc":429,"links":430},"The srvx middlewares around what `fougere serve` answers, outside in.",[],{},"\u002Freference\u002Fconfig",{"title":8,"description":339},"reference\u002F03.config","7JKSUiSFx_wGKDsuGmem31GsyKtN_eOV6FOmod58mIo",[437,442,447,448,453,456,459,462,467,470,475,480,485,488,491,494,497,500,503,508,513,518,521,526,531,536,541,546,551,556,561,564,569,574,577,582,587,592,597,600,603,608,613,618,623],{"path":438,"title":439,"description":440,"stem":441},"\u002Freference\u002Fcli","CLI","fougere new, serve, call, sync, graph — composing a workspace, hosting one frond, invoking an operation from a shell.","reference\u002F01.cli",{"path":443,"title":444,"description":445,"stem":446},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":432,"title":8,"description":339,"stem":434},{"path":449,"title":450,"description":451,"stem":452},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":115,"title":116,"description":454,"stem":455},"Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":264,"title":265,"description":457,"stem":458},"What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":303,"title":304,"description":460,"stem":461},"How state: may keep a caller's values.","reference\u002F07.states",{"path":463,"title":464,"description":465,"stem":466},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":227,"title":228,"description":468,"stem":469},"The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":471,"title":472,"description":473,"stem":474},"\u002Freference\u002Finterfaces","Interfaces to extend","The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":476,"title":477,"description":478,"stem":479},"\u002Freference\u002Fdiagnostics","Boot and check diagnostics","Every code a boot, the scan or fougere check can raise, and what it says.","reference\u002F11.diagnostics",{"path":481,"title":482,"description":483,"stem":484},"\u002Freference\u002Fpackages\u002Fadapter-duckdb","@fougere\u002Fadapter-duckdb","Read across an app's sources — one SQL query over what DuckDB can attach.","reference\u002Fpackages\u002Fadapter-duckdb",{"path":68,"title":69,"description":486,"stem":487},"The process environment as a source — MEILI_URL read as Meili's url, judged at boot.","reference\u002Fpackages\u002Fadapter-env",{"path":76,"title":77,"description":489,"stem":490},"Rows as files — one JSON or YAML file per row, in a directory per entity.","reference\u002Fpackages\u002Fadapter-file",{"path":252,"title":253,"description":492,"stem":493},"Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":83,"title":84,"description":495,"stem":496},"Rows in a Map — the source a first run meets, and the one that ships no driver.","reference\u002Fpackages\u002Fadapter-memory",{"path":259,"title":260,"description":498,"stem":499},"Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":90,"title":91,"description":501,"stem":502},"Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":504,"title":505,"description":506,"stem":507},"\u002Freference\u002Fpackages\u002Fadmin","@fougere\u002Fadmin","A back-office derived from what the app already says it hosts — a react-admin DataProvider over the Fougere wire.","reference\u002Fpackages\u002Fadmin",{"path":509,"title":510,"description":511,"stem":512},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":514,"title":515,"description":516,"stem":517},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":178,"title":401,"description":519,"stem":520},"Optional call log for Fougere: a bounded ring of every dispatch, served as an rpc operation. Read it with `fougere devtools`.","reference\u002Fpackages\u002Fcalls",{"path":522,"title":523,"description":524,"stem":525},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":527,"title":528,"description":529,"stem":530},"\u002Freference\u002Fpackages\u002Fcompiler","@fougere\u002Fcompiler","The scan: Fougere reading a project's source to produce the descriptors core boots from. Needs a filesystem and a TypeScript program.","reference\u002Fpackages\u002Fcompiler",{"path":532,"title":533,"description":534,"stem":535},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":537,"title":538,"description":539,"stem":540},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":542,"title":543,"description":544,"stem":545},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":547,"title":548,"description":549,"stem":550},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":552,"title":553,"description":554,"stem":555},"\u002Freference\u002Fpackages\u002Fgraph","@fougere\u002Fgraph","Fougere's graph: a labelled directed multigraph, and the four questions asked of it — order, cycles, components, reach. Zero dependencies.","reference\u002Fpackages\u002Fgraph",{"path":557,"title":558,"description":559,"stem":560},"\u002Freference\u002Fpackages\u002Fhttp","@fougere\u002Fhttp","The words every HTTP door speaks — a method, an answer, the headers a state travels in.","reference\u002Fpackages\u002Fhttp",{"path":191,"title":405,"description":562,"stem":563},"Logging for Fougere: two lines for every call, in every process, and a file destination for the lines.","reference\u002Fpackages\u002Flog",{"path":565,"title":566,"description":567,"stem":568},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":570,"title":571,"description":572,"stem":573},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":185,"title":403,"description":575,"stem":576},"Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":578,"title":579,"description":580,"stem":581},"\u002Freference\u002Fpackages\u002Foclif","@fougere\u002Foclif","A frond's operations, as a terminal: topics, flags and help derived from what it declares.","reference\u002Fpackages\u002Foclif",{"path":583,"title":584,"description":585,"stem":586},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":588,"title":589,"description":590,"stem":591},"\u002Freference\u002Fpackages\u002Fregistry","@fougere\u002Fregistry","Fougere's registry: one answer per name, refused when a second one arrives, and a reload that says it replaces. Zero dependencies.","reference\u002Fpackages\u002Fregistry",{"path":593,"title":594,"description":595,"stem":596},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":292,"title":293,"description":598,"stem":599},"A caller's state kept in a cookie — what `state: { cart: { cookie: {} } }` names, signed by core, carried by every HTTP door.","reference\u002Fpackages\u002Fstate-cookie",{"path":299,"title":300,"description":601,"stem":602},"A caller's state kept in a session — what `state: { cart: { session: {} } }` names: one cookie holds a reference, the values a row in a source.","reference\u002Fpackages\u002Fstate-session",{"path":604,"title":605,"description":606,"stem":607},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":609,"title":610,"description":611,"stem":612},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":614,"title":615,"description":616,"stem":617},"\u002Freference\u002Fpackages\u002Ftransport-http","@fougere\u002Ftransport-http","The call contract on the wire, in JSON-RPC 2.0 (server + client).","reference\u002Fpackages\u002Ftransport-http",{"path":619,"title":620,"description":621,"stem":622},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":197,"title":407,"description":624,"stem":625},"A release that goes to the end: the journal is three entities, the sweep is an operation, and a shared journal is one line of remotes:.","reference\u002Fpackages\u002Fworkflow",1794396612306]