[{"data":1,"prerenderedAt":1168},["ShallowReactive",2],{"navigation_docs":3,"-docs-templates-params":145,"-docs-templates-params-surround":1163},[4,8,12,16,51,81,103],{"title":5,"path":6,"stem":7},"Introduction","\u002Fdocs\u002Fintroduction","docs\u002F1.introduction",{"title":9,"path":10,"stem":11},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F2.getting-started",{"title":13,"path":14,"stem":15},"Environment variables","\u002Fdocs\u002Fenvironment-variables","docs\u002F3.environment-variables",{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":50},"Guide","i-lucide-book-open","\u002Fdocs\u002Fguide","docs\u002F4.guide",[22,26,30,34,38,42,46],{"title":23,"path":24,"stem":25},"Scaffold a project","\u002Fdocs\u002Fguide\u002Fscaffold","docs\u002F4.guide\u002F1.scaffold",{"title":27,"path":28,"stem":29},"Pin and manage templates","\u002Fdocs\u002Fguide\u002Fpin","docs\u002F4.guide\u002F2.pin",{"title":31,"path":32,"stem":33},"Update pinned templates","\u002Fdocs\u002Fguide\u002Fupdating","docs\u002F4.guide\u002F3.updating",{"title":35,"path":36,"stem":37},"Find templates","\u002Fdocs\u002Fguide\u002Fsearch","docs\u002F4.guide\u002F4.search",{"title":39,"path":40,"stem":41},"Manage registries","\u002Fdocs\u002Fguide\u002Fregistry","docs\u002F4.guide\u002F5.registry",{"title":43,"path":44,"stem":45},"Troubleshooting","\u002Fdocs\u002Fguide\u002Ftroubleshooting","docs\u002F4.guide\u002F6.troubleshooting",{"title":47,"path":48,"stem":49},"Build your first template","\u002Fdocs\u002Fguide\u002Fcreate-template","docs\u002F4.guide\u002F7.create-template",false,{"title":52,"icon":53,"path":54,"stem":55,"children":56,"page":50},"Templates","i-lucide-layout-template","\u002Fdocs\u002Ftemplates","docs\u002F5.templates",[57,61,65,69,73,77],{"title":58,"path":59,"stem":60},"Template anatomy","\u002Fdocs\u002Ftemplates\u002Fanatomy","docs\u002F5.templates\u002F1.anatomy",{"title":62,"path":63,"stem":64},"Template params","\u002Fdocs\u002Ftemplates\u002Fparams","docs\u002F5.templates\u002F2.params",{"title":66,"path":67,"stem":68},"Template rendering","\u002Fdocs\u002Ftemplates\u002Ftemplate-rendering","docs\u002F5.templates\u002F3.template-rendering",{"title":70,"path":71,"stem":72},"Hooks","\u002Fdocs\u002Ftemplates\u002Fhooks","docs\u002F5.templates\u002F4.hooks",{"title":74,"path":75,"stem":76},"Publish a template","\u002Fdocs\u002Ftemplates\u002Fpublish","docs\u002F5.templates\u002F5.publish",{"title":78,"path":79,"stem":80},"spin.toml","\u002Fdocs\u002Ftemplates\u002Fspin-toml","docs\u002F5.templates\u002F6.spin-toml",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":50},"Registries","i-lucide-database","\u002Fdocs\u002Fregistries","docs\u002F6.registries",[87,91,95,99],{"title":88,"path":89,"stem":90},"Registry anatomy","\u002Fdocs\u002Fregistries\u002Fanatomy","docs\u002F6.registries\u002F1.anatomy",{"title":92,"path":93,"stem":94},"Template metadata file","\u002Fdocs\u002Fregistries\u002Ftemplate-metadata","docs\u002F6.registries\u002F2.template-metadata",{"title":96,"path":97,"stem":98},"Run a registry","\u002Fdocs\u002Fregistries\u002Frun","docs\u002F6.registries\u002F3.run",{"title":100,"path":101,"stem":102},"registry.toml","\u002Fdocs\u002Fregistries\u002Fregistry-toml","docs\u002F6.registries\u002F4.registry-toml",{"title":104,"icon":105,"path":106,"stem":107,"children":108,"page":50},"Commands","i-lucide-terminal","\u002Fdocs\u002Fcommands","docs\u002F7.commands",[109,113,117,121,125,129,133,137,141],{"title":110,"path":111,"stem":112},"spin new","\u002Fdocs\u002Fcommands\u002Fnew","docs\u002F7.commands\u002F1.new",{"title":114,"path":115,"stem":116},"spin add","\u002Fdocs\u002Fcommands\u002Fadd","docs\u002F7.commands\u002F2.add",{"title":118,"path":119,"stem":120},"spin list","\u002Fdocs\u002Fcommands\u002Flist","docs\u002F7.commands\u002F3.list",{"title":122,"path":123,"stem":124},"spin update","\u002Fdocs\u002Fcommands\u002Fupdate","docs\u002F7.commands\u002F4.update",{"title":126,"path":127,"stem":128},"spin remove","\u002Fdocs\u002Fcommands\u002Fremove","docs\u002F7.commands\u002F5.remove",{"title":130,"path":131,"stem":132},"spin search","\u002Fdocs\u002Fcommands\u002Fsearch","docs\u002F7.commands\u002F6.search",{"title":134,"path":135,"stem":136},"spin registry","\u002Fdocs\u002Fcommands\u002Fregistry","docs\u002F7.commands\u002F7.registry",{"title":138,"path":139,"stem":140},"spin init","\u002Fdocs\u002Fcommands\u002Finit","docs\u002F7.commands\u002F8.init",{"title":142,"path":143,"stem":144},"spin version","\u002Fdocs\u002Fcommands\u002Fversion","docs\u002F7.commands\u002F9.version",{"id":146,"title":62,"body":147,"description":1157,"extension":1158,"links":1159,"meta":1160,"navigation":814,"path":63,"seo":1161,"stem":64,"__hash__":1162},"docs\u002Fdocs\u002F5.templates\u002F2.params.md",{"type":148,"value":149,"toc":1148},"minimark",[150,155,584,589,593,604,709,744,751,755,758,787,791,798,840,844,851,907,936,940,962,1075,1108,1115,1119,1144],[151,152,154],"h2",{"id":153},"param-types","Param types",[156,157,162],"pre",{"className":158,"code":159,"language":160,"meta":161,"style":161},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[params]\nproject_name = { type = \"text\", prompt = \"Project name\", default = \"myproject\" }\ndescription  = { type = \"textarea\", prompt = \"Description\" }\nport         = { type = \"number\", prompt = \"Port\", default = 8080, min = 1024, max = 65535 }\nlicense      = { type = \"license\", prompt = \"License\", default = \"MIT\" }\nfeatures     = { type = \"multiselect\", prompt = \"Features\", options = [\"auth\", \"db\", \"cache\"] }\nprivate      = { type = \"bool\", prompt = \"Private repo?\", default = false }\noutput_dir   = { type = \"path\", prompt = \"Output directory\" }\napi_key      = { type = \"secret\", prompt = \"API key\" }\n","toml","",[163,164,165,181,241,277,343,392,466,512,548],"code",{"__ignoreMap":161},[166,167,170,174,178],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"sMK4o","[",[166,175,177],{"class":176},"sBMFI","params",[166,179,180],{"class":172},"]\n",[166,182,184,188,191,194,197,199,202,206,209,212,215,217,219,222,224,226,229,231,233,236,238],{"class":168,"line":183},2,[166,185,187],{"class":186},"sTEyZ","project_name ",[166,189,190],{"class":172},"=",[166,192,193],{"class":172}," {",[166,195,196],{"class":186}," type ",[166,198,190],{"class":172},[166,200,201],{"class":172}," \"",[166,203,205],{"class":204},"sfazB","text",[166,207,208],{"class":172},"\"",[166,210,211],{"class":172},",",[166,213,214],{"class":186}," prompt ",[166,216,190],{"class":172},[166,218,201],{"class":172},[166,220,221],{"class":204},"Project name",[166,223,208],{"class":172},[166,225,211],{"class":172},[166,227,228],{"class":186}," default ",[166,230,190],{"class":172},[166,232,201],{"class":172},[166,234,235],{"class":204},"myproject",[166,237,208],{"class":172},[166,239,240],{"class":172}," }\n",[166,242,244,247,249,251,253,255,257,260,262,264,266,268,270,273,275],{"class":168,"line":243},3,[166,245,246],{"class":186},"description  ",[166,248,190],{"class":172},[166,250,193],{"class":172},[166,252,196],{"class":186},[166,254,190],{"class":172},[166,256,201],{"class":172},[166,258,259],{"class":204},"textarea",[166,261,208],{"class":172},[166,263,211],{"class":172},[166,265,214],{"class":186},[166,267,190],{"class":172},[166,269,201],{"class":172},[166,271,272],{"class":204},"Description",[166,274,208],{"class":172},[166,276,240],{"class":172},[166,278,280,283,285,287,289,291,293,296,298,300,302,304,306,309,311,313,315,317,321,323,326,328,331,333,336,338,341],{"class":168,"line":279},4,[166,281,282],{"class":186},"port         ",[166,284,190],{"class":172},[166,286,193],{"class":172},[166,288,196],{"class":186},[166,290,190],{"class":172},[166,292,201],{"class":172},[166,294,295],{"class":204},"number",[166,297,208],{"class":172},[166,299,211],{"class":172},[166,301,214],{"class":186},[166,303,190],{"class":172},[166,305,201],{"class":172},[166,307,308],{"class":204},"Port",[166,310,208],{"class":172},[166,312,211],{"class":172},[166,314,228],{"class":186},[166,316,190],{"class":172},[166,318,320],{"class":319},"sbssI"," 8080",[166,322,211],{"class":172},[166,324,325],{"class":186}," min ",[166,327,190],{"class":172},[166,329,330],{"class":319}," 1024",[166,332,211],{"class":172},[166,334,335],{"class":186}," max ",[166,337,190],{"class":172},[166,339,340],{"class":319}," 65535",[166,342,240],{"class":172},[166,344,346,349,351,353,355,357,359,362,364,366,368,370,372,375,377,379,381,383,385,388,390],{"class":168,"line":345},5,[166,347,348],{"class":186},"license      ",[166,350,190],{"class":172},[166,352,193],{"class":172},[166,354,196],{"class":186},[166,356,190],{"class":172},[166,358,201],{"class":172},[166,360,361],{"class":204},"license",[166,363,208],{"class":172},[166,365,211],{"class":172},[166,367,214],{"class":186},[166,369,190],{"class":172},[166,371,201],{"class":172},[166,373,374],{"class":204},"License",[166,376,208],{"class":172},[166,378,211],{"class":172},[166,380,228],{"class":186},[166,382,190],{"class":172},[166,384,201],{"class":172},[166,386,387],{"class":204},"MIT",[166,389,208],{"class":172},[166,391,240],{"class":172},[166,393,395,398,400,402,404,406,408,411,413,415,417,419,421,424,426,428,431,433,436,438,441,443,445,447,450,452,454,456,459,461,464],{"class":168,"line":394},6,[166,396,397],{"class":186},"features     ",[166,399,190],{"class":172},[166,401,193],{"class":172},[166,403,196],{"class":186},[166,405,190],{"class":172},[166,407,201],{"class":172},[166,409,410],{"class":204},"multiselect",[166,412,208],{"class":172},[166,414,211],{"class":172},[166,416,214],{"class":186},[166,418,190],{"class":172},[166,420,201],{"class":172},[166,422,423],{"class":204},"Features",[166,425,208],{"class":172},[166,427,211],{"class":172},[166,429,430],{"class":186}," options ",[166,432,190],{"class":172},[166,434,435],{"class":172}," [",[166,437,208],{"class":172},[166,439,440],{"class":204},"auth",[166,442,208],{"class":172},[166,444,211],{"class":172},[166,446,201],{"class":172},[166,448,449],{"class":204},"db",[166,451,208],{"class":172},[166,453,211],{"class":172},[166,455,201],{"class":172},[166,457,458],{"class":204},"cache",[166,460,208],{"class":172},[166,462,463],{"class":172},"]",[166,465,240],{"class":172},[166,467,469,472,474,476,478,480,482,485,487,489,491,493,495,498,500,502,504,506,510],{"class":168,"line":468},7,[166,470,471],{"class":186},"private      ",[166,473,190],{"class":172},[166,475,193],{"class":172},[166,477,196],{"class":186},[166,479,190],{"class":172},[166,481,201],{"class":172},[166,483,484],{"class":204},"bool",[166,486,208],{"class":172},[166,488,211],{"class":172},[166,490,214],{"class":186},[166,492,190],{"class":172},[166,494,201],{"class":172},[166,496,497],{"class":204},"Private repo?",[166,499,208],{"class":172},[166,501,211],{"class":172},[166,503,228],{"class":186},[166,505,190],{"class":172},[166,507,509],{"class":508},"sfNiH"," false",[166,511,240],{"class":172},[166,513,515,518,520,522,524,526,528,531,533,535,537,539,541,544,546],{"class":168,"line":514},8,[166,516,517],{"class":186},"output_dir   ",[166,519,190],{"class":172},[166,521,193],{"class":172},[166,523,196],{"class":186},[166,525,190],{"class":172},[166,527,201],{"class":172},[166,529,530],{"class":204},"path",[166,532,208],{"class":172},[166,534,211],{"class":172},[166,536,214],{"class":186},[166,538,190],{"class":172},[166,540,201],{"class":172},[166,542,543],{"class":204},"Output directory",[166,545,208],{"class":172},[166,547,240],{"class":172},[166,549,551,554,556,558,560,562,564,567,569,571,573,575,577,580,582],{"class":168,"line":550},9,[166,552,553],{"class":186},"api_key      ",[166,555,190],{"class":172},[166,557,193],{"class":172},[166,559,196],{"class":186},[166,561,190],{"class":172},[166,563,201],{"class":172},[166,565,566],{"class":204},"secret",[166,568,208],{"class":172},[166,570,211],{"class":172},[166,572,214],{"class":186},[166,574,190],{"class":172},[166,576,201],{"class":172},[166,578,579],{"class":204},"API key",[166,581,208],{"class":172},[166,583,240],{"class":172},[585,586],"img",{"alt":587,"src":588},"A recorded terminal demo of a template form with different param types.","\u002Fdemos\u002Fparams.gif",[151,590,592],{"id":591},"license-params","License params",[594,595,596,597,599,600,603],"p",{},"The ",[163,598,361],{}," param type is special: it offers a curated list of SPDX license identifiers plus a \"None\" option, and when a license is selected spin generates a ",[163,601,602],{},"LICENSE"," file in the user's project at render time, with the copyright year and holder substituted automatically.",[156,605,607],{"className":158,"code":606,"language":160,"meta":161,"style":161},"[params]\nlicense = { type = \"license\", prompt = \"License\", default = \"MIT\" }\ncopyright_holder = { type = \"text\", prompt = \"Copyright holder\", default = \"Acme Corp\" }\n",[163,608,609,617,662],{"__ignoreMap":161},[166,610,611,613,615],{"class":168,"line":169},[166,612,173],{"class":172},[166,614,177],{"class":176},[166,616,180],{"class":172},[166,618,619,622,624,626,628,630,632,634,636,638,640,642,644,646,648,650,652,654,656,658,660],{"class":168,"line":183},[166,620,621],{"class":186},"license ",[166,623,190],{"class":172},[166,625,193],{"class":172},[166,627,196],{"class":186},[166,629,190],{"class":172},[166,631,201],{"class":172},[166,633,361],{"class":204},[166,635,208],{"class":172},[166,637,211],{"class":172},[166,639,214],{"class":186},[166,641,190],{"class":172},[166,643,201],{"class":172},[166,645,374],{"class":204},[166,647,208],{"class":172},[166,649,211],{"class":172},[166,651,228],{"class":186},[166,653,190],{"class":172},[166,655,201],{"class":172},[166,657,387],{"class":204},[166,659,208],{"class":172},[166,661,240],{"class":172},[166,663,664,667,669,671,673,675,677,679,681,683,685,687,689,692,694,696,698,700,702,705,707],{"class":168,"line":243},[166,665,666],{"class":186},"copyright_holder ",[166,668,190],{"class":172},[166,670,193],{"class":172},[166,672,196],{"class":186},[166,674,190],{"class":172},[166,676,201],{"class":172},[166,678,205],{"class":204},[166,680,208],{"class":172},[166,682,211],{"class":172},[166,684,214],{"class":186},[166,686,190],{"class":172},[166,688,201],{"class":172},[166,690,691],{"class":204},"Copyright holder",[166,693,208],{"class":172},[166,695,211],{"class":172},[166,697,228],{"class":186},[166,699,190],{"class":172},[166,701,201],{"class":172},[166,703,704],{"class":204},"Acme Corp",[166,706,208],{"class":172},[166,708,240],{"class":172},[710,711,712,731],"ul",{},[713,714,715,717,718,723,724,727,728,730],"li",{},[163,716,361],{}," — options are auto-filled from the ",[719,720,722],"a",{"href":721},"\u002Fdocs\u002Ftemplates\u002Ftemplate-rendering#supported-licenses","supported licenses"," set. You can restrict the choice by providing your own ",[163,725,726],{},"options","; any value outside the set yields no ",[163,729,602],{}," file.",[713,732,733,736,737,739,740,743],{},[163,734,735],{},"copyright_holder"," — a plain ",[163,738,205],{}," param that populates the copyright line in the generated license. It is optional; ",[163,741,742],{},"default"," and templated defaults work like any text param. When absent, the ownership placeholder is left as-is in the license text.",[594,745,746,747,750],{},"See ",[719,748,749],{"href":67},"License generation"," for full details.",[151,752,754],{"id":753},"shorthand-form","Shorthand form",[594,756,757],{},"A param with only a default value can be written as a plain string:",[156,759,761],{"className":158,"code":760,"language":160,"meta":161,"style":161},"[params]\nproject_name = \"myproject\"   # equivalent to { type = \"text\", default = \"myproject\" }\n",[163,762,763,771],{"__ignoreMap":161},[166,764,765,767,769],{"class":168,"line":169},[166,766,173],{"class":172},[166,768,177],{"class":176},[166,770,180],{"class":172},[166,772,773,775,777,779,781,783],{"class":168,"line":183},[166,774,187],{"class":186},[166,776,190],{"class":172},[166,778,201],{"class":172},[166,780,235],{"class":204},[166,782,208],{"class":172},[166,784,786],{"class":785},"sHwdD","   # equivalent to { type = \"text\", default = \"myproject\" }\n",[151,788,790],{"id":789},"using-params-in-templates","Using params in templates",[594,792,793,794,797],{},"Inside a ",[163,795,796],{},".tmpl"," file, params are top-level fields:",[156,799,803],{"className":800,"code":801,"language":802,"meta":161,"style":161},"language-tmpl shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# {{ .project_name | title }}\n\n{{ .description }}\n\n- License: {{ .license }}\n- Port: {{ .port }}\n- Features: {{ join .features \", \" }}\n","tmpl",[163,804,805,810,816,821,825,830,835],{"__ignoreMap":161},[166,806,807],{"class":168,"line":169},[166,808,809],{},"# {{ .project_name | title }}\n",[166,811,812],{"class":168,"line":183},[166,813,815],{"emptyLinePlaceholder":814},true,"\n",[166,817,818],{"class":168,"line":243},[166,819,820],{},"{{ .description }}\n",[166,822,823],{"class":168,"line":279},[166,824,815],{"emptyLinePlaceholder":814},[166,826,827],{"class":168,"line":345},[166,828,829],{},"- License: {{ .license }}\n",[166,831,832],{"class":168,"line":394},[166,833,834],{},"- Port: {{ .port }}\n",[166,836,837],{"class":168,"line":468},[166,838,839],{},"- Features: {{ join .features \", \" }}\n",[151,841,843],{"id":842},"non-interactive-usage","Non-interactive usage",[594,845,846,847,850],{},"Users pass params as ",[163,848,849],{},"--param key=value",":",[156,852,856],{"className":853,"code":854,"language":855,"meta":161,"style":161},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","spin new myapp --template my-template \\\n  --param project_name=myapp \\\n  --param port=8080 \\\n  --param features=auth,db\n","sh",[163,857,858,878,888,900],{"__ignoreMap":161},[166,859,860,863,866,869,872,875],{"class":168,"line":169},[166,861,862],{"class":176},"spin",[166,864,865],{"class":204}," new",[166,867,868],{"class":204}," myapp",[166,870,871],{"class":204}," --template",[166,873,874],{"class":204}," my-template",[166,876,877],{"class":186}," \\\n",[166,879,880,883,886],{"class":168,"line":183},[166,881,882],{"class":204},"  --param",[166,884,885],{"class":204}," project_name=myapp",[166,887,877],{"class":186},[166,889,890,892,895,898],{"class":168,"line":243},[166,891,882],{"class":204},[166,893,894],{"class":204}," port=",[166,896,897],{"class":319},"8080",[166,899,877],{"class":186},[166,901,902,904],{"class":168,"line":279},[166,903,882],{"class":204},[166,905,906],{"class":204}," features=auth,db\n",[594,908,909,910,913,914,913,917,913,920,913,923,913,926,913,929,913,932,935],{},"Multiselect values are comma-separated. Booleans accept ",[163,911,912],{},"true",", ",[163,915,916],{},"false",[163,918,919],{},"1",[163,921,922],{},"0",[163,924,925],{},"yes",[163,927,928],{},"no",[163,930,931],{},"on",[163,933,934],{},"off",".",[151,937,939],{"id":938},"templated-prompts-and-defaults","Templated prompts and defaults",[594,941,942,945,946,948,949,951,952,913,955,913,958,961],{},[163,943,944],{},"prompt"," and ",[163,947,742],{}," accept Go templates, so they can reference other\nvalues with the same spin helpers used in ",[163,950,796],{}," files and hooks\n(",[163,953,954],{},"upper",[163,956,957],{},"snake_case",[163,959,960],{},"{{ .project_name }}",", ...):",[156,963,965],{"className":158,"code":964,"language":160,"meta":161,"style":161},"[params]\nproject_name = { type = \"text\", prompt = \"Project name\" }\nmodule       = { type = \"text\", default = \"github.com\u002Fme\u002F{{ .project_name }}\" }\ndb_name      = { type = \"text\", prompt = \"Database name for {{ .project_name }}\" }\n",[163,966,967,975,1007,1041],{"__ignoreMap":161},[166,968,969,971,973],{"class":168,"line":169},[166,970,173],{"class":172},[166,972,177],{"class":176},[166,974,180],{"class":172},[166,976,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005],{"class":168,"line":183},[166,978,187],{"class":186},[166,980,190],{"class":172},[166,982,193],{"class":172},[166,984,196],{"class":186},[166,986,190],{"class":172},[166,988,201],{"class":172},[166,990,205],{"class":204},[166,992,208],{"class":172},[166,994,211],{"class":172},[166,996,214],{"class":186},[166,998,190],{"class":172},[166,1000,201],{"class":172},[166,1002,221],{"class":204},[166,1004,208],{"class":172},[166,1006,240],{"class":172},[166,1008,1009,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1037,1039],{"class":168,"line":243},[166,1010,1011],{"class":186},"module       ",[166,1013,190],{"class":172},[166,1015,193],{"class":172},[166,1017,196],{"class":186},[166,1019,190],{"class":172},[166,1021,201],{"class":172},[166,1023,205],{"class":204},[166,1025,208],{"class":172},[166,1027,211],{"class":172},[166,1029,228],{"class":186},[166,1031,190],{"class":172},[166,1033,201],{"class":172},[166,1035,1036],{"class":204},"github.com\u002Fme\u002F{{ .project_name }}",[166,1038,208],{"class":172},[166,1040,240],{"class":172},[166,1042,1043,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1071,1073],{"class":168,"line":279},[166,1044,1045],{"class":186},"db_name      ",[166,1047,190],{"class":172},[166,1049,193],{"class":172},[166,1051,196],{"class":186},[166,1053,190],{"class":172},[166,1055,201],{"class":172},[166,1057,205],{"class":204},[166,1059,208],{"class":172},[166,1061,211],{"class":172},[166,1063,214],{"class":186},[166,1065,190],{"class":172},[166,1067,201],{"class":172},[166,1069,1070],{"class":204},"Database name for {{ .project_name }}",[166,1072,208],{"class":172},[166,1074,240],{"class":172},[594,1076,1077,1078,1082,1083,945,1086,1089,1090,1092,1093,1096,1097,1099,1100,1102,1103,1107],{},"Only values known ",[1079,1080,1081],"strong",{},"before the form runs"," are available when a prompt or\ndefault is rendered: the built-ins ",[163,1084,1085],{},"name",[163,1087,1088],{},"project_name"," (injected\nfrom the project name you pass to ",[163,1091,110],{},") and anything supplied via\n",[163,1094,1095],{},"--param",". A ",[163,1098,944],{}," or ",[163,1101,742],{}," that references another param's\n",[1104,1105,1106],"em",{},"answer"," will not reflect what the user types into the form, because that\nanswer does not exist yet when the form is built.",[594,1109,1110,1111,1114],{},"If a template string fails to parse or references an unknown value, spin\nleaves it as-is — it never aborts a scaffold over one bad string. Double\ncheck variable names: a typo like ",[163,1112,1113],{},"{{ .projet_name }}"," renders to an empty\nstring rather than erroring.",[151,1116,1118],{"id":1117},"validation","Validation",[710,1120,1121,1132],{},[713,1122,1123,1125,1126,945,1129,935],{},[163,1124,295],{}," params enforce ",[163,1127,1128],{},"min",[163,1130,1131],{},"max",[713,1133,1134,1137,1138,1140,1141,1143],{},[163,1135,1136],{},"select"," params reject values not in ",[163,1139,726],{}," (when options are provided). This applies both interactively and to ",[163,1142,1095],{}," values and templated defaults resolved outside the option list.",[1145,1146,1147],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":161,"searchDepth":183,"depth":183,"links":1149},[1150,1151,1152,1153,1154,1155,1156],{"id":153,"depth":183,"text":154},{"id":591,"depth":183,"text":592},{"id":753,"depth":183,"text":754},{"id":789,"depth":183,"text":790},{"id":842,"depth":183,"text":843},{"id":938,"depth":183,"text":939},{"id":1117,"depth":183,"text":1118},"Params are the questions a template asks the user. They are declared in spin.toml under [params].","md",null,{},{"title":62,"description":1157},"d-omkFeP3vqlCOxfXYWhddeiLkgx8dGLmwqJWcWoQLg",[1164,1166],{"title":58,"path":59,"stem":60,"description":1165,"children":-1},"A template is a directory with a spin.toml manifest and a base\u002F tree. spin loads it, collects params, renders the tree, runs pre-hooks, writes the files, run...",{"title":66,"path":67,"stem":68,"description":1167,"children":-1},"How spin processes _base\u002F files through Go text\u002Ftemplate with built-in helpers, excludes, and path safety.",1787755180240]