[{"data":1,"prerenderedAt":338},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fusage\u002Fprojects":90,"docs-surround-\u002Fdocs\u002Fusage\u002Fprojects":333},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,56,77],{"title":10,"path":11,"stem":12,"children":13,"page":34},"Get Started","\u002Fdocs\u002Fget-started","docs\u002F1.get-started",[14,18,22,26,30],{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fget-started\u002Fintroduction","docs\u002F1.get-started\u002F1.introduction",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fget-started\u002Fconcepts","docs\u002F1.get-started\u002F2.concepts",{"title":23,"path":24,"stem":25},"Installation","\u002Fdocs\u002Fget-started\u002Finstallation","docs\u002F1.get-started\u002F3.installation",{"title":27,"path":28,"stem":29},"Setup","\u002Fdocs\u002Fget-started\u002Fsetup","docs\u002F1.get-started\u002F4.setup",{"title":31,"path":32,"stem":33},"Maintenance","\u002Fdocs\u002Fget-started\u002Fmaintenance","docs\u002F1.get-started\u002F5.maintenance",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Usage","\u002Fdocs\u002Fusage","docs\u002F2.usage",[40,44,48,52],{"title":41,"path":42,"stem":43},"Projects","\u002Fdocs\u002Fusage\u002Fprojects","docs\u002F2.usage\u002F1.projects",{"title":45,"path":46,"stem":47},"Workflows","\u002Fdocs\u002Fusage\u002Fworkflows","docs\u002F2.usage\u002F2.workflows",{"title":49,"path":50,"stem":51},"Triggers","\u002Fdocs\u002Fusage\u002Ftriggers","docs\u002F2.usage\u002F3.triggers",{"title":53,"path":54,"stem":55},"AI Agent","\u002Fdocs\u002Fusage\u002Fagent","docs\u002F2.usage\u002F4.agent",{"title":57,"path":58,"stem":59,"children":60,"page":34},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F3.integrations",[61,65,69,73],{"title":62,"path":63,"stem":64},"GitHub","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F3.integrations\u002F1.github",{"title":66,"path":67,"stem":68},"Jira","\u002Fdocs\u002Fintegrations\u002Fjira","docs\u002F3.integrations\u002F2.jira",{"title":70,"path":71,"stem":72},"Plane","\u002Fdocs\u002Fintegrations\u002Fplane","docs\u002F3.integrations\u002F3.plane",{"title":74,"path":75,"stem":76},"Linear","\u002Fdocs\u002Fintegrations\u002Flinear","docs\u002F3.integrations\u002F4.linear",{"title":78,"path":79,"stem":80,"children":81,"page":34},"Resources","\u002Fdocs\u002Fresources","docs\u002F4.resources",[82,86],{"title":83,"path":84,"stem":85},"Beta Testers","\u002Fdocs\u002Fresources\u002Fbeta-testers","docs\u002F4.resources\u002F1.beta-testers",{"title":87,"path":88,"stem":89},"Troubleshooting","\u002Fdocs\u002Fresources\u002Ftroubleshooting","docs\u002F4.resources\u002F2.troubleshooting",{"id":91,"title":41,"body":92,"description":327,"extension":328,"meta":329,"navigation":330,"path":42,"seo":331,"stem":43,"__hash__":332},"docs_en\u002Fdocs\u002F2.usage\u002F1.projects.md",{"type":93,"value":94,"toc":314},"minimark",[95,99,104,115,161,169,172,200,208,212,215,300,304,307],[96,97,98],"p",{},"A project is a GitHub repository connected to Knecht, together with what it needs to boot: environment variables, a database dump, and a few settings. This page covers what kind of projects work, how to add one, and what you can do with it afterward.",[100,101,103],"h2",{"id":102},"supported-stacks","Supported Stacks",[96,105,106,107,114],{},"Knecht boots projects with ",[108,109,113],"a",{"href":110,"rel":111},"https:\u002F\u002Fddev.com",[112],"nofollow","DDEV",". These are tested on real projects and run in our test suite:",[116,117,118,126,133,140,147,154],"docs-stack-grid",{},[119,120,123],"docs-stack-item",{"icon":121,"to":122},"i-simple-icons-craftcms","https:\u002F\u002Fcraftcms.com",[96,124,125],{},"Craft CMS",[119,127,130],{"icon":128,"to":129},"i-simple-icons-drupal","https:\u002F\u002Fwww.drupal.org",[96,131,132],{},"Drupal 10 and 11",[119,134,137],{"icon":135,"to":136},"i-simple-icons-kirby","https:\u002F\u002Fgetkirby.com",[96,138,139],{},"Kirby",[119,141,144],{"icon":142,"to":143},"i-simple-icons-laravel","https:\u002F\u002Flaravel.com",[96,145,146],{},"Laravel",[119,148,151],{"icon":149,"to":150},"i-simple-icons-typo3","https:\u002F\u002Ftypo3.org",[96,152,153],{},"TYPO3",[119,155,158],{"icon":156,"to":157},"i-simple-icons-php","https:\u002F\u002Fwww.php.net",[96,159,160],{},"Plain PHP with Vite",[96,162,163,164,168],{},"Any other repository is expected to work too. A ",[165,166,167],"code",{},".ddev\u002Fconfig.yaml"," boots from that file as it is, with the framework, PHP version, and database read straight from it.",[96,170,171],{},"Without one, Knecht generates an environment from:",[173,174,175,183,197],"ul",{},[176,177,178,179,182],"li",{},"The PHP version from ",[165,180,181],{},"composer.json",".",[176,184,185,186,189,190,193,194,182],{},"The Node version from ",[165,187,188],{},".nvmrc",", ",[165,191,192],{},"engines.node",", a mise config, or ",[165,195,196],{},".tool-versions",[176,198,199],{},"The package manager from the lockfile.",[201,202,203],"note",{},[96,204,205,206,182],{},"If a project outside the tested list misbehaves, that is a bug worth reporting. One known difference to local DDEV concerns Vite dev servers, which in some setups need one line of config. The cases are collected on ",[108,207,87],{"href":88},[100,209,211],{"id":210},"adding-a-project","Adding a Project",[96,213,214],{},"\"New project\" on the projects page opens a short guided setup. The project exists after the first step, everything after that is optional and can be changed later in the project settings.",[216,217,219,224,227,231,242,260,264,290,294],"steps",{"level":218},"3",[220,221,223],"h3",{"id":222},"connect-the-repository","Connect the Repository",[96,225,226],{},"Pick a repository from those the GitHub App is installed on, and a branch. It defaults to the repository's default branch. Runs check out this branch and open pull requests against it. The branch is fixed per project, another branch can be chosen per run.",[220,228,230],{"id":229},"set-environment-variables","Set Environment Variables",[96,232,233,234,237,238,241],{},"Paste the project's ",[165,235,236],{},".env",", one ",[165,239,240],{},"KEY=value"," per line, or skip and add them later.",[243,244,245],"tip",{},[96,246,247,248,251,252,255,256,259],{},"Values can use ",[165,249,250],{},"$KNECHT_PREVIEW_URL"," and ",[165,253,254],{},"$KNECHT_DEV_SERVER_URL",". Knecht fills them per run, so a variable such as ",[165,257,258],{},"APP_URL=$KNECHT_PREVIEW_URL"," always points at the current preview.",[220,261,263],{"id":262},"import-a-database","Import a Database",[96,265,266,267,189,270,189,273,189,276,189,279,189,282,285,286,289],{},"Upload a dump as ",[165,268,269],{},".sql",[165,271,272],{},".gz",[165,274,275],{},".zip",[165,277,278],{},".bz2",[165,280,281],{},".xz",[165,283,284],{},".tar",", or ",[165,287,288],{},".mysql",". It is imported into the environment on the first boot and stays there for later runs. Without a dump, the project boots with an empty database.",[220,291,293],{"id":292},"boot-and-preview","Boot and Preview",[96,295,296,297,299],{},"The last step offers \"Open project\" and, as long as the bundled ",[165,298,292],{}," workflow exists, \"Boot & preview\". Boot runs that workflow right away: it imports the database, builds the project, and opens a preview so you can confirm the project comes up. Open project skips that and shows the project page, where the same can be started later.",[100,301,303],{"id":302},"working-with-a-project","Working with a Project",[96,305,306],{},"Everything from the guided setup lives in the project settings and can be changed there. \"Settings\" in the top right of the project page opens them. Beyond the setup values, the settings hold the Mentions panel with the starter workflow, a link panel for each connected issue tracker, and \"Persistent folders\" for files that should survive across runs.",[96,308,309],{},[310,311],"img",{"alt":312,"src":313},"The project settings page, with panels for env variables, agent instructions, environment, boot commands, dev server, and database dump","\u002Fassets\u002Fknecht-project-settings.png",{"title":315,"searchDepth":316,"depth":316,"links":317},"",2,[318,319,326],{"id":102,"depth":316,"text":103},{"id":210,"depth":316,"text":211,"children":320},[321,323,324,325],{"id":222,"depth":322,"text":223},3,{"id":229,"depth":322,"text":230},{"id":262,"depth":322,"text":263},{"id":292,"depth":322,"text":293},{"id":302,"depth":316,"text":303},"Add a project, run it through Knecht, and manage it afterward.","md",{},true,{"title":41,"description":327},"dp8DwMDPDFeTjIJXD-jaoKyQeDkJwbLT3nIKpbdQnSw",[334,336],{"title":31,"path":32,"stem":33,"description":335,"children":-1},"Keep a self-hosted instance up to date and backed up.",{"title":45,"path":46,"stem":47,"description":337,"children":-1},"Build, trigger, and test workflows for your projects.",1790265015736]