[{"data":1,"prerenderedAt":393},["ShallowReactive",2],{"navigation_docs":3,"-docs-introduction":145,"-docs-introduction-surround":390},[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":5,"body":147,"description":383,"extension":384,"links":385,"meta":386,"navigation":387,"path":6,"seo":388,"stem":7,"__hash__":389},"docs\u002Fdocs\u002F1.introduction.md",{"type":148,"value":149,"toc":377},"minimark",[150,179,183,196,201,219,254,258,299,303,326,329,345,356,373],[151,152,157],"pre",{"className":153,"code":154,"language":155,"meta":156,"style":156},"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","",[158,159,160],"code",{"__ignoreMap":156},[161,162,165,169,173,176],"span",{"class":163,"line":164},"line",1,[161,166,168],{"class":167},"sBMFI","spin",[161,170,172],{"class":171},"sfazB"," new",[161,174,175],{"class":171}," myapp",[161,177,178],{"class":171}," https:\u002F\u002Fgithub.com\u002Fexample\u002Fgo-cli-template.git\n",[180,181,182],"p",{},"spin opens a two-step interactive form: first it asks for the template's params, then it shows you every hook the template will run so you can review and choose Run \u002F Skip \u002F Cancel before any shell commands execute.",[180,184,185,186,188,189,192,193,195],{},"A template is any directory with a ",[158,187,78],{}," manifest and a ",[158,190,191],{},"_base\u002F"," tree. Templates can target any language, framework, or build tool. ",[158,194,168],{}," only handles load, prompt, render, and hooks.",[197,198,200],"h2",{"id":199},"why-spin","Why spin?",[180,202,203,204,207,208,211,212,215,216,218],{},"Most scaffolders are tied to one ecosystem: ",[158,205,206],{},"cargo new"," for Rust, ",[158,209,210],{},"create-next-app"," for Next.js, ",[158,213,214],{},"create-vue"," for Vue. ",[158,217,168],{}," is different. It does not care what your template produces. It gives template authors one portable format and gives users one command for every project.",[220,221,222,230,239,245],"ul",{},[223,224,225,229],"li",{},[226,227,228],"strong",{},"One CLI for every stack."," Go, Rust, TypeScript, Python, static sites, libraries - anything that fits in a directory.",[223,231,232,235,236,238],{},[226,233,234],{},"Templates are external."," No embedded defaults, no framework bias. The author owns the template; ",[158,237,168],{}," owns the pipeline.",[223,240,241,244],{},[226,242,243],{},"Offline-friendly."," Pin a template once, scaffold from it forever without a network round-trip.",[223,246,247,250,251,253],{},[226,248,249],{},"Composable registries."," Share templates through git-backed registries and discover them with ",[158,252,130],{},".",[197,255,257],{"id":256},"what-you-can-do","What you can do",[220,259,260,266,275,281,290],{},[223,261,262,265],{},[226,263,264],{},"Scaffold"," a project from a git URL, local path, pinned template, or registry shorthand.",[223,267,268,271,272,274],{},[226,269,270],{},"Pin"," templates locally so ",[158,273,110],{}," works offline.",[223,276,277,280],{},[226,278,279],{},"Search"," templates in registered registries and pinned templates without a network round-trip.",[223,282,283,285,286,289],{},[226,284,96],{}," of your own by pointing ",[158,287,288],{},"spin registry add"," at a git repo or local directory.",[223,291,292,295,296,298],{},[226,293,294],{},"Write a template"," with ",[158,297,138],{}," and publish it as a normal git repo.",[197,300,302],{"id":301},"install","Install",[151,304,306],{"className":153,"code":305,"language":155,"meta":156,"style":156},"curl -sSfL https:\u002F\u002Fspincli.pages.dev\u002Finstall.sh | sh\n",[158,307,308],{"__ignoreMap":156},[161,309,310,313,316,319,323],{"class":163,"line":164},[161,311,312],{"class":167},"curl",[161,314,315],{"class":171}," -sSfL",[161,317,318],{"class":171}," https:\u002F\u002Fspincli.pages.dev\u002Finstall.sh",[161,320,322],{"class":321},"sMK4o"," |",[161,324,325],{"class":167}," sh\n",[180,327,328],{},"or with Go",[151,330,332],{"className":153,"code":331,"language":155,"meta":156,"style":156},"go install github.com\u002Fsam0uly\u002Fspin@latest\n",[158,333,334],{"__ignoreMap":156},[161,335,336,339,342],{"class":163,"line":164},[161,337,338],{"class":167},"go",[161,340,341],{"class":171}," install",[161,343,344],{"class":171}," github.com\u002Fsam0uly\u002Fspin@latest\n",[180,346,347,348,351,352,355],{},"Requires ",[158,349,350],{},"git"," on ",[158,353,354],{},"$PATH"," for cloning git URLs and registries.",[180,357,358,361,362,361,365,368,369,372],{},[158,359,360],{},"--param",", ",[158,363,364],{},"--print-params",[158,366,367],{},"--print-hooks",", and ",[158,370,371],{},"--dry-run"," flags let you automate\nscaffolding in scripts and CI without the interactive form.",[374,375,376],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":156,"searchDepth":378,"depth":378,"links":379},2,[380,381,382],{"id":199,"depth":378,"text":200},{"id":256,"depth":378,"text":257},{"id":301,"depth":378,"text":302},"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","md",null,{},true,{"title":5,"description":383},"q5mPqJ0aWrzcVDkSPDPwRc5LO34Sneq3bX_PBSZ6WTc",[385,391],{"title":9,"path":10,"stem":11,"description":392,"children":-1},"Welcome. In the next few minutes you will install spin, scaffold a project from a remote template, and learn how to work offline.",1787755180239]