[{"data":1,"prerenderedAt":767},["ShallowReactive",2],{"navigation":3,"/docs/getting-started/how-spin-works":285,"/docs/getting-started/how-spin-works-surround":762},[4],{"title":5,"path":6,"stem":7,"children":8},"Introduction","/docs","docs/1.index",[9,10,36,53,70,83,100,121,138,155,176],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"page":35},"Installation","/docs/installation","docs/1.installation",[15,19,23,27,31],{"title":16,"path":17,"stem":18},"Install to macOS","/docs/installation/install-macos","docs/1.installation/1.install-macos",{"title":20,"path":21,"stem":22},"Install to Windows","/docs/installation/install-windows","docs/1.installation/2.install-windows",{"title":24,"path":25,"stem":26},"Install to Linux","/docs/installation/install-linux","docs/1.installation/3.install-linux",{"title":28,"path":29,"stem":30},"Install via Composer","/docs/installation/install-composer","docs/1.installation/4.install-composer",{"title":32,"path":33,"stem":34},"Install via NPM/Yarn","/docs/installation/install-npm-yarn","docs/1.installation/5.install-npm-yarn",false,{"title":37,"path":38,"stem":39,"children":40,"page":35},"Community","/docs/community","docs/11.community",[41,45,49],{"title":42,"path":43,"stem":44},"Get Help","/docs/community/get-help","docs/11.community/1.get-help",{"title":46,"path":47,"stem":48},"Testing New Releases","/docs/community/testing","docs/11.community/2.testing",{"title":50,"path":51,"stem":52},"Contributing","/docs/community/contributing","docs/11.community/3.contributing",{"title":54,"path":55,"stem":56,"children":57,"page":35},"Getting Started","/docs/getting-started","docs/2.getting-started",[58,62,66],{"title":59,"path":60,"stem":61},"How Spin Works","/docs/getting-started/how-spin-works","docs/2.getting-started/1.how-spin-works",{"title":63,"path":64,"stem":65},"Create a New Project with Spin","/docs/getting-started/create-a-new-project-with-spin","docs/2.getting-started/2.create-a-new-project-with-spin",{"title":67,"path":68,"stem":69},"Add Spin to an Existing Project","/docs/getting-started/add-spin-to-an-existing-project","docs/2.getting-started/3.add-spin-to-an-existing-project",{"title":71,"path":72,"stem":73,"children":74,"page":35},"Development Environment","/docs/development-environment","docs/3.development-environment",[75,79],{"title":76,"path":77,"stem":78},"Starting Up Your Development Environment","/docs/development-environment/starting-up-your-development-environment","docs/3.development-environment/1.starting-up-your-development-environment",{"title":80,"path":81,"stem":82},"Running Commands in Development","/docs/development-environment/running-commands-in-development","docs/3.development-environment/2.running-commands-in-development",{"title":84,"path":85,"stem":86,"children":87,"page":35},"Server Configuration","/docs/server-configuration","docs/4.server-configuration",[88,92,96],{"title":89,"path":90,"stem":91},"Server Requirements","/docs/server-configuration/server-requirements","docs/4.server-configuration/1.server-requirements",{"title":93,"path":94,"stem":95},"Server Configuration Basics","/docs/server-configuration/server-configuration-basics","docs/4.server-configuration/2.server-configuration-basics",{"title":97,"path":98,"stem":99},".spin.yml Usage","/docs/server-configuration/spin-yml-usage","docs/4.server-configuration/3.spin-yml-usage",{"title":101,"path":102,"stem":103,"children":104,"page":35},"Providers","/docs/providers","docs/5.providers",[105,109,113,117],{"title":106,"path":107,"stem":108},"DigitalOcean","/docs/providers/digitalocean","docs/5.providers/0.digitalocean",{"title":110,"path":111,"stem":112},"Hetzner","/docs/providers/hetzner","docs/5.providers/0.hetzner",{"title":114,"path":115,"stem":116},"Vultr","/docs/providers/vultr","docs/5.providers/0.vultr",{"title":118,"path":119,"stem":120},"Use Any Host","/docs/providers/use-any-host","docs/5.providers/99.use-any-host",{"title":122,"path":123,"stem":124,"children":125,"page":35},"Deployment","/docs/deployment","docs/6.deployment",[126,130,134],{"title":127,"path":128,"stem":129},"Choosing a Deployment Strategy","/docs/deployment/choosing-a-deployment-strategy","docs/6.deployment/1.choosing-a-deployment-strategy",{"title":131,"path":132,"stem":133},"Automated Deployments with GitHub Actions","/docs/deployment/automated-deployments-with-github-actions","docs/6.deployment/2.automated-deployments-with-github-actions",{"title":135,"path":136,"stem":137},"Using \"spin deploy\"","/docs/deployment/using-spin-deploy","docs/6.deployment/3.using-spin-deploy",{"title":139,"path":140,"stem":141,"children":142,"page":35},"Server Access","/docs/server-access","docs/7.server-access",[143,147,151],{"title":144,"path":145,"stem":146},"Connecting to Your Server","/docs/server-access/connecting-to-your-server","docs/7.server-access/1.connecting-to-your-server",{"title":148,"path":149,"stem":150},"Troubleshooting Your Application","/docs/server-access/troubleshooting-your-application","docs/7.server-access/2.troubleshooting-your-application",{"title":152,"path":153,"stem":154},"Updating Your Server","/docs/server-access/updating-your-server","docs/7.server-access/3.updating-your-server",{"title":156,"path":157,"stem":158,"children":159,"page":35},"Advanced","/docs/advanced","docs/8.advanced",[160,164,168,172],{"title":161,"path":162,"stem":163},"Generating a Secure SSH Key","/docs/advanced/generating-a-secure-ssh-key","docs/8.advanced/2.generating-a-secure-ssh-key",{"title":165,"path":166,"stem":167},"Adding Other Services","/docs/advanced/adding-other-services","docs/8.advanced/3.adding-other-services",{"title":169,"path":170,"stem":171},"Create your own Spin Template","/docs/advanced/create-your-own-template","docs/8.advanced/99.create-your-own-template",{"title":173,"path":174,"stem":175},"Migrating from Spin v2 to v3","/docs/advanced/migrating-from-spin-v2-to-v3","docs/8.advanced/migrating-from-spin-v2-to-v3",{"title":177,"path":178,"stem":179,"children":180,"page":35},"Command Reference","/docs/command-reference","docs/9.command-reference",[181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281],{"title":182,"path":183,"stem":184},"base64","/docs/command-reference/base64","docs/9.command-reference/base64",{"title":186,"path":187,"stem":188},"build","/docs/command-reference/build","docs/9.command-reference/build",{"title":190,"path":191,"stem":192},"configure","/docs/command-reference/configure","docs/9.command-reference/configure",{"title":194,"path":195,"stem":196},"debug","/docs/command-reference/debug","docs/9.command-reference/debug",{"title":198,"path":199,"stem":200},"deploy","/docs/command-reference/deploy","docs/9.command-reference/deploy",{"title":202,"path":203,"stem":204},"down","/docs/command-reference/down","docs/9.command-reference/down",{"title":206,"path":207,"stem":208},"exec","/docs/command-reference/exec","docs/9.command-reference/exec",{"title":210,"path":211,"stem":212},"gh","/docs/command-reference/gh","docs/9.command-reference/gh",{"title":214,"path":215,"stem":216},"help","/docs/command-reference/help","docs/9.command-reference/help",{"title":218,"path":219,"stem":220},"init","/docs/command-reference/init","docs/9.command-reference/init",{"title":222,"path":223,"stem":224},"kill","/docs/command-reference/kill","docs/9.command-reference/kill",{"title":226,"path":227,"stem":228},"latest","/docs/command-reference/latest","docs/9.command-reference/latest",{"title":230,"path":231,"stem":232},"logs","/docs/command-reference/logs","docs/9.command-reference/logs",{"title":234,"path":235,"stem":236},"maintain","/docs/command-reference/maintain","docs/9.command-reference/maintain",{"title":238,"path":239,"stem":240},"mkpasswd","/docs/command-reference/mkpasswd","docs/9.command-reference/mkpasswd",{"title":242,"path":243,"stem":244},"new","/docs/command-reference/new","docs/9.command-reference/new",{"title":246,"path":247,"stem":248},"provision","/docs/command-reference/provision","docs/9.command-reference/provision",{"title":250,"path":251,"stem":252},"prune","/docs/command-reference/prune","docs/9.command-reference/prune",{"title":254,"path":255,"stem":256},"ps","/docs/command-reference/ps","docs/9.command-reference/ps",{"title":258,"path":259,"stem":260},"pull","/docs/command-reference/pull","docs/9.command-reference/pull",{"title":262,"path":263,"stem":264},"run","/docs/command-reference/run","docs/9.command-reference/run",{"title":266,"path":267,"stem":268},"stop","/docs/command-reference/stop","docs/9.command-reference/stop",{"title":270,"path":271,"stem":272},"up","/docs/command-reference/up","docs/9.command-reference/up",{"title":274,"path":275,"stem":276},"update","/docs/command-reference/update","docs/9.command-reference/update",{"title":278,"path":279,"stem":280},"vault","/docs/command-reference/vault","docs/9.command-reference/vault",{"title":282,"path":283,"stem":284},"version","/docs/command-reference/version","docs/9.command-reference/version",{"id":286,"title":59,"body":287,"canonical":752,"description":753,"extension":754,"layout":755,"meta":756,"navigation":759,"path":60,"seo":760,"stem":61,"__hash__":761},"docs/docs/2.getting-started/1.how-spin-works.md",{"type":288,"value":289,"toc":738},"minimark",[290,297,302,310,314,321,324,355,360,372,376,379,402,406,409,414,424,427,445,449,483,487,490,493,505,509,522,525,531,534,584,587,600,604,607,613,694,697,701,715,718,722,725,731,734],[291,292,293],"lead-p",{},[294,295,296],"p",{},"Spin is a collection of proven open source technologies delivered to you in a lightweight and simple experience. This document explains what technologies Spin uses, how it works, and how this tool can enable you to have a lot of power and freedom to self-host and distribute your applications.",[298,299,301],"h2",{"id":300},"spin-stays-out-of-your-way","Spin stays out of your way",[294,303,304,305,309],{},"Spin is designed to be flexible and gives you the power to choose what you'd like Spin to help you with. For example, if you want to use your current PaaS provider for production deployments, but you just want to use Spin for local development, you can easily do that without Spin getting in the way. Simply delete the ",[306,307,308],"code",{},"docker-compose.prod.yml"," file and you won't need to do anything else.",[298,311,313],{"id":312},"what-spin-is-built-on-top-of","What Spin Is Built On Top Of",[294,315,316],{},[317,318],"img",{"alt":319,"src":320},"Spin Diagram","/images/docs/whats-spin/spin-diagram.png",[294,322,323],{},"At the core of Spin are:",[325,326,327,339,347],"ul",{},[328,329,330,338],"li",{},[331,332,337],"a",{"href":333,"rel":334,"target":336},"https://docs.docker.com/compose/",[335],"nofollow","_blank","Docker Compose"," (used in local development)",[328,340,341,346],{},[331,342,345],{"href":343,"rel":344,"target":336},"https://docs.docker.com/engine/swarm/",[335],"Docker Swarm Mode"," (used in production, staging, etc.)",[328,348,349,354],{},[331,350,353],{"href":351,"rel":352,"target":336},"https://www.ansible.com/",[335],"Ansible"," (used to ensure your server is configured correctly)",[356,357,359],"h3",{"id":358},"templates-on-spin-hub","Templates on Spin Hub",[294,361,362,363,367,368,371],{},"We have organized a ",[331,364,366],{"href":365},"/hub","community hub"," where you can find templates created by the Spin team and the community. You can also ",[331,369,370],{"href":170},"create your own template",".",[356,373,375],{"id":374},"flexible-deployments","Flexible deployments",[294,377,378],{},"With Spin, you have two options for deployments:",[380,381,382,389],"ol",{},[328,383,384,388],{},[385,386,387],"strong",{},"GitHub Actions"," - We have open source workflows that follow the Spin structure to help you build and deploy your application with ease.",[328,390,391,398,399,401],{},[331,392,393],{"href":199},[385,394,395],{},[306,396,397],{},"spin deploy"," - For smaller teams and very simple deployments, ",[306,400,397],{}," will deploy your application without any downtime or the headaches of managing a CI/CD pipeline.",[356,403,405],{"id":404},"other-open-source-projects-we-use","Other open source projects we use",[294,407,408],{},"Spin accesses and utilizes other open source projects to simplify your development lifecycle experience. The entire system is built on top of open source libraries, but here are a few notable ones to be aware of:",[410,411,413],"h4",{"id":412},"ansible-collection","Ansible Collection",[325,415,416],{},[328,417,418,423],{},[331,419,422],{"href":420,"rel":421,"target":336},"https://github.com/serversideup/ansible-collection-spin",[335],"Spin Ansible Collection"," - Used to provision and maintain your production server.",[410,425,387],{"id":426},"github-actions",[325,428,429,437],{},[328,430,431,436],{},[331,432,435],{"href":433,"rel":434,"target":336},"https://github.com/marketplace/actions/docker-build-action",[335],"serversideup/docker-build-action"," - A simplified syntax to build and publish your Docker images with GitHub Actions.",[328,438,439,444],{},[331,440,443],{"href":441,"rel":442,"target":336},"https://github.com/marketplace/actions/docker-swarm-deploy-github-action",[335],"serversideup/docker-swarm-deploy-github-action"," - A simplified syntax to deploy to Docker Swarm Mode via GitHub Actions.",[410,446,448],{"id":447},"docker-images","Docker Images",[325,450,451,459,467,475],{},[328,452,453,458],{},[331,454,457],{"href":455,"rel":456,"target":336},"https://serversideup.net/open-source/docker-php/",[335],"serversideup/php"," - PHP Docker images highly optimized to work with Laravel + Spin.",[328,460,461,466],{},[331,462,465],{"href":463,"rel":464,"target":336},"https://github.com/serversideup/docker-ssh",[335],"serversideup/docker-ssh"," - A lightweight docker image that runs SSH. This is a fantastic method on using a secure SSH tunnel into your database cluster.",[328,468,469,474],{},[331,470,473],{"href":471,"rel":472,"target":336},"https://github.com/serversideup/docker-ansible",[335],"serversideup/docker-ansible"," - A lightweight docker image that runs Ansible. This allows users to provision their server without needing to know how to install or maintain their Ansible installation.",[328,476,477,482],{},[331,478,481],{"href":479,"rel":480,"target":336},"https://github.com/serversideup/docker-github-cli",[335],"serversideup/docker-github-cli"," - A lightweight docker image that runs GitHub CLI. This allows users to interact with GitHub without needing to install the GitHub CLI on their machine.",[298,484,486],{"id":485},"why-not-just-use-these-technologies-directly","Why not just use these technologies directly?",[294,488,489],{},"Spin is designed to reduce the learning curve for delivering containerized applications with Docker. This is where we believe the 99% of people are. If you're looking to start a new project and deliver it quickly without breaking the bank, Spin is for you. Everything is designed to have your application disposable, repeatable, and scalable.",[294,491,492],{},"For some advanced users that are running massive server farms, you might want to stick to your existing tooling. Spin is focused on launching apps from the ground up with the ability to scale. In large clusters, you might need to write your own tooling to match your existing use case.",[294,494,495,496,499,500,504],{},"The good news is ",[385,497,498],{},"you don't need to use Spin everywhere."," Spin is a ",[501,502,503],"em",{},"structure"," just as much as it is a tool. Spin is designed to be there when you need it and get out of your way when you don't.",[298,506,508],{"id":507},"important-concepts","Important concepts",[294,510,511,512,517,518,521],{},"Spin's flexibility comes from embracing the ",[331,513,516],{"href":514,"rel":515,"target":336},"https://docs.docker.com/compose/multiple-compose-files/extends/",[335],"Docker Compose Overrides (aka Docker Compose Extends)"," structure. We use a \"base\" ",[306,519,520],{},"docker-compose.yml"," file, then choose a file based on the environment.",[294,523,524],{},"Here is a visual of what the file structure looks like:",[294,526,527],{},[317,528],{"alt":529,"src":530},"Docker Compose Overrides","/images/docs/whats-spin/docker-compose-overrides.png",[294,532,533],{},"Docker natively selecting these files, but it is a huge pain to type out each time. This is what we would have to type to bring our project up.",[535,536,542],"pre",{"className":537,"code":538,"filename":539,"language":540,"meta":541,"style":541},"language-bash shiki shiki-themes material-theme-lighter github-dark github-dark","docker compose pull && docker compose -f docker-compose.yml -f docker-compose.dev.yml up\n","What we would have to type with Docker Compose 😅","bash","",[306,543,544],{"__ignoreMap":541},[545,546,549,553,557,560,564,567,569,573,576,578,581],"span",{"class":547,"line":548},"line",1,[545,550,552],{"class":551},"soiBB","docker",[545,554,556],{"class":555},"s0vBq"," compose",[545,558,559],{"class":555}," pull",[545,561,563],{"class":562},"sG-J9"," &&",[545,565,566],{"class":551}," docker",[545,568,556],{"class":555},[545,570,572],{"class":571},"sSJ72"," -f",[545,574,575],{"class":555}," docker-compose.yml",[545,577,572],{"class":571},[545,579,580],{"class":555}," docker-compose.dev.yml",[545,582,583],{"class":555}," up\n",[294,585,586],{},"Here's how this command compares in Spin:",[535,588,591],{"className":537,"code":589,"filename":590,"language":540,"meta":541,"style":541},"spin up\n","What we type with Spin 🥳",[306,592,593],{"__ignoreMap":541},[545,594,595,598],{"class":547,"line":548},[545,596,597],{"class":551},"spin",[545,599,583],{"class":555},[356,601,603],{"id":602},"further-example","Further example",[294,605,606],{},"To see this from a code perspective, let's take a look at this:",[294,608,609],{},[317,610],{"alt":611,"src":612},"Docker Compose Overrides Code","/images/docs/whats-spin/docker-overrides-code.png",[535,614,619],{"className":615,"code":616,"filename":617,"language":618,"meta":541,"style":541},"language-yaml shiki shiki-themes material-theme-lighter github-dark github-dark","services:\n  php:\n    image: serversideup/php:8.3-fpm-nginx\n    environment:\n        PRODUCTION: \"false\"\n  node:\n    image: node:lts\n","If we were to run \"spin up\", our expected result of Docker Compose that we'll run","yaml",[306,620,621,630,638,650,658,676,684],{"__ignoreMap":541},[545,622,623,627],{"class":547,"line":548},[545,624,626],{"class":625},"sqIbZ","services",[545,628,629],{"class":562},":\n",[545,631,633,636],{"class":547,"line":632},2,[545,634,635],{"class":625},"  php",[545,637,629],{"class":562},[545,639,641,644,647],{"class":547,"line":640},3,[545,642,643],{"class":625},"    image",[545,645,646],{"class":562},":",[545,648,649],{"class":555}," serversideup/php:8.3-fpm-nginx\n",[545,651,653,656],{"class":547,"line":652},4,[545,654,655],{"class":625},"    environment",[545,657,629],{"class":562},[545,659,661,664,666,670,673],{"class":547,"line":660},5,[545,662,663],{"class":625},"        PRODUCTION",[545,665,646],{"class":562},[545,667,669],{"class":668},"sF_wb"," \"",[545,671,672],{"class":555},"false",[545,674,675],{"class":668},"\"\n",[545,677,679,682],{"class":547,"line":678},6,[545,680,681],{"class":625},"  node",[545,683,629],{"class":562},[545,685,687,689,691],{"class":547,"line":686},7,[545,688,643],{"class":625},[545,690,646],{"class":562},[545,692,693],{"class":555}," node:lts\n",[294,695,696],{},"You can see the files are merged intelligently so you can manage infrastructure like an \"object\" in programming.",[298,698,700],{"id":699},"spin-syntax","Spin Syntax",[294,702,703,704,707,708,711,712,714],{},"You'll notice Spin follows the same syntax as the tool it's built on top of. For example, ",[306,705,706],{},"spin up"," runs ",[306,709,710],{},"docker compose up"," and supports any CLI option that ",[306,713,710],{}," supports.",[294,716,717],{},"This is intentional by design because we really hate it when tools introduce their own domain specific language on top of other tools. Spin is here to make your process easy and centralized. We follow the design of the other tools we built from so it's easy for you to find developers that are familiar with the technology, find support online, and scale easily from Spin on.",[298,719,721],{"id":720},"framework-agnostic","Framework Agnostic",[294,723,724],{},"One other thing that we spent a lot of time on is writing everything so Spin is framework agnostic. Containerizing applications gives you incredible power to deliver your application anywhere like never before. We'd be fools if we built Spin to work with just one framework only. The power of Docker enables us to give you quality development environments to all developers (regardless if they are running Mac, Windows, or Linux).",[294,726,727,728,371],{},"You'll notice Spin is written in vanilla Bash. Yup... you read that correctly. Many people think we're crazy for doing this and they've suggested \"X\", \"Y\", and \"Z\" would have been a better programming language, but the biggest reason why we did this was so we could deliver an experience with ",[385,729,730],{},"no additional development dependency",[294,732,733],{},"We intentionally chose to support Bash V3 so MacOS users can just download it and run it. There's no need for the user to figure out how to install Ruby, upgrade Bash, etc. It just works out of the box.",[735,736,737],"style",{},"html pre.shiki code .soiBB, html code.shiki .soiBB{--shiki-light:#E2931D;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .s0vBq, html code.shiki .s0vBq{--shiki-light:#91B859;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .sG-J9, html code.shiki .sG-J9{--shiki-light:#39ADB5;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sSJ72, html code.shiki .sSJ72{--shiki-light:#91B859;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sqIbZ, html code.shiki .sqIbZ{--shiki-light:#E53935;--shiki-default:#85E89D;--shiki-dark:#85E89D}html pre.shiki code .sF_wb, html code.shiki .sF_wb{--shiki-light:#39ADB5;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}",{"title":541,"searchDepth":632,"depth":632,"links":739},[740,741,746,747,750,751],{"id":300,"depth":632,"text":301},{"id":312,"depth":632,"text":313,"children":742},[743,744,745],{"id":358,"depth":640,"text":359},{"id":374,"depth":640,"text":375},{"id":404,"depth":640,"text":405},{"id":485,"depth":632,"text":486},{"id":507,"depth":632,"text":508,"children":748},[749],{"id":602,"depth":640,"text":603},{"id":699,"depth":632,"text":700},{"id":720,"depth":632,"text":721},"https://serversideup.net/open-source/spin/docs/getting-started/how-spin-works","Learn what Spin is and how it works.","md","docs",{"head":757},{"title":758},"How Spin Works - Spin by Server Side Up",true,{"title":59,"description":753},"i3HsMAFBtz5_8txzmROWocu3OkJnhRxgm6ul_zYktwE",[763,765],{"title":50,"path":51,"stem":52,"description":764,"children":-1},"Learn how to contribute to Spin.",{"title":63,"path":64,"stem":65,"description":766,"children":-1},"Learn how to create a new project with Spin.",1769465036879]