[{"data":1,"prerenderedAt":422},["ShallowReactive",2],{"navigation":3,"page-\u002Fconcepts":105,"surround-\u002Fconcepts":417},[4,17,25,48,63,74,86],{"title":5,"path":6,"stem":7,"children":8,"icon":16,"exact":11},"Getting started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"exact":11,"children":-1},"Introduction",true,{"title":13,"path":14,"stem":15,"exact":11,"children":-1},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":18,"path":19,"stem":20,"children":21,"icon":24,"exact":11},"Concepts","\u002Fconcepts","2.concepts\u002F1.index",[22],{"title":23,"path":19,"stem":20,"exact":11,"children":-1},"The Kuppit model","i-lucide-shapes",{"title":26,"path":27,"stem":28,"children":29,"icon":47,"exact":11},"Deployments","\u002Fdeployments","3.deployments\u002F1.index",[30,31,35,39,43],{"title":26,"path":27,"stem":28,"exact":11,"children":-1},{"title":32,"path":33,"stem":34,"exact":11,"children":-1},"Builds","\u002Fdeployments\u002Fbuilds","3.deployments\u002F2.builds",{"title":36,"path":37,"stem":38,"exact":11,"children":-1},"Redeploy and roll back","\u002Fdeployments\u002Fredeploy-and-rollback","3.deployments\u002F3.redeploy-and-rollback",{"title":40,"path":41,"stem":42,"exact":11,"children":-1},"Logs","\u002Fdeployments\u002Flogs","3.deployments\u002F4.logs",{"title":44,"path":45,"stem":46,"exact":11,"children":-1},"When a deployment fails","\u002Fdeployments\u002Fwhen-a-deployment-fails","3.deployments\u002F5.when-a-deployment-fails","i-lucide-cloud-upload",{"title":49,"path":50,"stem":51,"children":52,"icon":62,"exact":11},"Resources","\u002Fresources","4.resources\u002F1.index",[53,54,58],{"title":49,"path":50,"stem":51,"exact":11,"children":-1},{"title":55,"path":56,"stem":57,"exact":11,"children":-1},"Web services","\u002Fresources\u002Fweb-services","4.resources\u002F2.web-services",{"title":59,"path":60,"stem":61,"exact":11,"children":-1},"PostgreSQL","\u002Fresources\u002Fpostgresql","4.resources\u002F3.postgresql","i-lucide-boxes",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":73,"exact":11},"Configuration","i-lucide-sliders-horizontal","\u002Fconfiguration","5.configuration",[69],{"title":70,"path":71,"stem":72,"exact":11,"children":-1},"Environment variables","\u002Fconfiguration\u002Fvariables","5.configuration\u002F1.variables",false,{"title":75,"path":76,"stem":77,"children":78,"icon":85,"exact":11},"Domains","\u002Fdomains","7.domains\u002F1.index",[79,81],{"title":80,"path":76,"stem":77,"exact":11,"children":-1},"Hostnames",{"title":82,"path":83,"stem":84,"exact":11,"children":-1},"Custom domains","\u002Fdomains\u002Fcustom-domains","7.domains\u002F2.custom-domains","i-lucide-globe",{"title":87,"path":88,"stem":89,"children":90,"icon":104,"exact":11},"Environments","\u002Fenvironments","8.environments\u002F1.index",[91,92,96,100],{"title":87,"path":88,"stem":89,"exact":11,"children":-1},{"title":93,"path":94,"stem":95,"exact":11,"children":-1},"Preview environments","\u002Fenvironments\u002Fpreview-environments","8.environments\u002F2.preview-environments",{"title":97,"path":98,"stem":99,"exact":11,"children":-1},"Named environments","\u002Fenvironments\u002Fnamed-environments","8.environments\u002F3.named-environments",{"title":101,"path":102,"stem":103,"exact":11,"children":-1},"Deleting an environment","\u002Fenvironments\u002Fdeleting-an-environment","8.environments\u002F4.deleting-an-environment","i-lucide-git-branch",{"id":106,"title":23,"badge":107,"body":108,"category":107,"description":411,"draft":73,"extension":412,"links":107,"meta":413,"navigation":11,"path":19,"seo":414,"sitemap":415,"stem":20,"__hash__":416},"docs\u002F2.concepts\u002F1.index.md",null,{"type":109,"value":110,"toc":402},"minimark",[111,115,126,131,134,137,140,148,207,210,213,259,266,269,272,293,303,306,333,340,344,347,353,363,370,396],[112,113,114],"p",{},"Kuppit describes an application as a graph, not as a list of cloud primitives. Four nouns carry the whole model, and everything in the dashboard is one of them.",[116,117,123],"pre",{"className":118,"code":120,"language":121,"meta":122},[119],"language-text","Project  acme\n│\n├── Production\n│     ├── web         Web service\n│     │     ▲\n│     │     │ DATABASE_URL\n│     │     │\n│     └── database    PostgreSQL\n│\n└── pr-42             Preview\n      └── web         Web service\n","text","",[124,125,120],"code",{"__ignoreMap":122},[127,128,130],"h2",{"id":129},"projects","Projects",[112,132,133],{},"A project is a GitHub repository connected to Kuppit. It names the application, remembers which installation grants access to the repository, and holds the environments.",[112,135,136],{},"A project does not deploy, does not hold variables, does not own a hostname and does not produce logs. Those all belong to resources inside an environment. Deleting a project tears down every environment in it.",[127,138,87],{"id":139},"environments",[112,141,142,143,147],{},"An environment is one complete instance of the application: its own resources, its own variables, its own hostnames. Every project has a ",[144,145,146],"strong",{},"Production"," environment, and can have others:",[149,150,151,167],"table",{},[152,153,154],"thead",{},[155,156,157,161,164],"tr",{},[158,159,160],"th",{},"Type",[158,162,163],{},"Created",[158,165,166],{},"Removed",[168,169,170,181,196],"tbody",{},[155,171,172,175,178],{},[173,174,146],"td",{},[173,176,177],{},"With the project.",[173,179,180],{},"With the project. It cannot be deleted on its own.",[155,182,183,186,193],{},[173,184,185],{},"Preview",[173,187,188,189,192],{},"Automatically, when a pull request opens. Named ",[124,190,191],{},"pr-\u003Cnumber>",".",[173,194,195],{},"Automatically, when the pull request closes.",[155,197,198,201,204],{},[173,199,200],{},"Custom",[173,202,203],{},"By you, for staging, QA or anything else long-lived.",[173,205,206],{},"By you.",[112,208,209],{},"Environments are isolated from each other by default. A service in staging cannot see production's database unless you deliberately share it, and a variable set in one environment does not exist in another.",[112,211,212],{},"When you create an environment from an existing one, you decide per resource how the new environment gets its copy:",[149,214,215,225],{},[152,216,217],{},[155,218,219,222],{},[158,220,221],{},"Choice",[158,223,224],{},"What you get",[168,226,227,235,243,251],{},[155,228,229,232],{},[173,230,231],{},"Create new",[173,233,234],{},"An isolated resource of the same shape, with no data in it.",[155,236,237,240],{},[173,238,239],{},"Share",[173,241,242],{},"No new infrastructure. Both environments read and write the same data.",[155,244,245,248],{},[173,246,247],{},"Clone",[173,249,250],{},"An isolated copy of the data at creation. Changes afterwards are independent.",[155,252,253,256],{},[173,254,255],{},"Don't include",[173,257,258],{},"The new environment has no resource for this.",[112,260,261,262,265],{},"Sharing is the one choice that breaks isolation, and the dashboard marks a shared resource with a ",[144,263,264],{},"Shared"," badge wherever it appears.",[127,267,49],{"id":268},"resources",[112,270,271],{},"A resource is something your application runs or depends on. Kuppit has two kinds today:",[273,274,275,286],"ul",{},[276,277,278,279,285],"li",{},"A ",[144,280,281],{},[282,283,284],"a",{"href":56},"web service"," is built from the repository and deployed. It has deployments, logs, variables and domains.",[276,287,278,288,292],{},[144,289,290],{},[282,291,59],{"href":60}," database is provisioned and managed by Kuppit. It exposes its connection details as variables that services can reference.",[112,294,295,296,299,300,192],{},"Resources live inside an environment and are named within it. The name is how other resources address it: a database named ",[124,297,298],{},"database"," is referenced as ",[124,301,302],{},"database.DATABASE_URL",[127,304,26],{"id":305},"deployments",[112,307,308,309,312,313,316,317,320,321,324,325,328,329,332],{},"A deployment turns one commit into a running revision of one web service. It moves through ",[144,310,311],{},"Queued",", ",[144,314,315],{},"Building"," and ",[144,318,319],{},"Deploying"," to ",[144,322,323],{},"Live",", or stops as ",[144,326,327],{},"Failed"," or ",[144,330,331],{},"Cancelled",". A new deployment replaces the previous one only once it is healthy; until then the previous revision keeps serving.",[112,334,335,336,339],{},"A deployment is immutable. It records the commit, the build settings and the variables it was prepared with, so a ",[144,337,338],{},"Previous"," deployment can be rolled back to exactly as it was.",[127,341,343],{"id":342},"the-application-graph","The application graph",[112,345,346],{},"Resources connect to each other through variable references. When a service's variable points at a variable exposed by another resource, that is an edge in the graph:",[116,348,351],{"className":349,"code":350,"language":121,"meta":122},[119],"database ── DATABASE_URL ──▶ web\n",[124,352,350],{"__ignoreMap":122},[112,354,355,356,359,360,362],{},"Read it as: the ",[124,357,358],{},"web"," service references a variable exposed by ",[124,361,298],{},". The arrow follows the data. The database provides the value; the service consumes it. Kuppit resolves every reference when it prepares a deployment, from the target's current state, so a service is always connected to the resource as it is now.",[112,364,365,366,369],{},"The environment's ",[144,367,368],{},"Overview"," draws this graph. Everything else in the model follows from it:",[273,371,372,378,384,390],{},[276,373,374,377],{},[144,375,376],{},"Isolation"," is a property of the graph having no edges between environments.",[276,379,380,383],{},[144,381,382],{},"Sharing"," is an edge that crosses one.",[276,385,386,389],{},[144,387,388],{},"Cloning"," copies a node without copying its edges' targets.",[276,391,278,392,395],{},[144,393,394],{},"generated variable"," is a value a node exposes for others to reference.",[112,397,398,399,401],{},"Read on in ",[282,400,70],{"href":71}," for how references are written and resolved.",{"title":122,"searchDepth":403,"depth":403,"links":404},3,[405,407,408,409,410],{"id":129,"depth":406,"text":130},2,{"id":139,"depth":406,"text":87},{"id":268,"depth":406,"text":49},{"id":305,"depth":406,"text":26},{"id":342,"depth":406,"text":343},"Projects, environments, resources and deployments, and how they connect into one application graph.","md",{},{"title":23,"description":411},{"loc":19},"XN4l6wML9xfpK7Qm6uAM8fCzxjDCyD3QL2nixpxUsJ4",[418,420],{"title":13,"path":14,"stem":15,"description":419,"children":-1},"Deploy a web service from GitHub, add a PostgreSQL database, connect the two, and open the result on a public URL.",{"title":26,"path":27,"stem":28,"description":421,"children":-1},"How one commit becomes a running revision of a web service, what each status means, and what happens to the deployment before it.",1788534985201]