[{"data":1,"prerenderedAt":489},["ShallowReactive",2],{"navigation_docs":3,"-apps-application-structure-artifact-types":196,"-apps-application-structure-artifact-types-surround":484},[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":33,"body":198,"description":477,"extension":478,"links":479,"meta":480,"navigation":481,"path":34,"seo":482,"stem":35,"__hash__":483},"docs\u002F1.apps\u002F3.application-structure\u002F3.artifact-types.md",{"type":199,"value":200,"toc":467},"minimark",[201,210,214,217,222,246,251,262,265,269,272,276,284,288,299,302,306,309,313,321,325,333,337,340,344,349,353,358,362,365,369,374,378,386,390,393,464],[202,203,204,205,209],"p",{},"Every project in a Kinotic application contributes one or more ",[206,207,208],"strong",{},"artifacts",". An artifact is a typed output that the platform knows how to build, deploy, and manage. This page describes each artifact type and when to use it.",[211,212,59],"h2",{"id":213},"persistence",[202,215,216],{},"The most common starting point. A persistence artifact defines your domain models (entities) and gets auto-generated CRUD services in return.",[202,218,219],{},[206,220,221],{},"What you provide:",[223,224,225],"ul",{},[226,227,228,229,233,234,237,238,241,242,245],"li",{},"Entity classes decorated with ",[230,231,232],"code",{},"@Entity"," and field-level annotations like ",[230,235,236],{},"@NotNull",", ",[230,239,240],{},"@Precision",", and ",[230,243,244],{},"@AutoGeneratedId",".",[202,247,248],{},[206,249,250],{},"What the platform provides:",[223,252,253,256,259],{},[226,254,255],{},"Full CRUD operations (save, find, delete) with pagination and sorting.",[226,257,258],{},"Named queries derived from method naming conventions.",[226,260,261],{},"Automatic storage provisioning and indexing.",[202,263,264],{},"Persistence is typically the first artifact you create because it establishes the data model that the rest of the application builds on.",[211,266,268],{"id":267},"microservice","Microservice",[202,270,271],{},"A microservice artifact is long-running code that executes in a pod or VM. It publishes services that other parts of the application can discover and call through auto-generated proxies.",[202,273,274],{},[206,275,221],{},[223,277,278,281],{},[226,279,280],{},"TypeScript classes that implement your business logic.",[226,282,283],{},"Service interfaces that you want to expose to the rest of the application.",[202,285,286],{},[206,287,250],{},[223,289,290,293,296],{},[226,291,292],{},"Automatic service registration in the Service Directory.",[226,294,295],{},"Auto-generated proxy classes so other projects can call your service with a simple function call.",[226,297,298],{},"Lifecycle management, scaling, and health monitoring.",[202,300,301],{},"Use a microservice when your logic goes beyond simple CRUD -- orchestrating across multiple entities, calling external APIs, or running long-lived workflows.",[211,303,305],{"id":304},"batch-job","Batch Job",[202,307,308],{},"A batch job artifact is code that runs on a schedule. It is ideal for periodic tasks like data aggregation, report generation, cleanup routines, or syncing with external systems.",[202,310,311],{},[206,312,221],{},[223,314,315,318],{},[226,316,317],{},"TypeScript code that performs the job.",[226,319,320],{},"A schedule definition (cron expression or interval).",[202,322,323],{},[206,324,250],{},[223,326,327,330],{},[226,328,329],{},"Scheduled execution with retry and failure handling.",[226,331,332],{},"Logging and observability for each run.",[211,334,336],{"id":335},"ui-component","UI Component",[202,338,339],{},"A UI component artifact produces reusable building blocks that can be shared across multiple frontends within the application. Think of it as an internal component library.",[202,341,342],{},[206,343,221],{},[223,345,346],{},[226,347,348],{},"Reusable UI components packaged for consumption by frontend projects.",[202,350,351],{},[206,352,250],{},[223,354,355],{},[226,356,357],{},"Versioning and distribution within the application.",[211,359,361],{"id":360},"frontend","Frontend",[202,363,364],{},"A frontend artifact is a complete user interface that gets deployed as a static site. It consumes services published by other projects in the application.",[202,366,367],{},[206,368,221],{},[223,370,371],{},[226,372,373],{},"A web application (built with any framework) that compiles to static assets.",[202,375,376],{},[206,377,250],{},[223,379,380,383],{},[226,381,382],{},"Static hosting with CDN distribution.",[226,384,385],{},"Automatic connection to the application's services through the Kinotic client libraries.",[211,387,389],{"id":388},"combining-artifact-types","Combining Artifact Types",[202,391,392],{},"Most real-world applications combine several artifact types. A typical setup might look like this:",[394,395,396,412],"table",{},[397,398,399],"thead",{},[400,401,402,406,409],"tr",{},[403,404,405],"th",{},"Project",[403,407,408],{},"Artifact Type",[403,410,411],{},"Role",[413,414,415,428,440,452],"tbody",{},[400,416,417,423,425],{},[418,419,420],"td",{},[230,421,422],{},"data",[418,424,59],{},[418,426,427],{},"Defines entities and provides auto-generated CRUD services",[400,429,430,435,437],{},[418,431,432],{},[230,433,434],{},"services",[418,436,268],{},[418,438,439],{},"Implements business rules that orchestrate across entities",[400,441,442,447,449],{},[418,443,444],{},[230,445,446],{},"jobs",[418,448,305],{},[418,450,451],{},"Runs nightly data aggregation",[400,453,454,459,461],{},[418,455,456],{},[230,457,458],{},"web",[418,460,361],{},[418,462,463],{},"The main user interface",[202,465,466],{},"Each project is independently developed and versioned, but they all deploy as part of the same application and communicate through the Service Directory.",{"title":468,"searchDepth":469,"depth":469,"links":470},"",2,[471,472,473,474,475,476],{"id":213,"depth":469,"text":59},{"id":267,"depth":469,"text":268},{"id":304,"depth":469,"text":305},{"id":335,"depth":469,"text":336},{"id":360,"depth":469,"text":361},{"id":388,"depth":469,"text":389},"Learn about the different artifact types a Kinotic project can contribute -- from persistence and microservices to frontends.","md",null,{},true,{"title":33,"description":477},"dDAlaopYkhCbmvVm9Gwq3HGiUp4fe4-9-fb1rRp24v8",[485,487],{"title":29,"path":30,"stem":31,"description":486,"children":-1},"Learn how to configure Kinotic applications and the projects that compose them.",{"title":25,"path":44,"stem":45,"description":488,"children":-1},"How services work in Kinotic and the communication patterns they support.",1775187764721]