[{"data":1,"prerenderedAt":758},["ShallowReactive",2],{"navigation:en":3,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Finstallation:en":311},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11,152],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-layout-grid",{"title":12,"path":13,"stem":14,"children":15,"icon":151},"SaaS Starter Kit","\u002Fdocs\u002Fsaas-starter-kit","docs\u002F1.saas-starter-kit\u002F0.index",[16,19,63,129],{"title":17,"path":13,"stem":14,"icon":18},"What is the SaaS Starter Kit?","i-lucide-info",{"title":20,"icon":21,"hide":22,"path":23,"stem":24,"children":25,"page":62},"Getting Started","i-lucide-play",true,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started","docs\u002F1.saas-starter-kit\u002F1.getting-started",[26,30,34,38,42,46,50,54,58],{"title":27,"path":28,"stem":29},"Quick Start","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fquick-start","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F0.quick-start",{"title":31,"path":32,"stem":33},"Installation","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Finstallation","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F1.installation",{"title":35,"path":36,"stem":37},"Cloudflare Access","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fcloudflare-access","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F2.cloudflare-access",{"title":39,"path":40,"stem":41},"Configuration","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fconfiguration","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F3.configuration",{"title":43,"path":44,"stem":45},"Secrets","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fsecrets","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F4.secrets",{"title":47,"path":48,"stem":49},"Environment Variables","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fenvironment-variables","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F5.environment-variables",{"title":51,"path":52,"stem":53},"Deploy","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fdeploy","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F6.deploy",{"title":55,"path":56,"stem":57},"Local Development","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Flocal-development","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F7.local-development",{"title":59,"path":60,"stem":61},"Project Structure","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fproject-structure","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F8.project-structure",false,{"title":64,"icon":65,"hide":22,"path":66,"stem":67,"children":68,"page":62},"Features","i-lucide-box","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures","docs\u002F1.saas-starter-kit\u002F2.features",[69,73,77,81,85,89,93,97,101,105,109,113,117,121,125],{"title":70,"path":71,"stem":72},"Authentication","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fauth","docs\u002F1.saas-starter-kit\u002F2.features\u002F1.auth",{"title":74,"path":75,"stem":76},"Rate Limiting","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frate-limiting","docs\u002F1.saas-starter-kit\u002F2.features\u002F10.rate-limiting",{"title":78,"path":79,"stem":80},"WebSockets","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fwebsockets","docs\u002F1.saas-starter-kit\u002F2.features\u002F11.websockets",{"title":82,"path":83,"stem":84},"Blog","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fblog","docs\u002F1.saas-starter-kit\u002F2.features\u002F14.blog",{"title":86,"path":87,"stem":88},"Documentation","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdocumentation","docs\u002F1.saas-starter-kit\u002F2.features\u002F15.documentation",{"title":90,"path":91,"stem":92},"Analytics","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fanalytics","docs\u002F1.saas-starter-kit\u002F2.features\u002F16.analytics",{"title":94,"path":95,"stem":96},"Platform Admin Console","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fplatform-admin","docs\u002F1.saas-starter-kit\u002F2.features\u002F17.platform-admin",{"title":98,"path":99,"stem":100},"Database","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdatabase","docs\u002F1.saas-starter-kit\u002F2.features\u002F2.database",{"title":102,"path":103,"stem":104},"Payments & Billing","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fpayments","docs\u002F1.saas-starter-kit\u002F2.features\u002F3.payments",{"title":106,"path":107,"stem":108},"Emails","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Femails","docs\u002F1.saas-starter-kit\u002F2.features\u002F4.emails",{"title":110,"path":111,"stem":112},"Notifications","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fnotifications","docs\u002F1.saas-starter-kit\u002F2.features\u002F5.notifications",{"title":114,"path":115,"stem":116},"Role-Based Access Control","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frbac","docs\u002F1.saas-starter-kit\u002F2.features\u002F6.rbac",{"title":118,"path":119,"stem":120},"Async Jobs","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fasync-jobs","docs\u002F1.saas-starter-kit\u002F2.features\u002F7.async-jobs",{"title":122,"path":123,"stem":124},"Storage","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fstorage","docs\u002F1.saas-starter-kit\u002F2.features\u002F8.storage",{"title":126,"path":127,"stem":128},"Internationalization","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Finternationalization","docs\u002F1.saas-starter-kit\u002F2.features\u002F9.internationalization",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":62},"Concepts","i-lucide-graduation-cap","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts","docs\u002F1.saas-starter-kit\u002F3.concepts",[135,139,143,147],{"title":136,"path":137,"stem":138},"Technology Stack","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Ftech-stack","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F0.tech-stack",{"title":140,"path":141,"stem":142},"SST.dev","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fsst","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F1.sst",{"title":144,"path":145,"stem":146},"NuxtHub","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fnuxt-hub","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F2.nuxt-hub",{"title":148,"path":149,"stem":150},"Design System & Branding","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fdesign-system","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F3.design-system","i-lucide-zap",{"title":153,"path":154,"stem":155,"children":156,"icon":159},"Fireskills","\u002Fdocs\u002Ffireskills","docs\u002F2.fireskills\u002F0.index",[157,160,219,249,275,293],{"title":158,"path":154,"stem":155,"icon":159},"What is Fireskills?","i-lucide-flame",{"title":20,"icon":21,"hide":22,"path":161,"stem":162,"children":163,"page":62},"\u002Fdocs\u002Ffireskills\u002Fgetting-started","docs\u002F2.fireskills\u002F1.getting-started",[164,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":27,"path":165,"stem":166},"\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fquick-start","docs\u002F2.fireskills\u002F1.getting-started\u002F00.quick-start",{"title":168,"path":169,"stem":170},"Workflow & Governance","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fworkflow","docs\u002F2.fireskills\u002F1.getting-started\u002F01.workflow",{"title":172,"path":173,"stem":174},"Project Context","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fproject-context","docs\u002F2.fireskills\u002F1.getting-started\u002F02.project-context",{"title":176,"path":177,"stem":178},"Step 0: Setup","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-setup","docs\u002F2.fireskills\u002F1.getting-started\u002F03.step-setup",{"title":180,"path":181,"stem":182},"Step 1: Inbox","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-inbox","docs\u002F2.fireskills\u002F1.getting-started\u002F04.step-inbox",{"title":184,"path":185,"stem":186},"Step 2: Backlog","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-backlog","docs\u002F2.fireskills\u002F1.getting-started\u002F05.step-backlog",{"title":188,"path":189,"stem":190},"Step 3: Specify","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-specify","docs\u002F2.fireskills\u002F1.getting-started\u002F06.step-specify",{"title":192,"path":193,"stem":194},"Step 4: Validate","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-validate","docs\u002F2.fireskills\u002F1.getting-started\u002F07.step-validate",{"title":196,"path":197,"stem":198},"Step 5: Tasks","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tasks","docs\u002F2.fireskills\u002F1.getting-started\u002F08.step-tasks",{"title":200,"path":201,"stem":202},"Step 6: TDD\u002FBDD","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tdd-bdd","docs\u002F2.fireskills\u002F1.getting-started\u002F09.step-tdd-bdd",{"title":204,"path":205,"stem":206},"Step 7: Implement","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-implement","docs\u002F2.fireskills\u002F1.getting-started\u002F10.step-implement",{"title":208,"path":209,"stem":210},"Step 8: Documentator","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-documentator","docs\u002F2.fireskills\u002F1.getting-started\u002F11.step-documentator",{"title":212,"path":213,"stem":214},"Late Changes","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Flate-changes","docs\u002F2.fireskills\u002F1.getting-started\u002F12.late-changes",{"title":216,"path":217,"stem":218},"Other Entry Points","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fother-entry-points","docs\u002F2.fireskills\u002F1.getting-started\u002F13.other-entry-points",{"title":220,"icon":221,"hide":22,"path":222,"stem":223,"children":224,"page":62},"Methodology","i-lucide-git-branch","\u002Fdocs\u002Ffireskills\u002Fmethodology","docs\u002F2.fireskills\u002F2.methodology",[225,229,233,237,241,245],{"title":226,"path":227,"stem":228},"The Three Acts","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-acts","docs\u002F2.fireskills\u002F2.methodology\u002F0.three-acts",{"title":230,"path":231,"stem":232},"The Three Gates","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-gates","docs\u002F2.fireskills\u002F2.methodology\u002F1.three-gates",{"title":234,"path":235,"stem":236},"The Canonical Spec","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fcanonical-spec","docs\u002F2.fireskills\u002F2.methodology\u002F2.canonical-spec",{"title":238,"path":239,"stem":240},"Lifecycle States","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Flifecycle-states","docs\u002F2.fireskills\u002F2.methodology\u002F3.lifecycle-states",{"title":242,"path":243,"stem":244},"Effort Scale","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Feffort-scale","docs\u002F2.fireskills\u002F2.methodology\u002F4.effort-scale",{"title":246,"path":247,"stem":248},"Milestones & Governance","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fgovernance-and-milestones","docs\u002F2.fireskills\u002F2.methodology\u002F5.governance-and-milestones",{"title":250,"icon":251,"hide":22,"path":252,"stem":253,"children":254,"page":62},"Skills","i-lucide-layers","\u002Fdocs\u002Ffireskills\u002Fskills","docs\u002F2.fireskills\u002F3.skills",[255,259,263,267,271],{"title":256,"path":257,"stem":258},"Catalog","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fcatalog","docs\u002F2.fireskills\u002F3.skills\u002F0.catalog",{"title":260,"path":261,"stem":262},"Act I: Define","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-1-define","docs\u002F2.fireskills\u002F3.skills\u002F1.act-1-define",{"title":264,"path":265,"stem":266},"Act II: Design & Prove","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-2-design-prove","docs\u002F2.fireskills\u002F3.skills\u002F2.act-2-design-prove",{"title":268,"path":269,"stem":270},"Act III: Deliver","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-3-deliver","docs\u002F2.fireskills\u002F3.skills\u002F3.act-3-deliver",{"title":272,"path":273,"stem":274},"Governance & Decisions","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fgovernance-and-decisions","docs\u002F2.fireskills\u002F3.skills\u002F4.governance-and-decisions",{"title":276,"icon":277,"hide":22,"path":278,"stem":279,"children":280,"page":62},"Specialists","i-lucide-sparkles","\u002Fdocs\u002Ffireskills\u002Fspecialists","docs\u002F2.fireskills\u002F4.specialists",[281,285,289],{"title":282,"path":283,"stem":284},"Overview","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Foverview","docs\u002F2.fireskills\u002F4.specialists\u002F0.overview",{"title":286,"path":287,"stem":288},"Nuxfire Stack","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fnuxfire-stack","docs\u002F2.fireskills\u002F4.specialists\u002F1.nuxfire-stack",{"title":290,"path":291,"stem":292},"Engineering Specialists","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fengineering-specialists","docs\u002F2.fireskills\u002F4.specialists\u002F2.engineering-specialists",{"title":294,"icon":295,"hide":22,"path":296,"stem":297,"children":298,"page":62},"CLI & Tooling","i-lucide-terminal","\u002Fdocs\u002Ffireskills\u002Fcli","docs\u002F2.fireskills\u002F5.cli",[299,303,307],{"title":300,"path":301,"stem":302},"CLI Overview","\u002Fdocs\u002Ffireskills\u002Fcli\u002Foverview","docs\u002F2.fireskills\u002F5.cli\u002F0.overview",{"title":304,"path":305,"stem":306},"Commands","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fcommands","docs\u002F2.fireskills\u002F5.cli\u002F1.commands",{"title":308,"path":309,"stem":310},"Safety Scripts","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fgovernance-scripts","docs\u002F2.fireskills\u002F5.cli\u002F2.governance-scripts",{"id":312,"title":31,"body":313,"description":752,"extension":753,"meta":754,"navigation":755,"path":32,"seo":756,"stem":33,"__hash__":757},"docs\u002Fdocs\u002F1.saas-starter-kit\u002F1.getting-started\u002F1.installation.md",{"type":314,"value":315,"toc":746},"minimark",[316,321,355,363,369,377,381,388,411,430,437,481,500,523,590,600,604,610,614,641,723,727,733,737,742],[317,318,320],"h2",{"id":319},"_1-install-bun","1. Install Bun",[322,323,328],"pre",{"className":324,"code":325,"language":326,"meta":327,"style":327},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","curl -fsSL https:\u002F\u002Fbun.sh\u002Finstall | bash\n","bash","",[329,330,331],"code",{"__ignoreMap":327},[332,333,336,340,344,348,352],"span",{"class":334,"line":335},"line",1,[332,337,339],{"class":338},"sR7ES","curl",[332,341,343],{"class":342},"sFhLe"," -fsSL",[332,345,347],{"class":346},"sLACW"," https:\u002F\u002Fbun.sh\u002Finstall",[332,349,351],{"class":350},"sGXK2"," |",[332,353,354],{"class":338}," bash\n",[356,357,358,359,362],"p",{},"On Windows without WSL: ",[329,360,361],{},"npm install -g bun",".",[356,364,365],{},[366,367,368],"strong",{},"Prompt for AI agents:",[322,370,375],{"className":371,"code":373,"language":374,"meta":327},[372],"language-text","\nCheck for Bun with bun --version. If it's missing, run\ncurl -fsSL https:\u002F\u002Fbun.sh\u002Finstall | bash (Windows without WSL:\nnpm install -g bun), then confirm the version again before continuing.\n\n","text",[329,376,373],{"__ignoreMap":327},[317,378,380],{"id":379},"_2-get-the-codebase-and-install","2. Get the codebase and install",[356,382,383,384,387],{},"Download the complete Nuxfire monorepo directly after purchase, join our ",[366,385,386],{},"VIP Group"," for updates, extract it to your preferred workspace directory, and install dependencies:",[322,389,391],{"className":324,"code":390,"language":326,"meta":327,"style":327},"cd nuxfire\nbun install\n",[329,392,393,402],{"__ignoreMap":327},[332,394,395,399],{"class":334,"line":335},[332,396,398],{"class":397},"sMLJd","cd",[332,400,401],{"class":346}," nuxfire\n",[332,403,405,408],{"class":334,"line":404},2,[332,406,407],{"class":338},"bun",[332,409,410],{"class":346}," install\n",[356,412,413,414,417,418,421,422,425,426,429],{},"The first ",[329,415,416],{},"bun install"," takes a few minutes — it hasn't hung. Always run it inside the extracted folder and never copy a ",[329,419,420],{},"node_modules"," folder from another machine or project: the workspace links (",[329,423,424],{},"@nuxfire\u002F*",") can break, and the deploy preflight (",[427,428,51],"a",{"href":52},") reports it if they do.",[356,431,432,436],{},[433,434,435],"em",{},"(Optional: Initialize your own private Git repository for version control)",":",[322,438,440],{"className":324,"code":439,"language":326,"meta":327,"style":327},"git init\ngit add .\ngit commit -m \"Initial commit from Nuxfire\"\n",[329,441,442,450,460],{"__ignoreMap":327},[332,443,444,447],{"class":334,"line":335},[332,445,446],{"class":338},"git",[332,448,449],{"class":346}," init\n",[332,451,452,454,457],{"class":334,"line":404},[332,453,446],{"class":338},[332,455,456],{"class":346}," add",[332,458,459],{"class":346}," .\n",[332,461,463,465,468,471,475,478],{"class":334,"line":462},3,[332,464,446],{"class":338},[332,466,467],{"class":346}," commit",[332,469,470],{"class":342}," -m",[332,472,474],{"class":473},"siCPE"," \"",[332,476,477],{"class":346},"Initial commit from Nuxfire",[332,479,480],{"class":473},"\"\n",[356,482,483,484,487,488,491,492,495,496,362],{},"The three commands above are enough to start. For the recommended ",[329,485,486],{},"stage"," \u002F ",[329,489,490],{},"production"," branch model, keeping your ",[329,493,494],{},".env*"," files out of Git and a safe first release, follow ",[427,497,499],{"href":498},"\u002Fblog\u002Fgit-branching-stage-production-first-release","Git for Your First Release",[356,501,502,503,506,507,510,511,514,515,518,519,522],{},"Migrations are already versioned in ",[329,504,505],{},"apps\u002Ffunctions\u002Fsrc\u002Fdatabase\u002Fmigrations\u002F",". You only need to generate new ones if you change ",[329,508,509],{},"apps\u002Ffunctions\u002Fsrc\u002Fdatabase\u002Fcore-schema.ts"," or any layer's ",[329,512,513],{},"server\u002Fdatabase\u002Fschema.ts"," (",[329,516,517],{},"drizzle.config.ts"," reads both, not the ",[329,520,521],{},"schema.ts"," barrel — that file only re-exports them):",[322,524,526],{"className":324,"code":525,"language":326,"meta":327,"style":327},"cd apps\u002Ffunctions\nDATABASE_HOST=... DATABASE_PORT=5432 DATABASE_USER=... DATABASE_PASSWORD=... DATABASE_NAME=... \\\n  bunx drizzle-kit generate\n",[329,527,528,535,579],{"__ignoreMap":327},[332,529,530,532],{"class":334,"line":335},[332,531,398],{"class":397},[332,533,534],{"class":346}," apps\u002Ffunctions\n",[332,536,537,541,544,547,550,552,555,558,560,562,565,567,569,572,574,576],{"class":334,"line":404},[332,538,540],{"class":539},"ss--_","DATABASE_HOST",[332,542,543],{"class":350},"=",[332,545,546],{"class":346},"...",[332,548,549],{"class":539}," DATABASE_PORT",[332,551,543],{"class":350},[332,553,554],{"class":346},"5432",[332,556,557],{"class":539}," DATABASE_USER",[332,559,543],{"class":350},[332,561,546],{"class":346},[332,563,564],{"class":539}," DATABASE_PASSWORD",[332,566,543],{"class":350},[332,568,546],{"class":346},[332,570,571],{"class":539}," DATABASE_NAME",[332,573,543],{"class":350},[332,575,546],{"class":346},[332,577,578],{"class":338}," \\\n",[332,580,581,584,587],{"class":334,"line":462},[332,582,583],{"class":346},"  bunx",[332,585,586],{"class":346}," drizzle-kit",[332,588,589],{"class":346}," generate\n",[356,591,592,593,596,597,599],{},"(No ",[329,594,595],{},"DATABASE_URL"," — ",[329,598,517],{}," reads host\u002Fport\u002Fuser\u002Fpassword\u002Fname separately, so you never have to build or escape a URL containing a password.)",[356,601,602],{},[366,603,368],{},[322,605,608],{"className":606,"code":607,"language":374,"meta":327},[372],"In the extracted nuxfire project root, run: bun install\nOnly run bunx drizzle-kit generate (from apps\u002Ffunctions) if\ncore-schema.ts or a layer's server\u002Fdatabase\u002Fschema.ts changed — ask\nthe user for their real DATABASE_HOST\u002FPORT\u002F\nUSER\u002FPASSWORD\u002FNAME first, never invent placeholder values.\n",[329,609,607],{"__ignoreMap":327},[317,611,613],{"id":612},"_3-name-your-installation","3. Name your installation",[356,615,616,617,620,621,624,625,628,629,632,633,636,637,640],{},"Open ",[329,618,619],{},"sst.config.ts"," and change ",[329,622,623],{},"name: \"nuxfire\""," to a short, unique slug for\nyour product (lowercase, no spaces — it becomes part of every Cloudflare\nresource name). Do this now, before your first ",[329,626,627],{},"bun run deploy"," to any stage:\nevery Cloudflare Worker, Durable Object namespace, queue and KV\u002FR2 binding is\nnamed ",[329,630,631],{},"\u003Cname>-\u003Cstage>-...",", so changing it after your first deploy recreates\nevery resource under the new name and abandons the old ones. ",[329,634,635],{},"bun run doctor","\nwarns if this is still ",[329,638,639],{},"\"nuxfire\""," when you deploy.",[322,642,646],{"className":643,"code":644,"filename":619,"language":645,"meta":327,"style":327},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","export default $config({\n  app(input) {\n    return {\n      name: \"your-product-slug\", \u002F\u002F was \"nuxfire\"\n      \u002F\u002F ...\n","typescript",[329,647,648,668,686,693,717],{"__ignoreMap":327},[332,649,650,654,657,661,664],{"class":334,"line":335},[332,651,653],{"class":652},"sRxSC","export",[332,655,656],{"class":652}," default",[332,658,660],{"class":659},"sD0ED"," $config",[332,662,663],{"class":539},"(",[332,665,667],{"class":666},"swvn1","{\n",[332,669,670,674,676,680,683],{"class":334,"line":404},[332,671,673],{"class":672},"sY_X6","  app",[332,675,663],{"class":666},[332,677,679],{"class":678},"sQgqH","input",[332,681,682],{"class":666},")",[332,684,685],{"class":666}," {\n",[332,687,688,691],{"class":334,"line":462},[332,689,690],{"class":652},"    return",[332,692,685],{"class":666},[332,694,696,700,702,704,707,710,713],{"class":334,"line":695},4,[332,697,699],{"class":698},"squCx","      name",[332,701,436],{"class":666},[332,703,474],{"class":473},[332,705,706],{"class":346},"your-product-slug",[332,708,709],{"class":473},"\"",[332,711,712],{"class":666},",",[332,714,716],{"class":715},"ss7Ak"," \u002F\u002F was \"nuxfire\"\n",[332,718,720],{"class":334,"line":719},5,[332,721,722],{"class":715},"      \u002F\u002F ...\n",[356,724,725],{},[366,726,368],{},[322,728,731],{"className":729,"code":730,"language":374,"meta":327},[372],"Open sst.config.ts. If `name` is still \"nuxfire\", ask the user for their\nown product slug (lowercase, no spaces, short — it's used as a prefix on\nevery Cloudflare resource name) and set it there. Do this before running\nbun run deploy for the first time; never change it after a first deploy\nwithout the user's explicit confirmation, since it recreates every\nCloudflare resource under the new name.\n",[329,732,730],{"__ignoreMap":327},[317,734,736],{"id":735},"next","Next",[356,738,739,741],{},[427,740,35],{"href":36}," — create the API token the rest of setup needs.",[743,744,745],"style",{},"html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sY_X6, html code.shiki .sY_X6{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sQgqH, html code.shiki .sQgqH{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}",{"title":327,"searchDepth":404,"depth":404,"links":747},[748,749,750,751],{"id":319,"depth":404,"text":320},{"id":379,"depth":404,"text":380},{"id":612,"depth":404,"text":613},{"id":735,"depth":404,"text":736},"Install Bun, clone the repo, and install dependencies.","md",{},{"title":31},{"title":31,"description":752},"z3krNdf8-HAf5PkdXtOreFSwGxKWzpTyU4OlZnQEVvo",1790707485287]