[{"data":1,"prerenderedAt":855},["ShallowReactive",2],{"docs:\u002Ffr\u002Fdocs":3,"docs-nav:fr":725},{"id":4,"title":5,"body":6,"description":718,"extension":719,"meta":720,"navigation":189,"path":721,"seo":722,"stem":723,"__hash__":724},"docs_fr\u002Ffr\u002Fdocs\u002Findex.md","Qu'est-ce que Fougere",{"type":7,"value":8,"toc":713},"minimark",[9,13,21,29,79,82,87,102,404,407,410,467,471,485,520,527,530,533,536,557,561,581,646,667,692,709],[10,11,5],"h1",{"id":12},"quest-ce-que-fougere",[14,15,16,17],"p",{},"Fougere est un framework TypeScript construit sur une seule idée : ",[18,19,20],"strong",{},"vous déclarez le\ndomaine, et tout en dérive — jusqu'au process où il tourne.",[14,22,23,24,28],{},"Énoncée à la forme négative, elle se vérifie : ",[25,26,27],"em",{},"la déclaration ne nomme rien en dehors\nd'elle-même."," Ni table, ni protocole, ni hôte, ni adresse n'y figurent. Deux conséquences en\ndécoulent, et on les vend d'habitude comme deux fonctionnalités distinctes :",[30,31,32,48],"table",{},[33,34,35],"thead",{},[36,37,38,42,45],"tr",{},[39,40,41],"th",{},"La déclaration ne nomme pas…",[39,43,44],{},"donc cette chose est…",[39,46,47],{},"son nom usuel",[49,50,51,66],"tbody",{},[36,52,53,57,63],{},[54,55,56],"td",{},"sa table, son type GraphQL, son formulaire, son juge",[54,58,59,62],{},[18,60,61],{},"dérivée"," d'elle",[54,64,65],{},"single-schema",[36,67,68,71,76],{},[54,69,70],{},"son hôte, son stockage, sa porte, son adresse",[54,72,73,62],{},[18,74,75],{},"choisie en dehors",[54,77,78],{},"le gradient",[14,80,81],{},"Une seule règle lue dans deux directions — ce qu'une déclaration produit, et ce dont on peut\nl'entourer. Le reste de cette page, ce sont ces deux lectures.",[83,84,86],"h2",{"id":85},"ce-qui-en-dérive","Ce qui en dérive",[14,88,89,92,93,97,98,101],{},[18,90,91],{},"Single-schema."," Une classe d'entité déclare vos données une fois — et juge elle-même\nses entrées : le même ",[94,95,96],"code",{},"validate()"," tourne dans le navigateur et à la façade. Le juge est\nlui-même une projection — dérivée de l'axe shape — mais une projection normative,\nembarquée avec la classe : toutes les autres doivent lui obéir, et elle ne peut pas\ndériver seule. Les tables\nSQLite, les types GraphQL, les contrats de formulaire et les surfaces d'API sont des\n",[25,99,100],{},"projections"," de cette déclaration — rien n'est écrit deux fois.",[103,104,109],"pre",{"className":105,"code":106,"language":107,"meta":108,"style":108},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import { entity, primary, text, created, oneOf, date, readOnly, optional } from '@fougere\u002Fschema';\n\nexport default class Post extends entity({\n  id: primary(),\n  title: text({ min: 1, max: 160 }),\n  body: optional(text()),\n  createdAt: created(),\n  status: readOnly(oneOf('draft', 'published', { default: 'draft' })),\n  publishedAt: readOnly(optional(date())),\n}) {}\n","ts","",[94,110,111,184,191,220,238,279,299,313,367,392],{"__ignoreMap":108},[112,113,116,120,124,128,131,134,136,139,141,144,146,149,151,154,156,159,161,164,167,170,174,178,181],"span",{"class":114,"line":115},"line",1,[112,117,119],{"class":118},"sVHd0","import",[112,121,123],{"class":122},"sP7_E"," {",[112,125,127],{"class":126},"su5hD"," entity",[112,129,130],{"class":122},",",[112,132,133],{"class":126}," primary",[112,135,130],{"class":122},[112,137,138],{"class":126}," text",[112,140,130],{"class":122},[112,142,143],{"class":126}," created",[112,145,130],{"class":122},[112,147,148],{"class":126}," oneOf",[112,150,130],{"class":122},[112,152,153],{"class":126}," date",[112,155,130],{"class":122},[112,157,158],{"class":126}," readOnly",[112,160,130],{"class":122},[112,162,163],{"class":126}," optional",[112,165,166],{"class":122}," }",[112,168,169],{"class":118}," from",[112,171,173],{"class":172},"sjJ54"," '",[112,175,177],{"class":176},"s_sjI","@fougere\u002Fschema",[112,179,180],{"class":172},"'",[112,182,183],{"class":122},";\n",[112,185,187],{"class":114,"line":186},2,[112,188,190],{"emptyLinePlaceholder":189},true,"\n",[112,192,194,197,200,204,208,211,214,217],{"class":114,"line":193},3,[112,195,196],{"class":118},"export",[112,198,199],{"class":118}," default",[112,201,203],{"class":202},"sbsja"," class",[112,205,207],{"class":206},"sbgvK"," Post",[112,209,210],{"class":202}," extends",[112,212,127],{"class":213},"sGLFI",[112,215,216],{"class":126},"(",[112,218,219],{"class":122},"{\n",[112,221,223,227,230,232,235],{"class":114,"line":222},4,[112,224,226],{"class":225},"skxfh","  id",[112,228,229],{"class":122},":",[112,231,133],{"class":213},[112,233,234],{"class":126},"()",[112,236,237],{"class":122},",\n",[112,239,241,244,246,248,250,253,256,258,262,264,267,269,272,274,277],{"class":114,"line":240},5,[112,242,243],{"class":225},"  title",[112,245,229],{"class":122},[112,247,138],{"class":213},[112,249,216],{"class":126},[112,251,252],{"class":122},"{",[112,254,255],{"class":225}," min",[112,257,229],{"class":122},[112,259,261],{"class":260},"srdBf"," 1",[112,263,130],{"class":122},[112,265,266],{"class":225}," max",[112,268,229],{"class":122},[112,270,271],{"class":260}," 160",[112,273,166],{"class":122},[112,275,276],{"class":126},")",[112,278,237],{"class":122},[112,280,282,285,287,289,291,294,297],{"class":114,"line":281},6,[112,283,284],{"class":225},"  body",[112,286,229],{"class":122},[112,288,163],{"class":213},[112,290,216],{"class":126},[112,292,293],{"class":213},"text",[112,295,296],{"class":126},"())",[112,298,237],{"class":122},[112,300,302,305,307,309,311],{"class":114,"line":301},7,[112,303,304],{"class":225},"  createdAt",[112,306,229],{"class":122},[112,308,143],{"class":213},[112,310,234],{"class":126},[112,312,237],{"class":122},[112,314,316,319,321,323,325,328,330,332,335,337,339,341,344,346,348,350,352,354,356,358,360,362,365],{"class":114,"line":315},8,[112,317,318],{"class":225},"  status",[112,320,229],{"class":122},[112,322,158],{"class":213},[112,324,216],{"class":126},[112,326,327],{"class":213},"oneOf",[112,329,216],{"class":126},[112,331,180],{"class":172},[112,333,334],{"class":176},"draft",[112,336,180],{"class":172},[112,338,130],{"class":122},[112,340,173],{"class":172},[112,342,343],{"class":176},"published",[112,345,180],{"class":172},[112,347,130],{"class":122},[112,349,123],{"class":122},[112,351,199],{"class":225},[112,353,229],{"class":122},[112,355,173],{"class":172},[112,357,334],{"class":176},[112,359,180],{"class":172},[112,361,166],{"class":122},[112,363,364],{"class":126},"))",[112,366,237],{"class":122},[112,368,370,373,375,377,379,382,384,387,390],{"class":114,"line":369},9,[112,371,372],{"class":225},"  publishedAt",[112,374,229],{"class":122},[112,376,158],{"class":213},[112,378,216],{"class":126},[112,380,381],{"class":213},"optional",[112,383,216],{"class":126},[112,385,386],{"class":213},"date",[112,388,389],{"class":126},"()))",[112,391,237],{"class":122},[112,393,395,398,401],{"class":114,"line":394},10,[112,396,397],{"class":122},"}",[112,399,400],{"class":126},") ",[112,402,403],{"class":122},"{}\n",[405,406],"derivation-diagram",{},[14,408,409],{},"Cette seule classe est à la fois :",[411,412,413,429,438,448,457],"ul",{},[414,415,416,417,420,421,424,425,428],"li",{},"le ",[18,418,419],{},"type TypeScript"," d'une ligne (",[94,422,423],{},"function render(p: Post)"," — pas d'",[94,426,427],{},"Infer\u003Ctypeof …>","),",[414,430,416,431,434,435,428],{},[18,432,433],{},"validateur"," des entrées client (",[94,436,437],{},"Post.validate(input)",[414,439,440,441,444,445,428],{},"la ",[18,442,443],{},"metadata"," que chaque adapter lit (",[94,446,447],{},"Post.getFields()",[414,449,440,450,453,454,428],{},[18,451,452],{},"désignation"," que les pages utilisent pour appeler les opérations (",[94,455,456],{},"useQuery(Post, 'list')",[414,458,416,459,462,463,466],{},[18,460,461],{},"type nominal"," que l'injection de dépendances matche dans les signatures (",[94,464,465],{},"user?: User",").",[83,468,470],{"id":469},"ce-qui-est-choisi-en-dehors","Ce qui est choisi en dehors",[14,472,473,476,477,480,481,484],{},[18,474,475],{},"Le gradient."," La logique métier vit dans des ",[25,478,479],{},"Fronds"," — des modules autonomes\nd'entités, handlers, collectors et seeds. Une Frond tourne in-process aujourd'hui et dans\nson propre process demain, derrière JSON-RPC 2.0, avec un ",[18,482,483],{},"code utilisateur identique",".\nL'énoncé de topologie entier tient en une ligne de config :",[103,486,488],{"className":105,"code":487,"language":107,"meta":108,"style":108},"\u002F\u002F fougere.config.ts\nremotes: { blog: 'http:\u002F\u002F127.0.0.1:4100' }\n",[94,489,490,496],{"__ignoreMap":108},[112,491,492],{"class":114,"line":115},[112,493,495],{"class":494},"sutJx","\u002F\u002F fougere.config.ts\n",[112,497,498,501,503,505,508,510,512,515,517],{"class":114,"line":186},[112,499,500],{"class":206},"remotes",[112,502,229],{"class":122},[112,504,123],{"class":122},[112,506,507],{"class":206}," blog",[112,509,229],{"class":122},[112,511,173],{"class":172},[112,513,514],{"class":176},"http:\u002F\u002F127.0.0.1:4100",[112,516,180],{"class":172},[112,518,519],{"class":122}," }\n",[14,521,522,523,526],{},"Pas de RPC sans voyage : un appel est une valeur ",[94,524,525],{},"(entity, operation, invocation)"," ; le\nrunner l'exécute directement en mémoire quand la Frond est locale et la met sur le fil\nquand elle est distante. Les transports déplacent la valeur — ils ne la remodèlent jamais.",[14,528,529],{},"Donc le split coûte le saut et le JSON qui voyage avec, et rien d'autre : aucune\nsérialisation que le chemin local éviterait, aucun impôt du framework par-dessus le réseau.",[14,531,532],{},"Les quatre familles que la règle refuse de nommer, dessinées — le gradient étant la\nquatrième, lue comme un mouvement plutôt que comme une liste :",[534,535],"agnostic-core",{},[14,537,538,539,542,543,546,547,550,551,556],{},"Et ça se vérifie au ",[94,540,541],{},"diff"," : les cinq demos qui servent ce même blog sous Next,\nTanStack Start, React Router, SvelteKit et Express partagent un répertoire ",[94,544,545],{},"fronds\u002F","\nidentique à l'octet, et trois de ces hôtes ne demandent aucun paquet Fougere. Alors\n",[25,548,549],{},"progressif"," ne veut dire que ceci : chaque pas vers l'extérieur\n",[552,553,555],"a",{"href":554},"\u002Ffr\u002Fdocs\u002Finfra\u002Fgradient#cinq-barreaux-et-le-prix-de-chacun","énonce son prix",", et aucun ne\ndemande de réécrire ce que vous avez écrit.",[83,558,560],{"id":559},"ordre-de-lecture","Ordre de lecture",[14,562,563,566,567,571,572,576,577],{},[18,564,565],{},"Concepts"," — ",[552,568,570],{"href":569},"\u002Ffr\u002Fdocs\u002Fconcepts\u002Fphilosophy","Philosophie"," · ",[552,573,575],{"href":574},"\u002Ffr\u002Fdocs\u002Fconcepts\u002Ffrond","La Frond"," ·\n",[552,578,580],{"href":579},"\u002Ffr\u002Fdocs\u002Fconcepts\u002Fthe-base","Le socle",[14,582,583,566,586,576,590,571,594,576,598,576,602,571,606,576,610,571,614,576,618,571,622,571,626,571,630,576,634,571,638,571,642],{},[18,584,585],{},"Côté serveur",[552,587,589],{"href":588},"\u002Ffr\u002Fdocs\u002Fexisting-app","Une app que vous avez déjà",[552,591,593],{"href":592},"\u002Ffr\u002Fdocs\u002Fbring-your-schema","Apportez votre schéma",[552,595,597],{"href":596},"\u002Ffr\u002Fdocs\u002Fgetting-started","Démarrer",[552,599,601],{"href":600},"\u002Ffr\u002Fdocs\u002Fcli","La CLI",[552,603,605],{"href":604},"\u002Ffr\u002Fdocs\u002Fschema\u002Fentities","Entités",[552,607,609],{"href":608},"\u002Ffr\u002Fdocs\u002Fschema\u002Fviews","Vues",[552,611,613],{"href":612},"\u002Ffr\u002Fdocs\u002Fschema\u002Fstandard-schema","Standard Schema",[552,615,617],{"href":616},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Fhandlers","Handlers",[552,619,621],{"href":620},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Fpresenters","Presenters",[552,623,625],{"href":624},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Fcollectors","Collectors",[552,627,629],{"href":628},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Ferrors","Erreurs",[552,631,633],{"href":632},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Fseeds","Seeds",[552,635,637],{"href":636},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Ffacts","Les faits",[552,639,641],{"href":640},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Fstorage","Le port Storage",[552,643,645],{"href":644},"\u002Ffr\u002Fdocs\u002Fbusiness\u002Frepositories","Les repositories",[14,647,648,566,651,576,655,571,659,571,663],{},[18,649,650],{},"Côté client",[552,652,654],{"href":653},"\u002Ffr\u002Fdocs\u002Fclient\u002Fqueries-commands","Queries & commands",[552,656,658],{"href":657},"\u002Ffr\u002Fdocs\u002Fclient\u002Fforms","Formulaires",[552,660,662],{"href":661},"\u002Ffr\u002Fdocs\u002Fclient\u002Fsession","Session",[552,664,666],{"href":665},"\u002Ffr\u002Fdocs\u002Fclient\u002Finvoke","invoke",[14,668,669,566,672,571,676,576,680,571,684,576,688],{},[18,670,671],{},"Topologie",[552,673,675],{"href":674},"\u002Ffr\u002Fdocs\u002Finfra\u002Fgradient","Le gradient",[552,677,679],{"href":678},"\u002Ffr\u002Fdocs\u002Finfra\u002Fsurfaces","Surfaces",[552,681,683],{"href":682},"\u002Ffr\u002Fdocs\u002Finfra\u002Fdeployment","Déploiement",[552,685,687],{"href":686},"\u002Ffr\u002Fdocs\u002Finfra\u002Fhosts","Les hôtes",[552,689,691],{"href":690},"\u002Ffr\u002Fdocs\u002Finfra\u002Fsources","Les sources",[693,694,695],"blockquote",{},[14,696,697,700,701,704,705,708],{},[18,698,699],{},"Statut."," Fougere est en alpha : les paquets ",[94,702,703],{},"@fougere\u002F*"," sont sur npm sous le tag\n",[94,706,707],{},"alpha",", et cette documentation décrit l'API telle qu'elle existe dans le dépôt\naujourd'hui. Ce site tourne dessus.",[710,711,712],"style",{},"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 .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .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}",{"title":108,"searchDepth":186,"depth":186,"links":714},[715,716,717],{"id":85,"depth":186,"text":86},{"id":469,"depth":186,"text":470},{"id":559,"depth":186,"text":560},"Une seule idée — vous déclarez le domaine, et tout en dérive, jusqu'au process où il tourne.","md",{},"\u002Ffr\u002Fdocs",{"title":5,"description":718},"fr\u002Fdocs\u002Findex","LPA_5Bbw3pOiPKAIWVxUD6xXzaM9VJO-zGVURR1u9CU",[726],{"title":727,"path":728,"stem":729,"children":730,"page":756},"Fr","\u002Ffr","fr",[731],{"title":5,"path":721,"stem":723,"children":732,"page":-1},[733,734,736,738,740,742,757,776,805,822],{"title":5,"path":721,"stem":723},{"title":597,"path":596,"stem":735},"fr\u002Fdocs\u002F01.getting-started",{"title":589,"path":588,"stem":737},"fr\u002Fdocs\u002F02.existing-app",{"title":593,"path":592,"stem":739},"fr\u002Fdocs\u002F03.bring-your-schema",{"title":601,"path":600,"stem":741},"fr\u002Fdocs\u002F04.cli",{"title":565,"path":743,"stem":744,"children":745,"page":756},"\u002Ffr\u002Fdocs\u002Fconcepts","fr\u002Fdocs\u002F2.concepts",[746,748,750,754],{"title":570,"path":569,"stem":747},"fr\u002Fdocs\u002F2.concepts\u002F1.philosophy",{"title":575,"path":574,"stem":749},"fr\u002Fdocs\u002F2.concepts\u002F2.frond",{"title":751,"path":752,"stem":753},"Le chemin le plus court","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fshortest-path","fr\u002Fdocs\u002F2.concepts\u002F3.shortest-path",{"title":580,"path":579,"stem":755},"fr\u002Fdocs\u002F2.concepts\u002F4.the-base",false,{"title":758,"path":759,"stem":760,"children":761,"page":756},"Schéma","\u002Ffr\u002Fdocs\u002Fschema","fr\u002Fdocs\u002F3.schema",[762,764,766,770,772],{"title":605,"path":604,"stem":763},"fr\u002Fdocs\u002F3.schema\u002F1.entities",{"title":609,"path":608,"stem":765},"fr\u002Fdocs\u002F3.schema\u002F2.views",{"title":767,"path":768,"stem":769},"La carte d'identité","\u002Ffr\u002Fdocs\u002Fschema\u002Fcard","fr\u002Fdocs\u002F3.schema\u002F3.card",{"title":613,"path":612,"stem":771},"fr\u002Fdocs\u002F3.schema\u002F4.standard-schema",{"title":773,"path":774,"stem":775},"Comment un schéma bouge","\u002Ffr\u002Fdocs\u002Fschema\u002Fevolution","fr\u002Fdocs\u002F3.schema\u002F5.evolution",{"title":777,"path":778,"stem":779,"children":780,"page":756},"Métier","\u002Ffr\u002Fdocs\u002Fbusiness","fr\u002Fdocs\u002F4.business",[781,783,787,789,791,793,795,797,799,803],{"title":617,"path":616,"stem":782},"fr\u002Fdocs\u002F4.business\u002F1.handlers",{"title":784,"path":785,"stem":786},"Les ports","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fports","fr\u002Fdocs\u002F4.business\u002F10.ports",{"title":621,"path":620,"stem":788},"fr\u002Fdocs\u002F4.business\u002F2.presenters",{"title":625,"path":624,"stem":790},"fr\u002Fdocs\u002F4.business\u002F3.collectors",{"title":629,"path":628,"stem":792},"fr\u002Fdocs\u002F4.business\u002F4.errors",{"title":633,"path":632,"stem":794},"fr\u002Fdocs\u002F4.business\u002F5.seeds",{"title":637,"path":636,"stem":796},"fr\u002Fdocs\u002F4.business\u002F6.facts",{"title":641,"path":640,"stem":798},"fr\u002Fdocs\u002F4.business\u002F7.storage",{"title":800,"path":801,"stem":802},"Des écritures qui tiennent ou tombent ensemble","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ftogether","fr\u002Fdocs\u002F4.business\u002F8.together",{"title":645,"path":644,"stem":804},"fr\u002Fdocs\u002F4.business\u002F9.repositories",{"title":806,"path":807,"stem":808,"children":809,"page":756},"Client","\u002Ffr\u002Fdocs\u002Fclient","fr\u002Fdocs\u002F5.client",[810,812,814,816,818],{"title":654,"path":653,"stem":811},"fr\u002Fdocs\u002F5.client\u002F1.queries-commands",{"title":658,"path":657,"stem":813},"fr\u002Fdocs\u002F5.client\u002F2.forms",{"title":662,"path":661,"stem":815},"fr\u002Fdocs\u002F5.client\u002F3.session",{"title":666,"path":665,"stem":817},"fr\u002Fdocs\u002F5.client\u002F4.invoke",{"title":819,"path":820,"stem":821},"Back-office","\u002Ffr\u002Fdocs\u002Fclient\u002Fadmin","fr\u002Fdocs\u002F5.client\u002F5.admin",{"title":823,"path":824,"stem":825,"children":826,"page":756},"Infrastructure","\u002Ffr\u002Fdocs\u002Finfra","fr\u002Fdocs\u002F6.infra",[827,829,832,834,837,839,843,847,851],{"title":675,"path":674,"stem":828},"fr\u002Fdocs\u002F6.infra\u002F1.gradient",{"title":830,"path":678,"stem":831},"Surfaces — REST & GraphQL","fr\u002Fdocs\u002F6.infra\u002F2.surfaces",{"title":683,"path":682,"stem":833},"fr\u002Fdocs\u002F6.infra\u002F3.deployment",{"title":835,"path":686,"stem":836},"Hôtes","fr\u002Fdocs\u002F6.infra\u002F4.hosts",{"title":691,"path":690,"stem":838},"fr\u002Fdocs\u002F6.infra\u002F5.sources",{"title":840,"path":841,"stem":842},"Le cycle de vie","\u002Ffr\u002Fdocs\u002Finfra\u002Flifecycle","fr\u002Fdocs\u002F6.infra\u002F6.lifecycle",{"title":844,"path":845,"stem":846},"L'identité entre Fronds","\u002Ffr\u002Fdocs\u002Finfra\u002Fidentity","fr\u002Fdocs\u002F6.infra\u002F7.identity",{"title":848,"path":849,"stem":850},"Observabilité","\u002Ffr\u002Fdocs\u002Finfra\u002Fobservability","fr\u002Fdocs\u002F6.infra\u002F8.observability",{"title":852,"path":853,"stem":854},"Tests","\u002Ffr\u002Fdocs\u002Finfra\u002Ftesting","fr\u002Fdocs\u002F6.infra\u002F9.testing",1788598417581]