[{"data":1,"prerenderedAt":468},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started":145,"-docs-getting-started-surround":463},[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":9,"body":147,"description":456,"extension":457,"links":458,"meta":459,"navigation":460,"path":10,"seo":461,"stem":11,"__hash__":462},"docs\u002Fdocs\u002F2.getting-started.md",{"type":148,"value":149,"toc":448},"minimark",[150,155,188,192,208,223,227,245,258,265,282,287,291,310,313,317,345,361,365,369,421,431,435,438,444],[151,152,154],"h2",{"id":153},"_1-install-spin","1. Install spin",[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","curl -sSfL https:\u002F\u002Fspincli.pages.dev\u002Finstall.sh | sh\n","sh","",[163,164,165],"code",{"__ignoreMap":161},[166,167,170,174,178,181,185],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"sBMFI","curl",[166,175,177],{"class":176},"sfazB"," -sSfL",[166,179,180],{"class":176}," https:\u002F\u002Fspincli.pages.dev\u002Finstall.sh",[166,182,184],{"class":183},"sMK4o"," |",[166,186,187],{"class":172}," sh\n",[189,190,191],"p",{},"or with Go",[156,193,195],{"className":158,"code":194,"language":160,"meta":161,"style":161},"go install github.com\u002Fsam0uly\u002Fspin@latest\n",[163,196,197],{"__ignoreMap":161},[166,198,199,202,205],{"class":168,"line":169},[166,200,201],{"class":172},"go",[166,203,204],{"class":176}," install",[166,206,207],{"class":176}," github.com\u002Fsam0uly\u002Fspin@latest\n",[189,209,210,211,214,215,218,219,222],{},"Make sure ",[163,212,213],{},"git"," is on your ",[163,216,217],{},"$PATH",". ",[163,220,221],{},"spin"," uses it to clone git URLs and registries.",[151,224,226],{"id":225},"_2-scaffold-from-a-git-url","2. Scaffold from a git URL",[156,228,230],{"className":158,"code":229,"language":160,"meta":161,"style":161},"spin new myapp https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git\n",[163,231,232],{"__ignoreMap":161},[166,233,234,236,239,242],{"class":168,"line":169},[166,235,221],{"class":172},[166,237,238],{"class":176}," new",[166,240,241],{"class":176}," myapp",[166,243,244],{"class":176}," https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git\n",[189,246,247,249,250,253,254,257],{},[163,248,221],{}," clones the template, opens an interactive two-step form, renders the project into ",[163,251,252],{},".\u002Fmyapp",", and runs any ",[163,255,256],{},"[[post]]"," steps.",[189,259,260,264],{},[261,262,263],"strong",{},"Step 1: params."," An interactive form asks for the template's params (project name, license, features, etc.). Use arrow keys to navigate, enter to confirm.",[189,266,267,270,271,274,275,277,278,281],{},[261,268,269],{},"Step 2: hooks review."," A scrollable list shows every ",[163,272,273],{},"[[pre]]"," and ",[163,276,256],{}," hook the template will run. Press ",[163,279,280],{},"R"," to open a Run \u002F Skip \u002F Cancel modal — you review BEFORE any shell commands execute. No blind scripts.",[283,284],"img",{"alt":285,"src":286},"A recorded terminal demo of scaffolding a project from a git URL.","\u002Fdemos\u002Fscaffold.gif",[151,288,290],{"id":289},"_3-or-scaffold-from-a-local-template","3. Or scaffold from a local template",[156,292,294],{"className":158,"code":293,"language":160,"meta":161,"style":161},"spin new myapp --template ~\u002Fcode\u002Ftemplates\u002Fgo-cli\n",[163,295,296],{"__ignoreMap":161},[166,297,298,300,302,304,307],{"class":168,"line":169},[166,299,221],{"class":172},[166,301,238],{"class":176},[166,303,241],{"class":176},[166,305,306],{"class":176}," --template",[166,308,309],{"class":176}," ~\u002Fcode\u002Ftemplates\u002Fgo-cli\n",[189,311,312],{},"Local paths are read directly; no clone happens.",[151,314,316],{"id":315},"_4-pin-a-template-for-offline-use","4. Pin a template for offline use",[156,318,320],{"className":158,"code":319,"language":160,"meta":161,"style":161},"spin add https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git\nspin new myapp --template go-cli-template\n",[163,321,322,331],{"__ignoreMap":161},[166,323,324,326,329],{"class":168,"line":169},[166,325,221],{"class":172},[166,327,328],{"class":176}," add",[166,330,244],{"class":176},[166,332,334,336,338,340,342],{"class":168,"line":333},2,[166,335,221],{"class":172},[166,337,238],{"class":176},[166,339,241],{"class":176},[166,341,306],{"class":176},[166,343,344],{"class":176}," go-cli-template\n",[189,346,347,349,350,353,354,357,358,360],{},[163,348,114],{}," clones the template into ",[163,351,352],{},"~\u002F.config\u002Fspin\u002Ftemplates\u002F"," and records it in ",[163,355,356],{},"pinned.json",". After that, ",[163,359,110],{}," can use the short name without network access.",[283,362],{"alt":363,"src":364},"A recorded terminal demo of pinning a template and using it offline.","\u002Fdemos\u002Fpin.gif",[151,366,368],{"id":367},"_5-preview-before-you-write","5. Preview before you write",[156,370,372],{"className":158,"code":371,"language":160,"meta":161,"style":161},"spin new myapp --template go-cli --print-hooks\nspin new myapp --template go-cli --print-params\nspin new myapp --template go-cli --dry-run\n",[163,373,374,390,405],{"__ignoreMap":161},[166,375,376,378,380,382,384,387],{"class":168,"line":169},[166,377,221],{"class":172},[166,379,238],{"class":176},[166,381,241],{"class":176},[166,383,306],{"class":176},[166,385,386],{"class":176}," go-cli",[166,388,389],{"class":176}," --print-hooks\n",[166,391,392,394,396,398,400,402],{"class":168,"line":333},[166,393,221],{"class":172},[166,395,238],{"class":176},[166,397,241],{"class":176},[166,399,306],{"class":176},[166,401,386],{"class":176},[166,403,404],{"class":176}," --print-params\n",[166,406,408,410,412,414,416,418],{"class":168,"line":407},3,[166,409,221],{"class":172},[166,411,238],{"class":176},[166,413,241],{"class":176},[166,415,306],{"class":176},[166,417,386],{"class":176},[166,419,420],{"class":176}," --dry-run\n",[189,422,423,426,427,430],{},[163,424,425],{},"--print-params"," shows the resolved params as JSON. ",[163,428,429],{},"--dry-run"," renders to a temp directory and lists the files that would be written.",[151,432,434],{"id":433},"_6-build-your-own-template","6. Build your own template",[189,436,437],{},"Ready to create a template? Follow the step-by-step tutorial:",[189,439,440],{},[441,442,47],"a",{"href":443},"\u002Fguides\u002Fcreate-template",[445,446,447],"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 pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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":161,"searchDepth":333,"depth":333,"links":449},[450,451,452,453,454,455],{"id":153,"depth":333,"text":154},{"id":225,"depth":333,"text":226},{"id":289,"depth":333,"text":290},{"id":315,"depth":333,"text":316},{"id":367,"depth":333,"text":368},{"id":433,"depth":333,"text":434},"Welcome. In the next few minutes you will install spin, scaffold a project from a remote template, and learn how to work offline.","md",null,{},true,{"title":9,"description":456},"Ox24bAUdFtBEDDidFu-5H9RMq3bmCMFvRuHed9pZlmY",[464,466],{"title":5,"path":6,"stem":7,"description":465,"children":-1},"A language-agnostic project scaffolder. You point it at a template, it asks for the template's params, renders a project tree, and runs the template's hooks",{"title":13,"path":14,"stem":15,"description":467,"children":-1},"Spin respects a small set of environment variables for paths, git behaviour, and CI detection.",1787755180240]