[{"data":1,"prerenderedAt":1621},["ShallowReactive",2],{"docs-navigation":3,"-docs-templates-configuration-localization-":150,"-docs-templates-configuration-localization--surround":1620},[4,43,114,122],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Get Started","i-lucide-rocket","\u002Fdocs\u002Fget-started","docs\u002F1.get-started\u002Findex",[10,13,18,23,28,33,38],{"title":11,"path":7,"stem":8,"icon":12},"Introduction","i-lucide-compass",{"title":14,"path":15,"stem":16,"icon":17},"Key Concepts","\u002Fdocs\u002Fget-started\u002Fconcepts","docs\u002F1.get-started\u002F2.concepts","i-lucide-lightbulb",{"title":19,"path":20,"stem":21,"icon":22},"Browsing the Catalog","\u002Fdocs\u002Fget-started\u002Fbrowsing-the-catalog","docs\u002F1.get-started\u002F3.browsing-the-catalog","i-lucide-search",{"title":24,"path":25,"stem":26,"icon":27},"Managing Apps","\u002Fdocs\u002Fget-started\u002Fmanaging-apps","docs\u002F1.get-started\u002F4.managing-apps","i-lucide-settings-2",{"title":29,"path":30,"stem":31,"icon":32},"Configuration","\u002Fdocs\u002Fget-started\u002Fconfiguration","docs\u002F1.get-started\u002F5.configuration","i-lucide-sliders-horizontal",{"title":34,"path":35,"stem":36,"icon":37},"Accessing Apps","\u002Fdocs\u002Fget-started\u002Faccessing-apps","docs\u002F1.get-started\u002F6.accessing-apps","i-lucide-globe",{"title":39,"path":40,"stem":41,"icon":42},"Experimental Features","\u002Fdocs\u002Fget-started\u002Fexperimental-features","docs\u002F1.get-started\u002F7.experimental-features","i-lucide-flask-conical",{"title":44,"icon":45,"path":46,"stem":47,"children":48},"Templates","i-lucide-puzzle","\u002Fdocs\u002Ftemplates","docs\u002F2.templates\u002Findex",[49,51,56,79,101,105,109],{"title":11,"path":46,"stem":47,"icon":50},"i-lucide-book-open",{"title":52,"path":53,"stem":54,"icon":55},"Directory Structure","\u002Fdocs\u002Ftemplates\u002Fdirectory-structure","docs\u002F2.templates\u002F1.directory-structure","i-lucide-folder-tree",{"title":29,"icon":57,"path":58,"stem":59,"children":60},"i-lucide-settings","\u002Fdocs\u002Ftemplates\u002Fconfiguration","docs\u002F2.templates\u002F2.configuration\u002Findex",[61,64,69,74],{"title":62,"path":58,"stem":59,"icon":63},"Overview","i-lucide-list",{"title":65,"path":66,"stem":67,"icon":68},"Variables","\u002Fdocs\u002Ftemplates\u002Fconfiguration\u002Fvariables","docs\u002F2.templates\u002F2.configuration\u002F1.variables","i-lucide-braces",{"title":70,"path":71,"stem":72,"icon":73},"Localization","\u002Fdocs\u002Ftemplates\u002Fconfiguration\u002Flocalization","docs\u002F2.templates\u002F2.configuration\u002F2.localization","i-lucide-languages",{"title":75,"path":76,"stem":77,"icon":78},"Merging","\u002Fdocs\u002Ftemplates\u002Fconfiguration\u002Fmerging","docs\u002F2.templates\u002F2.configuration\u002F3.merging","i-lucide-git-merge",{"title":80,"icon":81,"path":82,"stem":83,"children":84},"Lawn Compose","i-lucide-file-code","\u002Fdocs\u002Ftemplates\u002Flawn-compose","docs\u002F2.templates\u002F3.lawn-compose\u002Findex",[85,86,91,96],{"title":62,"path":82,"stem":83,"icon":63},{"title":87,"path":88,"stem":89,"icon":90},"Format","\u002Fdocs\u002Ftemplates\u002Flawn-compose\u002Fformat","docs\u002F2.templates\u002F3.lawn-compose\u002F2.format","i-lucide-list-checks",{"title":92,"path":93,"stem":94,"icon":95},"Extensions","\u002Fdocs\u002Ftemplates\u002Flawn-compose\u002Fextensions","docs\u002F2.templates\u002F3.lawn-compose\u002F3.extensions","i-lucide-blocks",{"title":97,"path":98,"stem":99,"icon":100},"Validation","\u002Fdocs\u002Ftemplates\u002Flawn-compose\u002Fvalidation","docs\u002F2.templates\u002F3.lawn-compose\u002F4.validation","i-lucide-check-circle",{"title":102,"path":103,"stem":104,"icon":42},"Testing","\u002Fdocs\u002Ftemplates\u002Ftesting","docs\u002F2.templates\u002F4.testing",{"title":106,"path":107,"stem":108,"icon":81},"Complete Example","\u002Fdocs\u002Ftemplates\u002Fexample","docs\u002F2.templates\u002F5.example",{"title":110,"path":111,"stem":112,"icon":113},"Contributing","\u002Fdocs\u002Ftemplates\u002Fcontributing","docs\u002F2.templates\u002F6.contributing","i-lucide-git-pull-request",{"title":115,"path":116,"stem":117,"children":118,"icon":121},"Models","\u002Fdocs\u002Finference","docs\u002F3.inference\u002Findex",[119],{"title":11,"path":116,"stem":117,"icon":120},"i-lucide-construction","i-lucide-brain",{"title":123,"icon":124,"path":125,"stem":126,"children":127},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F4.cli\u002Findex",[128,129,133,138,142,146],{"title":62,"path":125,"stem":126,"icon":63},{"title":130,"path":131,"stem":132,"icon":22},"lawn catalog","\u002Fdocs\u002Fcli\u002Fcatalog","docs\u002F4.cli\u002F2.catalog",{"title":134,"path":135,"stem":136,"icon":137},"lawn app","\u002Fdocs\u002Fcli\u002Fapp","docs\u002F4.cli\u002F3.app","i-lucide-box",{"title":139,"path":140,"stem":141,"icon":57},"lawn system","\u002Fdocs\u002Fcli\u002Fsystem","docs\u002F4.cli\u002F4.system",{"title":143,"path":144,"stem":145,"icon":81},"lawn compose","\u002Fdocs\u002Fcli\u002Fcompose","docs\u002F4.cli\u002F5.compose",{"title":147,"path":148,"stem":149,"icon":45},"lawn template","\u002Fdocs\u002Fcli\u002Ftemplate","docs\u002F4.cli\u002F6.template",{"id":151,"title":70,"body":152,"description":1612,"extension":1613,"head":1614,"links":1614,"meta":1615,"navigation":1616,"ogImage":1614,"path":71,"robots":1614,"schemaOrg":1614,"seo":1617,"sitemap":1618,"stem":72,"__hash__":1619},"docs\u002Fdocs\u002F2.templates\u002F2.configuration\u002F2.localization.md",{"type":153,"value":154,"toc":1602},"minimark",[155,159,162,167,175,185,189,200,768,773,776,828,832,838,1058,1068,1228,1231,1243,1249,1279,1289,1310,1318,1351,1370,1374,1550,1553,1559,1599],[156,157,158],"p",{},"All user-facing strings live in a JSON localization file, not in the YAML template. The YAML defines structure and behavior — variable sources, input types, health check commands, notice element types. The JSON provides presentation — display names, descriptions, option labels, notice titles.",[156,160,161],{},"The engine serves raw localization JSON to clients via gRPC. Clients decode the JSON and merge strings at the display layer.",[163,164,166],"h2",{"id":165},"file-location","File Location",[156,168,169,170,174],{},"Each template includes a ",[171,172,173],"code",{},"locales\u002Fen.json"," file:",[176,177,182],"pre",{"className":178,"code":180,"language":181},[179],"language-text","my-app\u002F\n├── manifest.yaml\n├── locales\u002F\n│   └── en.json            # User-facing strings\n└── lawn-compose\u002F\n    └── v1.0.0.yaml        # Structural config\n","text",[171,183,180],{"__ignoreMap":184},"",[163,186,188],{"id":187},"json-structure","JSON Structure",[156,190,191,192,195,196,199],{},"The JSON has two top-level keys: ",[171,193,194],{},"config"," for top-level config variables and ",[171,197,198],{},"services"," for per-service strings.",[176,201,205],{"className":202,"code":203,"filename":173,"language":204,"meta":184,"style":184},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"config\": {\n    \"POSTGRES_PASSWORD\": {\n      \"displayName\": \"Database Password\",\n      \"description\": \"PostgreSQL password. Auto-generated during install.\"\n    },\n    \"ADMIN_PASSWORD\": {\n      \"displayName\": \"Admin Password\",\n      \"description\": \"Password for the initial admin account.\"\n    }\n  },\n  \"services\": {\n    \"app\": {\n      \"environment\": {\n        \"POSTGRES_HOST\": {\n          \"description\": \"Hostname of the PostgreSQL database server.\",\n          \"group\": \"Database\"\n        },\n        \"TZ\": {\n          \"description\": \"Timezone for the application (e.g. America\u002FNew_York).\"\n        }\n      },\n      \"healthChecks\": {\n        \"web-ui\": {\n          \"description\": \"Web UI is accessible and responding.\"\n        }\n      },\n      \"notices\": {\n        \"login-credentials\": {\n          \"title\": \"Login Credentials\",\n          \"elements\": {\n            \"username\": { \"label\": \"Username\" },\n            \"password\": { \"label\": \"Password\" },\n            \"setup-note\": { \"content\": \"Change these in **Settings > Security** after your first login.\" }\n          }\n        }\n      }\n    }\n  }\n}\n","json",[171,206,207,216,234,250,276,296,302,316,336,354,360,366,379,393,407,423,445,464,470,484,502,508,514,528,542,560,565,570,584,598,619,633,670,701,734,740,745,751,756,762],{"__ignoreMap":184},[208,209,212],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"sMK4o","{\n",[208,217,219,222,225,228,231],{"class":210,"line":218},2,[208,220,221],{"class":214},"  \"",[208,223,194],{"class":224},"spNyl",[208,226,227],{"class":214},"\"",[208,229,230],{"class":214},":",[208,232,233],{"class":214}," {\n",[208,235,237,240,244,246,248],{"class":210,"line":236},3,[208,238,239],{"class":214},"    \"",[208,241,243],{"class":242},"sBMFI","POSTGRES_PASSWORD",[208,245,227],{"class":214},[208,247,230],{"class":214},[208,249,233],{"class":214},[208,251,253,256,260,262,264,267,271,273],{"class":210,"line":252},4,[208,254,255],{"class":214},"      \"",[208,257,259],{"class":258},"sbssI","displayName",[208,261,227],{"class":214},[208,263,230],{"class":214},[208,265,266],{"class":214}," \"",[208,268,270],{"class":269},"sfazB","Database Password",[208,272,227],{"class":214},[208,274,275],{"class":214},",\n",[208,277,279,281,284,286,288,290,293],{"class":210,"line":278},5,[208,280,255],{"class":214},[208,282,283],{"class":258},"description",[208,285,227],{"class":214},[208,287,230],{"class":214},[208,289,266],{"class":214},[208,291,292],{"class":269},"PostgreSQL password. Auto-generated during install.",[208,294,295],{"class":214},"\"\n",[208,297,299],{"class":210,"line":298},6,[208,300,301],{"class":214},"    },\n",[208,303,305,307,310,312,314],{"class":210,"line":304},7,[208,306,239],{"class":214},[208,308,309],{"class":242},"ADMIN_PASSWORD",[208,311,227],{"class":214},[208,313,230],{"class":214},[208,315,233],{"class":214},[208,317,319,321,323,325,327,329,332,334],{"class":210,"line":318},8,[208,320,255],{"class":214},[208,322,259],{"class":258},[208,324,227],{"class":214},[208,326,230],{"class":214},[208,328,266],{"class":214},[208,330,331],{"class":269},"Admin Password",[208,333,227],{"class":214},[208,335,275],{"class":214},[208,337,339,341,343,345,347,349,352],{"class":210,"line":338},9,[208,340,255],{"class":214},[208,342,283],{"class":258},[208,344,227],{"class":214},[208,346,230],{"class":214},[208,348,266],{"class":214},[208,350,351],{"class":269},"Password for the initial admin account.",[208,353,295],{"class":214},[208,355,357],{"class":210,"line":356},10,[208,358,359],{"class":214},"    }\n",[208,361,363],{"class":210,"line":362},11,[208,364,365],{"class":214},"  },\n",[208,367,369,371,373,375,377],{"class":210,"line":368},12,[208,370,221],{"class":214},[208,372,198],{"class":224},[208,374,227],{"class":214},[208,376,230],{"class":214},[208,378,233],{"class":214},[208,380,382,384,387,389,391],{"class":210,"line":381},13,[208,383,239],{"class":214},[208,385,386],{"class":242},"app",[208,388,227],{"class":214},[208,390,230],{"class":214},[208,392,233],{"class":214},[208,394,396,398,401,403,405],{"class":210,"line":395},14,[208,397,255],{"class":214},[208,399,400],{"class":258},"environment",[208,402,227],{"class":214},[208,404,230],{"class":214},[208,406,233],{"class":214},[208,408,410,413,417,419,421],{"class":210,"line":409},15,[208,411,412],{"class":214},"        \"",[208,414,416],{"class":415},"swJcz","POSTGRES_HOST",[208,418,227],{"class":214},[208,420,230],{"class":214},[208,422,233],{"class":214},[208,424,426,429,432,434,436,438,441,443],{"class":210,"line":425},16,[208,427,428],{"class":214},"          \"",[208,430,283],{"class":431},"su27w",[208,433,227],{"class":214},[208,435,230],{"class":214},[208,437,266],{"class":214},[208,439,440],{"class":269},"Hostname of the PostgreSQL database server.",[208,442,227],{"class":214},[208,444,275],{"class":214},[208,446,448,450,453,455,457,459,462],{"class":210,"line":447},17,[208,449,428],{"class":214},[208,451,452],{"class":431},"group",[208,454,227],{"class":214},[208,456,230],{"class":214},[208,458,266],{"class":214},[208,460,461],{"class":269},"Database",[208,463,295],{"class":214},[208,465,467],{"class":210,"line":466},18,[208,468,469],{"class":214},"        },\n",[208,471,473,475,478,480,482],{"class":210,"line":472},19,[208,474,412],{"class":214},[208,476,477],{"class":415},"TZ",[208,479,227],{"class":214},[208,481,230],{"class":214},[208,483,233],{"class":214},[208,485,487,489,491,493,495,497,500],{"class":210,"line":486},20,[208,488,428],{"class":214},[208,490,283],{"class":431},[208,492,227],{"class":214},[208,494,230],{"class":214},[208,496,266],{"class":214},[208,498,499],{"class":269},"Timezone for the application (e.g. America\u002FNew_York).",[208,501,295],{"class":214},[208,503,505],{"class":210,"line":504},21,[208,506,507],{"class":214},"        }\n",[208,509,511],{"class":210,"line":510},22,[208,512,513],{"class":214},"      },\n",[208,515,517,519,522,524,526],{"class":210,"line":516},23,[208,518,255],{"class":214},[208,520,521],{"class":258},"healthChecks",[208,523,227],{"class":214},[208,525,230],{"class":214},[208,527,233],{"class":214},[208,529,531,533,536,538,540],{"class":210,"line":530},24,[208,532,412],{"class":214},[208,534,535],{"class":415},"web-ui",[208,537,227],{"class":214},[208,539,230],{"class":214},[208,541,233],{"class":214},[208,543,545,547,549,551,553,555,558],{"class":210,"line":544},25,[208,546,428],{"class":214},[208,548,283],{"class":431},[208,550,227],{"class":214},[208,552,230],{"class":214},[208,554,266],{"class":214},[208,556,557],{"class":269},"Web UI is accessible and responding.",[208,559,295],{"class":214},[208,561,563],{"class":210,"line":562},26,[208,564,507],{"class":214},[208,566,568],{"class":210,"line":567},27,[208,569,513],{"class":214},[208,571,573,575,578,580,582],{"class":210,"line":572},28,[208,574,255],{"class":214},[208,576,577],{"class":258},"notices",[208,579,227],{"class":214},[208,581,230],{"class":214},[208,583,233],{"class":214},[208,585,587,589,592,594,596],{"class":210,"line":586},29,[208,588,412],{"class":214},[208,590,591],{"class":415},"login-credentials",[208,593,227],{"class":214},[208,595,230],{"class":214},[208,597,233],{"class":214},[208,599,601,603,606,608,610,612,615,617],{"class":210,"line":600},30,[208,602,428],{"class":214},[208,604,605],{"class":431},"title",[208,607,227],{"class":214},[208,609,230],{"class":214},[208,611,266],{"class":214},[208,613,614],{"class":269},"Login Credentials",[208,616,227],{"class":214},[208,618,275],{"class":214},[208,620,622,624,627,629,631],{"class":210,"line":621},31,[208,623,428],{"class":214},[208,625,626],{"class":431},"elements",[208,628,227],{"class":214},[208,630,230],{"class":214},[208,632,233],{"class":214},[208,634,636,639,643,645,647,650,652,656,658,660,662,665,667],{"class":210,"line":635},32,[208,637,638],{"class":214},"            \"",[208,640,642],{"class":641},"s2Zo4","username",[208,644,227],{"class":214},[208,646,230],{"class":214},[208,648,649],{"class":214}," {",[208,651,266],{"class":214},[208,653,655],{"class":654},"sfNiH","label",[208,657,227],{"class":214},[208,659,230],{"class":214},[208,661,266],{"class":214},[208,663,664],{"class":269},"Username",[208,666,227],{"class":214},[208,668,669],{"class":214}," },\n",[208,671,673,675,678,680,682,684,686,688,690,692,694,697,699],{"class":210,"line":672},33,[208,674,638],{"class":214},[208,676,677],{"class":641},"password",[208,679,227],{"class":214},[208,681,230],{"class":214},[208,683,649],{"class":214},[208,685,266],{"class":214},[208,687,655],{"class":654},[208,689,227],{"class":214},[208,691,230],{"class":214},[208,693,266],{"class":214},[208,695,696],{"class":269},"Password",[208,698,227],{"class":214},[208,700,669],{"class":214},[208,702,704,706,709,711,713,715,717,720,722,724,726,729,731],{"class":210,"line":703},34,[208,705,638],{"class":214},[208,707,708],{"class":641},"setup-note",[208,710,227],{"class":214},[208,712,230],{"class":214},[208,714,649],{"class":214},[208,716,266],{"class":214},[208,718,719],{"class":654},"content",[208,721,227],{"class":214},[208,723,230],{"class":214},[208,725,266],{"class":214},[208,727,728],{"class":269},"Change these in **Settings > Security** after your first login.",[208,730,227],{"class":214},[208,732,733],{"class":214}," }\n",[208,735,737],{"class":210,"line":736},35,[208,738,739],{"class":214},"          }\n",[208,741,743],{"class":210,"line":742},36,[208,744,507],{"class":214},[208,746,748],{"class":210,"line":747},37,[208,749,750],{"class":214},"      }\n",[208,752,754],{"class":210,"line":753},38,[208,755,359],{"class":214},[208,757,759],{"class":210,"line":758},39,[208,760,761],{"class":214},"  }\n",[208,763,765],{"class":210,"line":764},40,[208,766,767],{"class":214},"}\n",[769,770,772],"h3",{"id":771},"config-variables","Config variables",[156,774,775],{},"Each config variable key maps to an object with:",[777,778,779,792],"table",{},[780,781,782],"thead",{},[783,784,785,789],"tr",{},[786,787,788],"th",{},"Field",[786,790,791],{},"Description",[793,794,795,805,814],"tbody",{},[783,796,797,802],{},[798,799,800],"td",{},[171,801,259],{},[798,803,804],{},"Human-readable name shown in the UI (e.g., \"Database Password\")",[783,806,807,811],{},[798,808,809],{},[171,810,283],{},[798,812,813],{},"Short explanation of what the variable controls",[783,815,816,821],{},[798,817,818],{},[171,819,820],{},"options",[798,822,823,824,827],{},"Map of option value → ",[171,825,826],{},"{ \"label\": \"...\" }"," for variables with selectable options",[769,829,831],{"id":830},"config-option-labels","Config option labels",[156,833,834,835,837],{},"Variables with selectable options need a ",[171,836,655],{}," for each option value. The keys must match the option keys in the YAML:",[176,839,841],{"className":202,"code":840,"language":204,"meta":184,"style":184},"{\n  \"config\": {\n    \"DIFFICULTY\": {\n      \"displayName\": \"Difficulty\",\n      \"description\": \"Controls how challenging the game is.\",\n      \"options\": {\n        \"peaceful\": { \"label\": \"Peaceful\" },\n        \"easy\": { \"label\": \"Easy\" },\n        \"normal\": { \"label\": \"Normal\" },\n        \"hard\": { \"label\": \"Hard\" }\n      }\n    }\n  }\n}\n",[171,842,843,847,859,872,891,910,922,952,982,1012,1042,1046,1050,1054],{"__ignoreMap":184},[208,844,845],{"class":210,"line":211},[208,846,215],{"class":214},[208,848,849,851,853,855,857],{"class":210,"line":218},[208,850,221],{"class":214},[208,852,194],{"class":224},[208,854,227],{"class":214},[208,856,230],{"class":214},[208,858,233],{"class":214},[208,860,861,863,866,868,870],{"class":210,"line":236},[208,862,239],{"class":214},[208,864,865],{"class":242},"DIFFICULTY",[208,867,227],{"class":214},[208,869,230],{"class":214},[208,871,233],{"class":214},[208,873,874,876,878,880,882,884,887,889],{"class":210,"line":252},[208,875,255],{"class":214},[208,877,259],{"class":258},[208,879,227],{"class":214},[208,881,230],{"class":214},[208,883,266],{"class":214},[208,885,886],{"class":269},"Difficulty",[208,888,227],{"class":214},[208,890,275],{"class":214},[208,892,893,895,897,899,901,903,906,908],{"class":210,"line":278},[208,894,255],{"class":214},[208,896,283],{"class":258},[208,898,227],{"class":214},[208,900,230],{"class":214},[208,902,266],{"class":214},[208,904,905],{"class":269},"Controls how challenging the game is.",[208,907,227],{"class":214},[208,909,275],{"class":214},[208,911,912,914,916,918,920],{"class":210,"line":298},[208,913,255],{"class":214},[208,915,820],{"class":258},[208,917,227],{"class":214},[208,919,230],{"class":214},[208,921,233],{"class":214},[208,923,924,926,929,931,933,935,937,939,941,943,945,948,950],{"class":210,"line":304},[208,925,412],{"class":214},[208,927,928],{"class":415},"peaceful",[208,930,227],{"class":214},[208,932,230],{"class":214},[208,934,649],{"class":214},[208,936,266],{"class":214},[208,938,655],{"class":431},[208,940,227],{"class":214},[208,942,230],{"class":214},[208,944,266],{"class":214},[208,946,947],{"class":269},"Peaceful",[208,949,227],{"class":214},[208,951,669],{"class":214},[208,953,954,956,959,961,963,965,967,969,971,973,975,978,980],{"class":210,"line":318},[208,955,412],{"class":214},[208,957,958],{"class":415},"easy",[208,960,227],{"class":214},[208,962,230],{"class":214},[208,964,649],{"class":214},[208,966,266],{"class":214},[208,968,655],{"class":431},[208,970,227],{"class":214},[208,972,230],{"class":214},[208,974,266],{"class":214},[208,976,977],{"class":269},"Easy",[208,979,227],{"class":214},[208,981,669],{"class":214},[208,983,984,986,989,991,993,995,997,999,1001,1003,1005,1008,1010],{"class":210,"line":338},[208,985,412],{"class":214},[208,987,988],{"class":415},"normal",[208,990,227],{"class":214},[208,992,230],{"class":214},[208,994,649],{"class":214},[208,996,266],{"class":214},[208,998,655],{"class":431},[208,1000,227],{"class":214},[208,1002,230],{"class":214},[208,1004,266],{"class":214},[208,1006,1007],{"class":269},"Normal",[208,1009,227],{"class":214},[208,1011,669],{"class":214},[208,1013,1014,1016,1019,1021,1023,1025,1027,1029,1031,1033,1035,1038,1040],{"class":210,"line":356},[208,1015,412],{"class":214},[208,1017,1018],{"class":415},"hard",[208,1020,227],{"class":214},[208,1022,230],{"class":214},[208,1024,649],{"class":214},[208,1026,266],{"class":214},[208,1028,655],{"class":431},[208,1030,227],{"class":214},[208,1032,230],{"class":214},[208,1034,266],{"class":214},[208,1036,1037],{"class":269},"Hard",[208,1039,227],{"class":214},[208,1041,733],{"class":214},[208,1043,1044],{"class":210,"line":362},[208,1045,750],{"class":214},[208,1047,1048],{"class":210,"line":368},[208,1049,359],{"class":214},[208,1051,1052],{"class":210,"line":381},[208,1053,761],{"class":214},[208,1055,1056],{"class":210,"line":395},[208,1057,767],{"class":214},[156,1059,1060,1061,1064,1065,230],{},"Boolean config variables must have exactly two option labels, keyed ",[171,1062,1063],{},"\"true\""," and ",[171,1066,1067],{},"\"false\"",[176,1069,1071],{"className":202,"code":1070,"language":204,"meta":184,"style":184},"{\n  \"config\": {\n    \"PVP\": {\n      \"displayName\": \"PvP\",\n      \"description\": \"Allow players to deal damage to each other.\",\n      \"options\": {\n        \"true\": { \"label\": \"On\" },\n        \"false\": { \"label\": \"Off\" }\n      }\n    }\n  }\n}\n",[171,1072,1073,1077,1089,1102,1121,1140,1152,1182,1212,1216,1220,1224],{"__ignoreMap":184},[208,1074,1075],{"class":210,"line":211},[208,1076,215],{"class":214},[208,1078,1079,1081,1083,1085,1087],{"class":210,"line":218},[208,1080,221],{"class":214},[208,1082,194],{"class":224},[208,1084,227],{"class":214},[208,1086,230],{"class":214},[208,1088,233],{"class":214},[208,1090,1091,1093,1096,1098,1100],{"class":210,"line":236},[208,1092,239],{"class":214},[208,1094,1095],{"class":242},"PVP",[208,1097,227],{"class":214},[208,1099,230],{"class":214},[208,1101,233],{"class":214},[208,1103,1104,1106,1108,1110,1112,1114,1117,1119],{"class":210,"line":252},[208,1105,255],{"class":214},[208,1107,259],{"class":258},[208,1109,227],{"class":214},[208,1111,230],{"class":214},[208,1113,266],{"class":214},[208,1115,1116],{"class":269},"PvP",[208,1118,227],{"class":214},[208,1120,275],{"class":214},[208,1122,1123,1125,1127,1129,1131,1133,1136,1138],{"class":210,"line":278},[208,1124,255],{"class":214},[208,1126,283],{"class":258},[208,1128,227],{"class":214},[208,1130,230],{"class":214},[208,1132,266],{"class":214},[208,1134,1135],{"class":269},"Allow players to deal damage to each other.",[208,1137,227],{"class":214},[208,1139,275],{"class":214},[208,1141,1142,1144,1146,1148,1150],{"class":210,"line":298},[208,1143,255],{"class":214},[208,1145,820],{"class":258},[208,1147,227],{"class":214},[208,1149,230],{"class":214},[208,1151,233],{"class":214},[208,1153,1154,1156,1159,1161,1163,1165,1167,1169,1171,1173,1175,1178,1180],{"class":210,"line":304},[208,1155,412],{"class":214},[208,1157,1158],{"class":415},"true",[208,1160,227],{"class":214},[208,1162,230],{"class":214},[208,1164,649],{"class":214},[208,1166,266],{"class":214},[208,1168,655],{"class":431},[208,1170,227],{"class":214},[208,1172,230],{"class":214},[208,1174,266],{"class":214},[208,1176,1177],{"class":269},"On",[208,1179,227],{"class":214},[208,1181,669],{"class":214},[208,1183,1184,1186,1189,1191,1193,1195,1197,1199,1201,1203,1205,1208,1210],{"class":210,"line":318},[208,1185,412],{"class":214},[208,1187,1188],{"class":415},"false",[208,1190,227],{"class":214},[208,1192,230],{"class":214},[208,1194,649],{"class":214},[208,1196,266],{"class":214},[208,1198,655],{"class":431},[208,1200,227],{"class":214},[208,1202,230],{"class":214},[208,1204,266],{"class":214},[208,1206,1207],{"class":269},"Off",[208,1209,227],{"class":214},[208,1211,733],{"class":214},[208,1213,1214],{"class":210,"line":338},[208,1215,750],{"class":214},[208,1217,1218],{"class":210,"line":356},[208,1219,359],{"class":214},[208,1221,1222],{"class":210,"line":362},[208,1223,761],{"class":214},[208,1225,1226],{"class":210,"line":368},[208,1227,767],{"class":214},[769,1229,1230],{"id":198},"Services",[156,1232,1233,1234,1236,1237,1239,1240,1242],{},"Each service key maps to an object with optional ",[171,1235,400],{},", ",[171,1238,521],{},", and ",[171,1241,577],{}," sections.",[156,1244,1245],{},[1246,1247,1248],"strong",{},"Environment variables:",[777,1250,1251,1259],{},[780,1252,1253],{},[783,1254,1255,1257],{},[786,1256,788],{},[786,1258,791],{},[793,1260,1261,1270],{},[783,1262,1263,1267],{},[798,1264,1265],{},[171,1266,283],{},[798,1268,1269],{},"Explanation of what the variable controls",[783,1271,1272,1276],{},[798,1273,1274],{},[171,1275,452],{},[798,1277,1278],{},"Display group for organizing variables into sections (e.g., \"Database\", \"OCR\")",[156,1280,1281,1284,1285,1288],{},[1246,1282,1283],{},"Health checks"," — keyed by the health check ",[171,1286,1287],{},"id"," from the YAML:",[777,1290,1291,1299],{},[780,1292,1293],{},[783,1294,1295,1297],{},[786,1296,788],{},[786,1298,791],{},[793,1300,1301],{},[783,1302,1303,1307],{},[798,1304,1305],{},[171,1306,283],{},[798,1308,1309],{},"Explanation of what the health check verifies",[156,1311,1312,1315,1316,1288],{},[1246,1313,1314],{},"Notices"," — keyed by the notice ",[171,1317,1287],{},[777,1319,1320,1328],{},[780,1321,1322],{},[783,1323,1324,1326],{},[786,1325,788],{},[786,1327,791],{},[793,1329,1330,1339],{},[783,1331,1332,1336],{},[798,1333,1334],{},[171,1335,605],{},[798,1337,1338],{},"Heading displayed in the notice banner",[783,1340,1341,1345],{},[798,1342,1343],{},[171,1344,626],{},[798,1346,1347,1348,1350],{},"Map of element ",[171,1349,1287],{}," → strings",[156,1352,1353,1354,1356,1357,1064,1360,1363,1364,1366,1367,1369],{},"Notice elements use ",[171,1355,655],{}," for ",[171,1358,1359],{},"field",[171,1361,1362],{},"sourceField"," types, and ",[171,1365,719],{}," (Markdown) for ",[171,1368,181],{}," types.",[163,1371,1373],{"id":1372},"what-lives-where","What Lives Where",[777,1375,1376,1390],{},[780,1377,1378],{},[783,1379,1380,1383,1387],{},[786,1381,1382],{},"Data",[786,1384,1386],{"align":1385},"center","YAML",[786,1388,1389],{"align":1385},"JSON",[793,1391,1392,1420,1432,1443,1455,1467,1485,1495,1509,1519,1536],{},[783,1393,1394,1414,1417],{},[798,1395,1396,1397,1236,1400,1236,1403,1236,1406,1236,1409,1236,1412],{},"Config variable ",[171,1398,1399],{},"source",[171,1401,1402],{},"length",[171,1404,1405],{},"value",[171,1407,1408],{},"inputType",[171,1410,1411],{},"weight",[171,1413,820],{},[798,1415,1416],{"align":1385},"yes",[798,1418,1419],{"align":1385},"—",[783,1421,1422,1428,1430],{},[798,1423,1396,1424,1236,1426],{},[171,1425,259],{},[171,1427,283],{},[798,1429,1419],{"align":1385},[798,1431,1416],{"align":1385},[783,1433,1434,1439,1441],{},[798,1435,1436,1437],{},"Config option ",[171,1438,655],{},[798,1440,1419],{"align":1385},[798,1442,1416],{"align":1385},[783,1444,1445,1451,1453],{},[798,1446,1447,1448],{},"Env variable ",[171,1449,1450],{},"format",[798,1452,1416],{"align":1385},[798,1454,1419],{"align":1385},[783,1456,1457,1463,1465],{},[798,1458,1447,1459,1236,1461],{},[171,1460,283],{},[171,1462,452],{},[798,1464,1419],{"align":1385},[798,1466,1416],{"align":1385},[783,1468,1469,1481,1483],{},[798,1470,1471,1472,1236,1474,1236,1477,1480],{},"Health check ",[171,1473,1287],{},[171,1475,1476],{},"type",[171,1478,1479],{},"path",", timing",[798,1482,1416],{"align":1385},[798,1484,1419],{"align":1385},[783,1486,1487,1491,1493],{},[798,1488,1471,1489],{},[171,1490,283],{},[798,1492,1419],{"align":1385},[798,1494,1416],{"align":1385},[783,1496,1497,1505,1507],{},[798,1498,1499,1500,1236,1502],{},"Notice ",[171,1501,1287],{},[171,1503,1504],{},"style",[798,1506,1416],{"align":1385},[798,1508,1419],{"align":1385},[783,1510,1511,1515,1517],{},[798,1512,1499,1513],{},[171,1514,605],{},[798,1516,1419],{"align":1385},[798,1518,1416],{"align":1385},[783,1520,1521,1532,1534],{},[798,1522,1523,1524,1236,1526,1236,1528,1236,1530],{},"Notice element ",[171,1525,1287],{},[171,1527,1476],{},[171,1529,1405],{},[171,1531,1399],{},[798,1533,1416],{"align":1385},[798,1535,1419],{"align":1385},[783,1537,1538,1546,1548],{},[798,1539,1523,1540,1542,1543,1545],{},[171,1541,719],{}," (text), ",[171,1544,655],{}," (field\u002FsourceField)",[798,1547,1419],{"align":1385},[798,1549,1416],{"align":1385},[163,1551,97],{"id":1552},"validation",[156,1554,1555,1558],{},[171,1556,1557],{},"lawn template validate"," checks localization consistency. Every YAML structure must have a corresponding JSON entry, and every JSON entry must match a YAML structure. The validator catches:",[1560,1561,1562,1572,1577,1582,1593,1596],"ul",{},[1563,1564,1565,1566,1568,1569,1571],"li",{},"Missing ",[171,1567,259],{}," or ",[171,1570,283],{}," for config variables",[1563,1573,1565,1574,1576],{},[171,1575,655],{}," for config options",[1563,1578,1565,1579,1581],{},[171,1580,283],{}," for environment variables and health checks",[1563,1583,1565,1584,1586,1587,1589,1590,1592],{},[171,1585,605],{}," for notices and missing ",[171,1588,655],{},"\u002F",[171,1591,719],{}," for notice elements",[1563,1594,1595],{},"Dangling JSON keys that don't match any YAML structure",[1563,1597,1598],{},"Boolean config variables without exactly 2 option labels",[1504,1600,1601],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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);}",{"title":184,"searchDepth":218,"depth":218,"links":1603},[1604,1605,1610,1611],{"id":165,"depth":218,"text":166},{"id":187,"depth":218,"text":188,"children":1606},[1607,1608,1609],{"id":771,"depth":236,"text":772},{"id":830,"depth":236,"text":831},{"id":198,"depth":236,"text":1230},{"id":1372,"depth":218,"text":1373},{"id":1552,"depth":218,"text":97},"User-facing strings for config variables, environment metadata, health checks, and notices.","md",null,{},{"icon":73},{"title":70,"description":1612},{"loc":71},"Gd2S84ehEaGYkUdsc-yJhwl5gLMTYhOaXGRPW-geOsY",[1614,1614],1775508104762]