[{"data":1,"prerenderedAt":796},["ShallowReactive",2],{"navigation_docs":3,"-docs-guide-scaffold":145,"-docs-guide-scaffold-surround":791},[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":23,"body":147,"description":784,"extension":785,"links":786,"meta":787,"navigation":788,"path":24,"seo":789,"stem":25,"__hash__":790},"docs\u002Fdocs\u002F4.guide\u002F1.scaffold.md",{"type":148,"value":149,"toc":776},"minimark",[150,155,184,202,207,211,217,281,284,298,304,318,322,335,395,398,492,496,499,519,522,557,569,573,584,607,611,618,703,761,772],[151,152,154],"h2",{"id":153},"quick-example","Quick example",[156,157,162],"pre",{"className":158,"code":159,"language":160,"meta":161,"style":161},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","spin new myapp https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git\n","sh","",[163,164,165],"code",{"__ignoreMap":161},[166,167,170,174,178,181],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"sBMFI","spin",[166,175,177],{"class":176},"sfazB"," new",[166,179,180],{"class":176}," myapp",[166,182,183],{"class":176}," https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git\n",[185,186,187,189,190,193,194,197,198,201],"p",{},[163,188,173],{}," opens a two-step interactive form: params first, then hook review with Run \u002F Skip \u002F Cancel. It renders the ",[163,191,192],{},"_base\u002F"," tree into ",[163,195,196],{},".\u002Fmyapp"," and runs ",[163,199,200],{},"[[post]]"," steps.",[203,204],"img",{"alt":205,"src":206},"A recorded terminal demo of scaffolding a project from a git URL.","\u002Fdemos\u002Fscaffold.gif",[151,208,210],{"id":209},"template-specs","Template specs",[185,212,213,216],{},[163,214,215],{},"--template"," accepts any of these:",[218,219,220,233],"table",{},[221,222,223],"thead",{},[224,225,226,230],"tr",{},[227,228,229],"th",{},"Spec",[227,231,232],{},"Example",[234,235,236,247,261,271],"tbody",{},[224,237,238,242],{},[239,240,241],"td",{},"Git URL",[239,243,244],{},[163,245,246],{},"https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git",[224,248,249,252],{},[239,250,251],{},"Local path",[239,253,254,257,258],{},[163,255,256],{},"~\u002Fcode\u002Ftemplates\u002Fgo-cli"," or ",[163,259,260],{},".\u002Fgo-cli",[224,262,263,266],{},[239,264,265],{},"Pinned name",[239,267,268],{},[163,269,270],{},"go-cli-template",[224,272,273,276],{},[239,274,275],{},"Registry shorthand",[239,277,278],{},[163,279,280],{},"official\u002Fgo-cli",[185,282,283],{},"You can also pass the template positionally:",[156,285,286],{"className":158,"code":159,"language":160,"meta":161,"style":161},[163,287,288],{"__ignoreMap":161},[166,289,290,292,294,296],{"class":168,"line":169},[166,291,173],{"class":172},[166,293,177],{"class":176},[166,295,180],{"class":176},[166,297,183],{"class":176},[185,299,300,301,303],{},"If you pass a single positional argument that looks like a template spec, ",[163,302,173],{}," treats it as the template and prompts for the project name:",[156,305,307],{"className":158,"code":306,"language":160,"meta":161,"style":161},"spin new ~\u002Fcode\u002Ftemplates\u002Fgo-cli\n",[163,308,309],{"__ignoreMap":161},[166,310,311,313,315],{"class":168,"line":169},[166,312,173],{"class":172},[166,314,177],{"class":176},[166,316,317],{"class":176}," ~\u002Fcode\u002Ftemplates\u002Fgo-cli\n",[151,319,321],{"id":320},"params","Params",[185,323,324,325,327,328,330,331,334],{},"Templates declare params in ",[163,326,78],{},". By default ",[163,329,110],{}," opens an interactive form. In scripts or CI, pass every param with ",[163,332,333],{},"--param",":",[156,336,338],{"className":158,"code":337,"language":160,"meta":161,"style":161},"spin new myapp --template go-cli \\\n  --param port=8080 \\\n  --param verbose=true \\\n  --param features=auth,db\n",[163,339,340,358,373,387],{"__ignoreMap":161},[166,341,342,344,346,348,351,354],{"class":168,"line":169},[166,343,173],{"class":172},[166,345,177],{"class":176},[166,347,180],{"class":176},[166,349,350],{"class":176}," --template",[166,352,353],{"class":176}," go-cli",[166,355,357],{"class":356},"sTEyZ"," \\\n",[166,359,361,364,367,371],{"class":168,"line":360},2,[166,362,363],{"class":176},"  --param",[166,365,366],{"class":176}," port=",[166,368,370],{"class":369},"sbssI","8080",[166,372,357],{"class":356},[166,374,376,378,381,385],{"class":168,"line":375},3,[166,377,363],{"class":176},[166,379,380],{"class":176}," verbose=",[166,382,384],{"class":383},"sMK4o","true",[166,386,357],{"class":356},[166,388,390,392],{"class":168,"line":389},4,[166,391,363],{"class":176},[166,393,394],{"class":176}," features=auth,db\n",[185,396,397],{},"Type coercion:",[218,399,400,410],{},[221,401,402],{},[224,403,404,407],{},[227,405,406],{},"Param type",[227,408,409],{},"CLI format",[234,411,412,422,432,442,452,462,472,482],{},[224,413,414,417],{},[239,415,416],{},"text",[239,418,419],{},[163,420,421],{},"--param name=myapp",[224,423,424,427],{},[239,425,426],{},"textarea",[239,428,429],{},[163,430,431],{},"--param description=\"A short description\"",[224,433,434,437],{},[239,435,436],{},"number",[239,438,439],{},[163,440,441],{},"--param port=8080",[224,443,444,447],{},[239,445,446],{},"select",[239,448,449],{},[163,450,451],{},"--param license=MIT",[224,453,454,457],{},[239,455,456],{},"multiselect",[239,458,459],{},[163,460,461],{},"--param features=auth,db",[224,463,464,467],{},[239,465,466],{},"bool",[239,468,469],{},[163,470,471],{},"--param private=true",[224,473,474,477],{},[239,475,476],{},"path",[239,478,479],{},[163,480,481],{},"--param output_dir=\u002Ftmp\u002Fout",[224,483,484,487],{},[239,485,486],{},"secret",[239,488,489],{},[163,490,491],{},"--param api_key=secret",[151,493,495],{"id":494},"preview-modes","Preview modes",[185,497,498],{},"Print the resolved params without writing files:",[156,500,502],{"className":158,"code":501,"language":160,"meta":161,"style":161},"spin new myapp --template go-cli --print-params\n",[163,503,504],{"__ignoreMap":161},[166,505,506,508,510,512,514,516],{"class":168,"line":169},[166,507,173],{"class":172},[166,509,177],{"class":176},[166,511,180],{"class":176},[166,513,350],{"class":176},[166,515,353],{"class":176},[166,517,518],{"class":176}," --print-params\n",[185,520,521],{},"List the files that would be written:",[156,523,525],{"className":158,"code":524,"language":160,"meta":161,"style":161},"spin new myapp --template go-cli --print-hooks\nspin new myapp --template go-cli --dry-run\n",[163,526,527,542],{"__ignoreMap":161},[166,528,529,531,533,535,537,539],{"class":168,"line":169},[166,530,173],{"class":172},[166,532,177],{"class":176},[166,534,180],{"class":176},[166,536,350],{"class":176},[166,538,353],{"class":176},[166,540,541],{"class":176}," --print-hooks\n",[166,543,544,546,548,550,552,554],{"class":168,"line":360},[166,545,173],{"class":172},[166,547,177],{"class":176},[166,549,180],{"class":176},[166,551,350],{"class":176},[166,553,353],{"class":176},[166,555,556],{"class":176}," --dry-run\n",[185,558,559,562,563,566,567,201],{},[163,560,561],{},"--print-hooks"," shows the hooks without running them. ",[163,564,565],{},"--dry-run"," renders to a temp\ndirectory and lists the files without writing. Both imply non-interactive and do not\nrun ",[163,568,200],{},[151,570,572],{"id":571},"destination","Destination",[185,574,575,576,579,580,583],{},"By default the project is written to ",[163,577,578],{},".\u002F\u003Cname>",". Use ",[163,581,582],{},"--dest"," to change the directory:",[156,585,587],{"className":158,"code":586,"language":160,"meta":161,"style":161},"spin new myapp --template go-cli --dest ~\u002Fprojects\u002Fmyapp\n",[163,588,589],{"__ignoreMap":161},[166,590,591,593,595,597,599,601,604],{"class":168,"line":169},[166,592,173],{"class":172},[166,594,177],{"class":176},[166,596,180],{"class":176},[166,598,350],{"class":176},[166,600,353],{"class":176},[166,602,603],{"class":176}," --dest",[166,605,606],{"class":176}," ~\u002Fprojects\u002Fmyapp\n",[151,608,610],{"id":609},"cicd","CI\u002FCD",[185,612,613,614,617],{},"In CI, pass every param and use ",[163,615,616],{},"--yes"," to skip prompts. Redirect stdin so spin detects non-interactive mode:",[156,619,623],{"className":620,"code":621,"language":622,"meta":161,"style":161},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# GitHub Actions\n- name: Scaffold project\n  run: |\n    curl -sSfL https:\u002F\u002Fspincli.pages.dev\u002Finstall.sh | sh\n    spin new myapp --template official\u002Fgo-cli \\\n      --param project_name=myapp \\\n      --param license=MIT \\\n      --param private=false \\\n      --yes \\\n      --dest .\u002Foutput \\\n      \u003C \u002Fdev\u002Fnull\n","yaml",[163,624,625,631,645,656,661,667,673,679,685,691,697],{"__ignoreMap":161},[166,626,627],{"class":168,"line":169},[166,628,630],{"class":629},"sHwdD","# GitHub Actions\n",[166,632,633,636,640,642],{"class":168,"line":360},[166,634,635],{"class":383},"-",[166,637,639],{"class":638},"swJcz"," name",[166,641,334],{"class":383},[166,643,644],{"class":176}," Scaffold project\n",[166,646,647,650,652],{"class":168,"line":375},[166,648,649],{"class":638},"  run",[166,651,334],{"class":383},[166,653,655],{"class":654},"s7zQu"," |\n",[166,657,658],{"class":168,"line":389},[166,659,660],{"class":176},"    curl -sSfL https:\u002F\u002Fspincli.pages.dev\u002Finstall.sh | sh\n",[166,662,664],{"class":168,"line":663},5,[166,665,666],{"class":176},"    spin new myapp --template official\u002Fgo-cli \\\n",[166,668,670],{"class":168,"line":669},6,[166,671,672],{"class":176},"      --param project_name=myapp \\\n",[166,674,676],{"class":168,"line":675},7,[166,677,678],{"class":176},"      --param license=MIT \\\n",[166,680,682],{"class":168,"line":681},8,[166,683,684],{"class":176},"      --param private=false \\\n",[166,686,688],{"class":168,"line":687},9,[166,689,690],{"class":176},"      --yes \\\n",[166,692,694],{"class":168,"line":693},10,[166,695,696],{"class":176},"      --dest .\u002Foutput \\\n",[166,698,700],{"class":168,"line":699},11,[166,701,702],{"class":176},"      \u003C \u002Fdev\u002Fnull\n",[156,704,706],{"className":158,"code":705,"language":160,"meta":161,"style":161},"# Generic shell\nspin new myapp --template official\u002Fgo-cli \\\n  --param project_name=myapp \\\n  --param license=MIT \\\n  --yes \\\n  \u003C \u002Fdev\u002Fnull\n",[163,707,708,713,728,737,746,753],{"__ignoreMap":161},[166,709,710],{"class":168,"line":169},[166,711,712],{"class":629},"# Generic shell\n",[166,714,715,717,719,721,723,726],{"class":168,"line":360},[166,716,173],{"class":172},[166,718,177],{"class":176},[166,720,180],{"class":176},[166,722,350],{"class":176},[166,724,725],{"class":176}," official\u002Fgo-cli",[166,727,357],{"class":356},[166,729,730,732,735],{"class":168,"line":375},[166,731,363],{"class":176},[166,733,734],{"class":176}," project_name=myapp",[166,736,357],{"class":356},[166,738,739,741,744],{"class":168,"line":389},[166,740,363],{"class":176},[166,742,743],{"class":176}," license=MIT",[166,745,357],{"class":356},[166,747,748,751],{"class":168,"line":663},[166,749,750],{"class":176},"  --yes",[166,752,357],{"class":356},[166,754,755,758],{"class":168,"line":669},[166,756,757],{"class":383},"  \u003C",[166,759,760],{"class":176}," \u002Fdev\u002Fnull\n",[185,762,763,764,767,768,771],{},"Add ",[163,765,766],{},"--verbose"," if you want hook output in CI logs. Add ",[163,769,770],{},"--print-params"," first to preview what will be resolved before committing to a run.",[773,774,775],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":161,"searchDepth":360,"depth":360,"links":777},[778,779,780,781,782,783],{"id":153,"depth":360,"text":154},{"id":209,"depth":360,"text":210},{"id":320,"depth":360,"text":321},{"id":494,"depth":360,"text":495},{"id":571,"depth":360,"text":572},{"id":609,"depth":360,"text":610},"Create a new project from a template.","md",null,{},true,{"title":23,"description":784},"mbLDbUV1PixxlZY8-fEV69pCaRgT36eVef1FiTJT1PM",[792,794],{"title":13,"path":14,"stem":15,"description":793,"children":-1},"Spin respects a small set of environment variables for paths, git behaviour, and CI detection.",{"title":27,"path":28,"stem":29,"description":795,"children":-1},"Pin a template locally so spin new can use it by short name and work offline.",1787755180240]