[{"data":1,"prerenderedAt":637},["ShallowReactive",2],{"navigation_docs":3,"-apps-application-structure-applications-and-projects":196,"-apps-application-structure-applications-and-projects-surround":632},[4,127,166],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":36},"Kinotic Apps","i-lucide-rocket","\u002Fapps","1.apps",[10,14,18,37,58,91,106,122],{"title":11,"path":12,"stem":13},"Introduction","\u002Fapps\u002Fintroduction","1.apps\u002F1.introduction",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fapps\u002Fquick-start","1.apps\u002F2.quick-start",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":36},"Application Structure","i-lucide-folder-tree","\u002Fapps\u002Fapplication-structure","1.apps\u002F3.application-structure",[24,28,32],{"title":25,"path":26,"stem":27},"Overview","\u002Fapps\u002Fapplication-structure\u002Foverview","1.apps\u002F3.application-structure\u002F1.overview",{"title":29,"path":30,"stem":31},"Applications and Projects","\u002Fapps\u002Fapplication-structure\u002Fapplications-and-projects","1.apps\u002F3.application-structure\u002F2.applications-and-projects",{"title":33,"path":34,"stem":35},"Artifact Types","\u002Fapps\u002Fapplication-structure\u002Fartifact-types","1.apps\u002F3.application-structure\u002F3.artifact-types",false,{"title":38,"icon":39,"path":40,"stem":41,"children":42,"page":36},"Services","i-lucide-network","\u002Fapps\u002Fservices","1.apps\u002F4.services",[43,46,50,54],{"title":25,"path":44,"stem":45},"\u002Fapps\u002Fservices\u002Foverview","1.apps\u002F4.services\u002F1.overview",{"title":47,"path":48,"stem":49},"Publishing Services","\u002Fapps\u002Fservices\u002Fpublishing-services","1.apps\u002F4.services\u002F2.publishing-services",{"title":51,"path":52,"stem":53},"Service Proxies","\u002Fapps\u002Fservices\u002Fservice-proxies","1.apps\u002F4.services\u002F3.service-proxies",{"title":55,"path":56,"stem":57},"Streaming","\u002Fapps\u002Fservices\u002Fstreaming","1.apps\u002F4.services\u002F4.streaming",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":36},"Persistence","i-lucide-database","\u002Fapps\u002Fpersistence","1.apps\u002F5.persistence",[64,67,71,75,79,83,87],{"title":25,"path":65,"stem":66},"\u002Fapps\u002Fpersistence\u002Foverview","1.apps\u002F5.persistence\u002F1.overview",{"title":68,"path":69,"stem":70},"Defining Entities","\u002Fapps\u002Fpersistence\u002Fdefining-entities","1.apps\u002F5.persistence\u002F2.defining-entities",{"title":72,"path":73,"stem":74},"Entity Decorators","\u002Fapps\u002Fpersistence\u002Fentity-decorators","1.apps\u002F5.persistence\u002F3.entity-decorators",{"title":76,"path":77,"stem":78},"CRUD Operations","\u002Fapps\u002Fpersistence\u002Fcrud-operations","1.apps\u002F5.persistence\u002F4.crud-operations",{"title":80,"path":81,"stem":82},"Named Queries","\u002Fapps\u002Fpersistence\u002Fnamed-queries","1.apps\u002F5.persistence\u002F5.named-queries",{"title":84,"path":85,"stem":86},"Multi-Tenancy","\u002Fapps\u002Fpersistence\u002Fmulti-tenancy","1.apps\u002F5.persistence\u002F6.multi-tenancy",{"title":88,"path":89,"stem":90},"Migrations","\u002Fapps\u002Fpersistence\u002Fmigrations","1.apps\u002F5.persistence\u002F7.migrations",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":36},"Security","i-lucide-shield-check","\u002Fapps\u002Fsecurity","1.apps\u002F6.security",[97,101],{"title":98,"path":99,"stem":100,"icon":93},"Access Control","\u002Fapps\u002Fsecurity\u002Faccess-control","1.apps\u002F6.security\u002F1.access-control",{"title":102,"path":103,"stem":104,"icon":105},"Authentication","\u002Fapps\u002Fsecurity\u002Fauthentication","1.apps\u002F6.security\u002F2.authentication","i-lucide-key-round",{"title":107,"icon":108,"path":109,"stem":110,"children":111,"page":36},"Deployment","i-lucide-cloud-upload","\u002Fapps\u002Fdeployment","1.apps\u002F7.deployment",[112,117],{"title":113,"path":114,"stem":115,"icon":116},"Deployment Workflow","\u002Fapps\u002Fdeployment\u002Fworkflow","1.apps\u002F7.deployment\u002F1.workflow","i-lucide-git-branch",{"title":118,"path":119,"stem":120,"icon":121},"Environments","\u002Fapps\u002Fdeployment\u002Fenvironments","1.apps\u002F7.deployment\u002F2.environments","i-lucide-server",{"title":123,"path":124,"stem":125,"icon":126},"CLI Reference","\u002Fapps\u002Fcli-reference","1.apps\u002F8.cli-reference","i-lucide-terminal",{"title":128,"icon":121,"path":129,"stem":130,"children":131,"page":36},"Kinotic OS","\u002Fplatform","2.platform",[132,137,141,146,151,156,161],{"title":133,"path":134,"stem":135,"icon":136},"System Architecture","\u002Fplatform\u002Farchitecture","2.platform\u002F1.architecture","i-lucide-boxes",{"title":138,"path":139,"stem":140,"icon":6},"Deployment Guide","\u002Fplatform\u002Fdeployment-guide","2.platform\u002F2.deployment-guide",{"title":142,"path":143,"stem":144,"icon":145},"Configuration","\u002Fplatform\u002Fconfiguration","2.platform\u002F3.configuration","i-lucide-settings",{"title":147,"path":148,"stem":149,"icon":150},"Organization Management","\u002Fplatform\u002Forganization-management","2.platform\u002F4.organization-management","i-lucide-building-2",{"title":152,"path":153,"stem":154,"icon":155},"System Security","\u002Fplatform\u002Fsystem-security","2.platform\u002F5.system-security","i-lucide-shield",{"title":157,"path":158,"stem":159,"icon":160},"Observability","\u002Fplatform\u002Fobservability","2.platform\u002F6.observability","i-lucide-activity",{"title":162,"path":163,"stem":164,"icon":165},"Contributing","\u002Fplatform\u002Fcontributing","2.platform\u002F7.contributing","i-lucide-git-pull-request",{"title":167,"icon":168,"path":169,"stem":170,"children":171,"page":36},"Reference","i-lucide-book-open","\u002Freference","3.reference",[172,177,181,186,191],{"title":173,"path":174,"stem":175,"icon":176},"Decorators Reference","\u002Freference\u002Fdecorators","3.reference\u002F1.decorators","i-lucide-at-sign",{"title":178,"path":179,"stem":180,"icon":60},"Migration SQL Grammar","\u002Freference\u002Fmigration-sql-grammar","3.reference\u002F2.migration-sql-grammar",{"title":182,"path":183,"stem":184,"icon":185},"ABAC Expression Language","\u002Freference\u002Fabac-expression-language","3.reference\u002F3.abac-expression-language","i-lucide-file-code",{"title":187,"path":188,"stem":189,"icon":190},"CRI Format","\u002Freference\u002Fcri-format","3.reference\u002F4.cri-format","i-lucide-link",{"title":192,"path":193,"stem":194,"icon":195},"SDK Packages","\u002Freference\u002Fsdk-packages","3.reference\u002F5.sdk-packages","i-lucide-package",{"id":197,"title":29,"body":198,"description":625,"extension":626,"links":627,"meta":628,"navigation":629,"path":30,"seo":630,"stem":31,"__hash__":631},"docs\u002F1.apps\u002F3.application-structure\u002F2.applications-and-projects.md",{"type":199,"value":200,"toc":616},"minimark",[201,205,210,213,241,244,248,262,270,280,424,429,483,487,493,545,548,552,555,606,612],[202,203,204],"p",{},"An application is the deployable unit in Kinotic. Projects are the building blocks that make up an application. This page explains how to configure both.",[206,207,209],"h2",{"id":208},"applications","Applications",[202,211,212],{},"Every application has:",[214,215,216,229,235],"ul",{},[217,218,219,223,224,228],"li",{},[220,221,222],"strong",{},"Name"," -- A unique identifier, typically in reverse-domain style (e.g., ",[225,226,227],"code",{},"com.example.inventory",").",[217,230,231,234],{},[220,232,233],{},"Description"," -- A human-readable summary of what the application does.",[217,236,237,240],{},[220,238,239],{},"Optional API support"," -- Applications can optionally expose a GraphQL and\u002For OpenAPI endpoint that aggregates the services published by their projects.",[202,242,243],{},"Applications are created and managed through the Kinotic CLI and the Kinotic OS dashboard.",[206,245,247],{"id":246},"projects","Projects",[202,249,250,251,254,255,258,259,261],{},"A project is a directory with its own ",[225,252,253],{},"package.json"," and a ",[225,256,257],{},".kinotic.json"," configuration file. The CLI uses ",[225,260,257],{}," to understand how the project fits into the broader application.",[263,264,266,267,269],"h3",{"id":265},"the-kinoticjson-file","The ",[225,268,257],{}," File",[202,271,272,273,276,277,279],{},"When you run ",[225,274,275],{},"kinotic init",", a ",[225,278,257],{}," file is created in your project root:",[281,282,287],"pre",{"className":283,"code":284,"language":285,"meta":286,"style":286},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    \"application\": \"my.app\",\n    \"entitiesPaths\": [\n        {\n            \"path\": \"src\u002Fentities\",\n            \"repositoryPath\": \"src\u002Fgenerated\",\n            \"mirrorFolderStructure\": true\n        }\n    ]\n}\n","json","",[225,288,289,298,326,341,347,370,391,406,412,418],{"__ignoreMap":286},[290,291,294],"span",{"class":292,"line":293},"line",1,[290,295,297],{"class":296},"sMK4o","{\n",[290,299,301,304,308,311,314,317,321,323],{"class":292,"line":300},2,[290,302,303],{"class":296},"    \"",[290,305,307],{"class":306},"spNyl","application",[290,309,310],{"class":296},"\"",[290,312,313],{"class":296},":",[290,315,316],{"class":296}," \"",[290,318,320],{"class":319},"sfazB","my.app",[290,322,310],{"class":296},[290,324,325],{"class":296},",\n",[290,327,329,331,334,336,338],{"class":292,"line":328},3,[290,330,303],{"class":296},[290,332,333],{"class":306},"entitiesPaths",[290,335,310],{"class":296},[290,337,313],{"class":296},[290,339,340],{"class":296}," [\n",[290,342,344],{"class":292,"line":343},4,[290,345,346],{"class":296},"        {\n",[290,348,350,353,357,359,361,363,366,368],{"class":292,"line":349},5,[290,351,352],{"class":296},"            \"",[290,354,356],{"class":355},"sBMFI","path",[290,358,310],{"class":296},[290,360,313],{"class":296},[290,362,316],{"class":296},[290,364,365],{"class":319},"src\u002Fentities",[290,367,310],{"class":296},[290,369,325],{"class":296},[290,371,373,375,378,380,382,384,387,389],{"class":292,"line":372},6,[290,374,352],{"class":296},[290,376,377],{"class":355},"repositoryPath",[290,379,310],{"class":296},[290,381,313],{"class":296},[290,383,316],{"class":296},[290,385,386],{"class":319},"src\u002Fgenerated",[290,388,310],{"class":296},[290,390,325],{"class":296},[290,392,394,396,399,401,403],{"class":292,"line":393},7,[290,395,352],{"class":296},[290,397,398],{"class":355},"mirrorFolderStructure",[290,400,310],{"class":296},[290,402,313],{"class":296},[290,404,405],{"class":296}," true\n",[290,407,409],{"class":292,"line":408},8,[290,410,411],{"class":296},"        }\n",[290,413,415],{"class":292,"line":414},9,[290,416,417],{"class":296},"    ]\n",[290,419,421],{"class":292,"line":420},10,[290,422,423],{"class":296},"}\n",[425,426,428],"h4",{"id":427},"fields","Fields",[430,431,432,444],"table",{},[433,434,435],"thead",{},[436,437,438,442],"tr",{},[439,440,441],"th",{},"Field",[439,443,233],{},[445,446,447,457],"tbody",{},[436,448,449,454],{},[450,451,452],"td",{},[225,453,307],{},[450,455,456],{},"The application identifier this project belongs to. Must match the application name registered with Kinotic OS.",[436,458,459,463],{},[450,460,461],{},[225,462,333],{},[450,464,465,466,469,470,472,473,475,476,478,479,482],{},"An array of ",[225,467,468],{},"EntitiesPathConfig"," objects. Each object specifies ",[225,471,356],{}," (the directory containing entity definitions), ",[225,474,377],{}," (where the CLI writes auto-generated repository classes), and ",[225,477,398],{}," (whether to replicate the entity directory structure in the output). The CLI scans these paths when you run ",[225,480,481],{},"kinotic sync",".",[263,484,486],{"id":485},"project-dependencies","Project Dependencies",[202,488,489,490,492],{},"Projects within the same application can depend on each other. For example, a microservice project might import entity types defined in a persistence project. These dependencies are managed through standard ",[225,491,253],{}," -- you add the dependency just like any other Bun package.",[281,494,496],{"className":283,"code":495,"language":285,"meta":286,"style":286},"{\n    \"dependencies\": {\n        \"@my-org\u002Fdata\": \"workspace:*\"\n    }\n}\n",[225,497,498,502,516,536,541],{"__ignoreMap":286},[290,499,500],{"class":292,"line":293},[290,501,297],{"class":296},[290,503,504,506,509,511,513],{"class":292,"line":300},[290,505,303],{"class":296},[290,507,508],{"class":306},"dependencies",[290,510,310],{"class":296},[290,512,313],{"class":296},[290,514,515],{"class":296}," {\n",[290,517,518,521,524,526,528,530,533],{"class":292,"line":328},[290,519,520],{"class":296},"        \"",[290,522,523],{"class":355},"@my-org\u002Fdata",[290,525,310],{"class":296},[290,527,313],{"class":296},[290,529,316],{"class":296},[290,531,532],{"class":319},"workspace:*",[290,534,535],{"class":296},"\"\n",[290,537,538],{"class":292,"line":343},[290,539,540],{"class":296},"    }\n",[290,542,543],{"class":292,"line":349},[290,544,423],{"class":296},[202,546,547],{},"When the application is deployed, the platform resolves these internal dependencies and ensures all projects are available to each other through the Service Directory.",[206,549,551],{"id":550},"typical-setup","Typical Setup",[202,553,554],{},"Most applications start with a single project that handles persistence:",[281,556,560],{"className":557,"code":558,"language":559,"meta":286,"style":286},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","mkdir my-app && cd my-app\nkinotic init --application my.app --entities src\u002Fentities --repository src\u002Fgenerated\n","bash",[225,561,562,580],{"__ignoreMap":286},[290,563,564,567,570,573,577],{"class":292,"line":293},[290,565,566],{"class":355},"mkdir",[290,568,569],{"class":319}," my-app",[290,571,572],{"class":296}," &&",[290,574,576],{"class":575},"s2Zo4"," cd",[290,578,579],{"class":319}," my-app\n",[290,581,582,585,588,591,594,597,600,603],{"class":292,"line":300},[290,583,584],{"class":355},"kinotic",[290,586,587],{"class":319}," init",[290,589,590],{"class":319}," --application",[290,592,593],{"class":319}," my.app",[290,595,596],{"class":319}," --entities",[290,598,599],{"class":319}," src\u002Fentities",[290,601,602],{"class":319}," --repository",[290,604,605],{"class":319}," src\u002Fgenerated\n",[202,607,608,609,611],{},"As the application grows, you can add additional projects for microservices, batch jobs, or frontends -- each with its own ",[225,610,257],{}," pointing to the same application identifier.",[613,614,615],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":286,"searchDepth":300,"depth":300,"links":617},[618,619,624],{"id":208,"depth":300,"text":209},{"id":246,"depth":300,"text":247,"children":620},[621,623],{"id":265,"depth":328,"text":622},"The .kinotic.json File",{"id":485,"depth":328,"text":486},{"id":550,"depth":300,"text":551},"Learn how to configure Kinotic applications and the projects that compose them.","md",null,{},true,{"title":29,"description":625},"VCtRfKc2UCT1Bihk63-QSlAGKZ1zYhJRPk0m_-UtR-s",[633,635],{"title":25,"path":26,"stem":27,"description":634,"children":-1},"Understand how Kinotic apps are organized -- from organizations down to individual artifacts.",{"title":33,"path":34,"stem":35,"description":636,"children":-1},"Learn about the different artifact types a Kinotic project can contribute -- from persistence and microservices to frontends.",1775187763767]