[{"data":1,"prerenderedAt":1376},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":264,"-getting-started-quick-start-surround":1371},[4,24,44,170],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":23},"Quickstart","i-lucide-rocket","\u002Fgetting-started","01.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","01.getting-started\u002F01.introduction",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fgetting-started\u002Fquick-start","01.getting-started\u002F02.quick-start",{"title":19,"path":20,"stem":21,"icon":22},"Local-Only Setup","\u002Fgetting-started\u002Flocal-only-setup","01.getting-started\u002F03.local-only-setup","i-lucide-laptop",false,{"title":25,"icon":26,"path":27,"stem":28,"children":29,"page":23},"Organizations","i-lucide-building","\u002Forganizations","02.organizations",[30,34,39],{"title":31,"path":32,"stem":33,"icon":26},"Overview","\u002Forganizations\u002Foverview","02.organizations\u002F01.overview",{"title":35,"path":36,"stem":37,"icon":38},"Auth Providers","\u002Forganizations\u002Fauthentication-providers","02.organizations\u002F02.authentication-providers","i-lucide-key-round",{"title":40,"path":41,"stem":42,"icon":43},"Okta SSO Setup","\u002Forganizations\u002Fokta-sso-setup","02.organizations\u002F03.okta-sso-setup","i-lucide-shield-check",{"title":45,"icon":46,"path":47,"stem":48,"children":49,"page":23},"Apps","i-lucide-app-window","\u002Fapps","03.apps",[50,67,88,121,130,150,155],{"title":51,"icon":52,"path":53,"stem":54,"children":55,"page":23},"Structure","i-lucide-folder-tree","\u002Fapps\u002Fapplication-structure","03.apps\u002F03.application-structure",[56,59,63],{"title":31,"path":57,"stem":58},"\u002Fapps\u002Fapplication-structure\u002Foverview","03.apps\u002F03.application-structure\u002F01.overview",{"title":60,"path":61,"stem":62},"Applications and Projects","\u002Fapps\u002Fapplication-structure\u002Fapplications-and-projects","03.apps\u002F03.application-structure\u002F02.applications-and-projects",{"title":64,"path":65,"stem":66},"Artifact Types","\u002Fapps\u002Fapplication-structure\u002Fartifact-types","03.apps\u002F03.application-structure\u002F03.artifact-types",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":23},"Services","i-lucide-network","\u002Fapps\u002Fservices","03.apps\u002F04.services",[73,76,80,84],{"title":31,"path":74,"stem":75},"\u002Fapps\u002Fservices\u002Foverview","03.apps\u002F04.services\u002F01.overview",{"title":77,"path":78,"stem":79},"Publishing Services","\u002Fapps\u002Fservices\u002Fpublishing-services","03.apps\u002F04.services\u002F02.publishing-services",{"title":81,"path":82,"stem":83},"Service Proxies","\u002Fapps\u002Fservices\u002Fservice-proxies","03.apps\u002F04.services\u002F03.service-proxies",{"title":85,"path":86,"stem":87},"Streaming","\u002Fapps\u002Fservices\u002Fstreaming","03.apps\u002F04.services\u002F04.streaming",{"title":89,"icon":90,"path":91,"stem":92,"children":93,"page":23},"Persistence","i-lucide-database","\u002Fapps\u002Fpersistence","03.apps\u002F05.persistence",[94,97,101,105,109,113,117],{"title":31,"path":95,"stem":96},"\u002Fapps\u002Fpersistence\u002Foverview","03.apps\u002F05.persistence\u002F01.overview",{"title":98,"path":99,"stem":100},"Defining Entities","\u002Fapps\u002Fpersistence\u002Fdefining-entities","03.apps\u002F05.persistence\u002F02.defining-entities",{"title":102,"path":103,"stem":104},"Entity Decorators","\u002Fapps\u002Fpersistence\u002Fentity-decorators","03.apps\u002F05.persistence\u002F03.entity-decorators",{"title":106,"path":107,"stem":108},"CRUD Operations","\u002Fapps\u002Fpersistence\u002Fcrud-operations","03.apps\u002F05.persistence\u002F04.crud-operations",{"title":110,"path":111,"stem":112},"Named Queries","\u002Fapps\u002Fpersistence\u002Fnamed-queries","03.apps\u002F05.persistence\u002F05.named-queries",{"title":114,"path":115,"stem":116},"Multi-Tenancy","\u002Fapps\u002Fpersistence\u002Fmulti-tenancy","03.apps\u002F05.persistence\u002F06.multi-tenancy",{"title":118,"path":119,"stem":120},"Migrations","\u002Fapps\u002Fpersistence\u002Fmigrations","03.apps\u002F05.persistence\u002F07.migrations",{"title":122,"icon":43,"path":123,"stem":124,"children":125,"page":23},"Security","\u002Fapps\u002Fsecurity","03.apps\u002F06.security",[126],{"title":127,"path":128,"stem":129,"icon":38},"Authentication","\u002Fapps\u002Fsecurity\u002Fauthentication","03.apps\u002F06.security\u002F01.authentication",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":23},"Deployment","i-lucide-cloud-upload","\u002Fapps\u002Fdeployment","03.apps\u002F07.deployment",[136,141,146],{"title":137,"path":138,"stem":139,"icon":140},"Deployment Workflow","\u002Fapps\u002Fdeployment\u002Fworkflow","03.apps\u002F07.deployment\u002F01.workflow","i-lucide-git-branch",{"title":142,"path":143,"stem":144,"icon":145},"Environments","\u002Fapps\u002Fdeployment\u002Fenvironments","03.apps\u002F07.deployment\u002F02.environments","i-lucide-server",{"title":147,"path":148,"stem":149,"icon":6},"Push to Deploy","\u002Fapps\u002Fdeployment\u002Fpush-to-deploy","03.apps\u002F07.deployment\u002F03.push-to-deploy",{"title":151,"path":152,"stem":153,"icon":154},"CLI Reference","\u002Fapps\u002Fcli-reference","03.apps\u002F08.cli-reference","i-lucide-terminal",{"title":156,"icon":157,"path":158,"stem":159,"children":160,"page":23},"Reference","i-lucide-book-open","\u002Fapps\u002Freference","03.apps\u002F09.reference",[161,166],{"title":162,"path":163,"stem":164,"icon":165},"Decorators Reference","\u002Fapps\u002Freference\u002Fdecorators","03.apps\u002F09.reference\u002F01.decorators","i-lucide-at-sign",{"title":167,"path":168,"stem":169,"icon":90},"Migration SQL Grammar","\u002Fapps\u002Freference\u002Fmigration-sql-grammar","03.apps\u002F09.reference\u002F02.migration-sql-grammar",{"title":171,"icon":145,"path":172,"stem":173,"children":174,"page":23},"Kinotic OS","\u002Fplatform","04.platform",[175,180,184,189,193,198,202,207,212,217,222,227,249,254,259],{"title":176,"path":177,"stem":178,"icon":179},"System Architecture","\u002Fplatform\u002Farchitecture","04.platform\u002F01.architecture","i-lucide-boxes",{"title":181,"path":182,"stem":183,"icon":6},"Deployment Guide","\u002Fplatform\u002Fdeployment-guide","04.platform\u002F02.deployment-guide",{"title":185,"path":186,"stem":187,"icon":188},"Configuration","\u002Fplatform\u002Fconfiguration","04.platform\u002F03.configuration","i-lucide-settings",{"title":190,"path":191,"stem":192,"icon":26},"Organization Management","\u002Fplatform\u002Forganization-management","04.platform\u002F04.organization-management",{"title":194,"path":195,"stem":196,"icon":197},"System Security","\u002Fplatform\u002Fsystem-security","04.platform\u002F05.system-security","i-lucide-shield",{"title":199,"path":200,"stem":201,"icon":43},"Defense in Depth","\u002Fplatform\u002Fdefense-in-depth","04.platform\u002F06.defense-in-depth",{"title":203,"path":204,"stem":205,"icon":206},"MCP Tools","\u002Fplatform\u002Fmcp-tools","04.platform\u002F07.mcp-tools","i-lucide-bot",{"title":208,"path":209,"stem":210,"icon":211},"Observability","\u002Fplatform\u002Fobservability","04.platform\u002F08.observability","i-lucide-activity",{"title":213,"path":214,"stem":215,"icon":216},"Contributing","\u002Fplatform\u002Fcontributing","04.platform\u002F09.contributing","i-lucide-git-pull-request",{"title":218,"path":219,"stem":220,"icon":221},"System Migrations","\u002Fplatform\u002Fsystem-migrations","04.platform\u002F10.system-migrations","i-lucide-database-zap",{"title":223,"path":224,"stem":225,"icon":226},"Service Call Liveness","\u002Fplatform\u002Fservice-call-liveness","04.platform\u002F11.service-call-liveness","i-lucide-heart-pulse",{"title":156,"icon":157,"path":228,"stem":229,"children":230,"page":23},"\u002Fplatform\u002Freference","04.platform\u002F12.reference",[231,236,241,245],{"title":232,"path":233,"stem":234,"icon":235},"CRI Format","\u002Fplatform\u002Freference\u002Fcri-format","04.platform\u002F12.reference\u002F01.cri-format","i-lucide-link",{"title":237,"path":238,"stem":239,"icon":240},"Grind Jobs","\u002Fplatform\u002Freference\u002Fgrind-jobs","04.platform\u002F12.reference\u002F02.grind-jobs","i-lucide-workflow",{"title":242,"path":243,"stem":244,"icon":179},"Project Publishing Design","\u002Fplatform\u002Freference\u002Fproject-publishing-design","04.platform\u002F12.reference\u002F03.project-publishing-design",{"title":246,"path":247,"stem":248,"icon":38},"Sign-In Design","\u002Fplatform\u002Freference\u002Fsign-in-design","04.platform\u002F12.reference\u002F04.sign-in-design",{"title":250,"path":251,"stem":252,"icon":253},"Development Server","\u002Fplatform\u002Fdevelopment-server","04.platform\u002F13.development-server","i-lucide-server-cog",{"title":255,"path":256,"stem":257,"icon":258},"Supply Chain Security","\u002Fplatform\u002Fsupply-chain-security","04.platform\u002F14.supply-chain-security","i-lucide-package-check",{"title":260,"path":261,"stem":262,"icon":263},"Enterprise License","\u002Fplatform\u002Fenterprise-license","04.platform\u002F15.enterprise-license","i-lucide-badge-check",{"id":265,"title":15,"body":266,"description":1365,"extension":1366,"links":1367,"meta":1368,"navigation":542,"path":16,"seo":1369,"stem":17,"__hash__":1370},"docs\u002F01.getting-started\u002F02.quick-start.md",{"type":267,"value":268,"toc":1355},"minimark",[269,273,278,301,305,308,311,322,325,366,373,394,397,401,453,468,472,478,708,711,737,741,765,776,818,822,863,866,870,881,1306,1309,1323,1326,1330,1333,1351],[270,271,272],"p",{},"This guide walks you through creating a Kinotic App, defining an entity, generating its repository, and using the repository to read and write data.",[274,275,277],"h2",{"id":276},"prerequisites","Prerequisites",[279,280,281,295],"ul",{},[282,283,284,288,289],"li",{},[285,286,287],"strong",{},"Bun"," -- Install from ",[290,291,292],"a",{"href":292,"rel":293},"https:\u002F\u002Fbun.sh",[294],"nofollow",[282,296,297,300],{},[285,298,299],{},"A Kinotic organization"," you are a member of, with a linked GitHub organization",[274,302,304],{"id":303},"create-your-application","Create Your Application",[270,306,307],{},"Kinotic OS creates your Application and Project and provisions a GitHub repository for it, already scaffolded as a Bun workspace with the Kinotic CLI vendored as a dev dependency -- there is nothing to install globally.",[270,309,310],{},"The fastest way is the official Kinotic plugin, which drives the whole flow conversationally. In Claude Code:",[312,313,318],"pre",{"className":314,"code":316,"language":317},[315],"language-text","\u002Fplugin marketplace add kinotic-ai\u002Fagent-plugin\n\u002Fplugin install kinotic@kinotic\n\u002Fkinotic:new-app my-app\n","text",[319,320,316],"code",{"__ignoreMap":321},"",[270,323,324],{},"In Codex (the CLI, the IDE extension, or the ChatGPT desktop app), install the same plugin and ask Codex to create a Kinotic app:",[312,326,330],{"className":327,"code":328,"language":329,"meta":321,"style":321},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","codex plugin marketplace add kinotic-ai\u002Fagent-plugin\ncodex plugin add kinotic@kinotic\n","bash",[319,331,332,354],{"__ignoreMap":321},[333,334,337,341,345,348,351],"span",{"class":335,"line":336},"line",1,[333,338,340],{"class":339},"sBMFI","codex",[333,342,344],{"class":343},"sfazB"," plugin",[333,346,347],{"class":343}," marketplace",[333,349,350],{"class":343}," add",[333,352,353],{"class":343}," kinotic-ai\u002Fagent-plugin\n",[333,355,357,359,361,363],{"class":335,"line":356},2,[333,358,340],{"class":339},[333,360,344],{"class":343},[333,362,350],{"class":343},[333,364,365],{"class":343}," kinotic@kinotic\n",[270,367,368,369,372],{},"In Grok Build, install it and run ",[319,370,371],{},"\u002Fnew-app my-app",":",[312,374,376],{"className":327,"code":375,"language":329,"meta":321,"style":321},"grok plugin install kinotic-ai\u002Fagent-plugin --trust\n",[319,377,378],{"__ignoreMap":321},[333,379,380,383,385,388,391],{"class":335,"line":336},[333,381,382],{"class":339},"grok",[333,384,344],{"class":343},[333,386,387],{"class":343}," install",[333,389,390],{"class":343}," kinotic-ai\u002Fagent-plugin",[333,392,393],{"class":343}," --trust\n",[270,395,396],{},"You can also create the Application and Project from the Kinotic OS dashboard; either way you end up with a provisioned repository.",[274,398,400],{"id":399},"clone-and-install","Clone and Install",[312,402,404],{"className":327,"code":403,"language":329,"meta":321,"style":321},"git clone \u003Cyour-provisioned-repo> && cd \u003Cyour-repo>\nbun install\n",[319,405,406,445],{"__ignoreMap":321},[333,407,408,411,414,418,421,425,428,431,435,437,440,442],{"class":335,"line":336},[333,409,410],{"class":339},"git",[333,412,413],{"class":343}," clone",[333,415,417],{"class":416},"sMK4o"," \u003C",[333,419,420],{"class":343},"your-provisioned-rep",[333,422,424],{"class":423},"sTEyZ","o",[333,426,427],{"class":416},">",[333,429,430],{"class":416}," &&",[333,432,434],{"class":433},"s2Zo4"," cd",[333,436,417],{"class":416},[333,438,439],{"class":343},"your-rep",[333,441,424],{"class":423},[333,443,444],{"class":416},">\n",[333,446,447,450],{"class":335,"line":356},[333,448,449],{"class":339},"bun",[333,451,452],{"class":343}," install\n",[270,454,455,456,459,460,463,464,467],{},"The repository comes with a ",[319,457,458],{},".config\u002Fkinotic.config.ts"," already wired to your organization, application, and project, pointing entity discovery at ",[319,461,462],{},"packages\u002Fdomain\u002Fmodel"," and repository generation at ",[319,465,466],{},"packages\u002Fdomain\u002Frepositories",".",[274,469,471],{"id":470},"define-an-entity","Define an Entity",[270,473,474,475,372],{},"Create a file at ",[319,476,477],{},"packages\u002Fdomain\u002Fmodel\u002FPerson.ts",[312,479,483],{"className":480,"code":481,"language":482,"meta":321,"style":321},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Entity, AutoGeneratedId, NotNull, Precision, PrecisionType, MultiTenancyType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity(MultiTenancyType.NONE)\nexport class Person {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @NotNull\n    firstName: string = ''\n\n    @NotNull\n    lastName: string = ''\n\n    @Precision(PrecisionType.SHORT)\n    age: number = 0\n}\n","typescript",[319,484,485,538,544,561,577,586,610,615,623,638,643,650,664,669,685,702],{"__ignoreMap":321},[333,486,487,491,494,497,500,503,505,508,510,513,515,518,520,523,526,529,532,535],{"class":335,"line":336},[333,488,490],{"class":489},"s7zQu","import",[333,492,493],{"class":416}," {",[333,495,496],{"class":423}," Entity",[333,498,499],{"class":416},",",[333,501,502],{"class":423}," AutoGeneratedId",[333,504,499],{"class":416},[333,506,507],{"class":423}," NotNull",[333,509,499],{"class":416},[333,511,512],{"class":423}," Precision",[333,514,499],{"class":416},[333,516,517],{"class":423}," PrecisionType",[333,519,499],{"class":416},[333,521,522],{"class":423}," MultiTenancyType",[333,524,525],{"class":416}," }",[333,527,528],{"class":489}," from",[333,530,531],{"class":416}," '",[333,533,534],{"class":343},"@kinotic-ai\u002Fpersistence",[333,536,537],{"class":416},"'\n",[333,539,540],{"class":335,"line":356},[333,541,543],{"emptyLinePlaceholder":542},true,"\n",[333,545,547,550,553,556,558],{"class":335,"line":546},3,[333,548,549],{"class":416},"@",[333,551,552],{"class":433},"Entity",[333,554,555],{"class":423},"(MultiTenancyType",[333,557,467],{"class":416},[333,559,560],{"class":423},"NONE)\n",[333,562,564,567,571,574],{"class":335,"line":563},4,[333,565,566],{"class":489},"export",[333,568,570],{"class":569},"spNyl"," class",[333,572,573],{"class":339}," Person",[333,575,576],{"class":416}," {\n",[333,578,580,583],{"class":335,"line":579},5,[333,581,582],{"class":416},"    @",[333,584,585],{"class":423},"AutoGeneratedId\n",[333,587,589,593,595,598,601,604,607],{"class":335,"line":588},6,[333,590,592],{"class":591},"swJcz","    id",[333,594,372],{"class":416},[333,596,597],{"class":339}," string",[333,599,600],{"class":416}," |",[333,602,603],{"class":339}," null",[333,605,606],{"class":416}," =",[333,608,609],{"class":416}," null\n",[333,611,613],{"class":335,"line":612},7,[333,614,543],{"emptyLinePlaceholder":542},[333,616,618,620],{"class":335,"line":617},8,[333,619,582],{"class":416},[333,621,622],{"class":423},"NotNull\n",[333,624,626,629,631,633,635],{"class":335,"line":625},9,[333,627,628],{"class":591},"    firstName",[333,630,372],{"class":416},[333,632,597],{"class":339},[333,634,606],{"class":416},[333,636,637],{"class":416}," ''\n",[333,639,641],{"class":335,"line":640},10,[333,642,543],{"emptyLinePlaceholder":542},[333,644,646,648],{"class":335,"line":645},11,[333,647,582],{"class":416},[333,649,622],{"class":423},[333,651,653,656,658,660,662],{"class":335,"line":652},12,[333,654,655],{"class":591},"    lastName",[333,657,372],{"class":416},[333,659,597],{"class":339},[333,661,606],{"class":416},[333,663,637],{"class":416},[333,665,667],{"class":335,"line":666},13,[333,668,543],{"emptyLinePlaceholder":542},[333,670,672,674,677,680,682],{"class":335,"line":671},14,[333,673,582],{"class":416},[333,675,676],{"class":433},"Precision",[333,678,679],{"class":423},"(PrecisionType",[333,681,467],{"class":416},[333,683,684],{"class":423},"SHORT)\n",[333,686,688,691,693,696,698],{"class":335,"line":687},15,[333,689,690],{"class":591},"    age",[333,692,372],{"class":416},[333,694,695],{"class":339}," number",[333,697,606],{"class":416},[333,699,701],{"class":700},"sbssI"," 0\n",[333,703,705],{"class":335,"line":704},16,[333,706,707],{"class":416},"}\n",[270,709,710],{},"A few things to note:",[279,712,713,719,725,731],{},[282,714,715,718],{},[319,716,717],{},"@Entity(MultiTenancyType.NONE)"," marks the class as a persisted entity with no multi-tenancy.",[282,720,721,724],{},[319,722,723],{},"@AutoGeneratedId"," tells the platform to generate an ID when one is not provided.",[282,726,727,730],{},[319,728,729],{},"@NotNull"," enforces that a field must have a value.",[282,732,733,736],{},[319,734,735],{},"@Precision(PrecisionType.SHORT)"," tells the platform this number is a short integer, which influences how it is stored and indexed.",[274,738,740],{"id":739},"generate-the-repository","Generate the Repository",[312,742,744],{"className":327,"code":743,"language":329,"meta":321,"style":321},"bun run generate\nbun run type-check\n",[319,745,746,756],{"__ignoreMap":321},[333,747,748,750,753],{"class":335,"line":336},[333,749,449],{"class":339},[333,751,752],{"class":343}," run",[333,754,755],{"class":343}," generate\n",[333,757,758,760,762],{"class":335,"line":356},[333,759,449],{"class":339},[333,761,752],{"class":343},[333,763,764],{"class":343}," type-check\n",[270,766,767,768,771,772,775],{},"This writes ",[319,769,770],{},"packages\u002Fdomain\u002Frepositories\u002FPersonRepository.ts"," (yours to extend) along with a generated base class, and saves the entity's schema under ",[319,773,774],{},".config\u002Fc3\u002F",". Export both from the domain package's entry so other packages can import them:",[312,777,779],{"className":480,"code":778,"language":482,"meta":321,"style":321},"\u002F\u002F packages\u002Fdomain\u002Findex.ts\nexport * from '.\u002Fmodel\u002FPerson.js'\nexport * from '.\u002Frepositories\u002FPersonRepository.js'\n",[319,780,781,787,803],{"__ignoreMap":321},[333,782,783],{"class":335,"line":336},[333,784,786],{"class":785},"sHwdD","\u002F\u002F packages\u002Fdomain\u002Findex.ts\n",[333,788,789,791,794,796,798,801],{"class":335,"line":356},[333,790,566],{"class":489},[333,792,793],{"class":416}," *",[333,795,528],{"class":489},[333,797,531],{"class":416},[333,799,800],{"class":343},".\u002Fmodel\u002FPerson.js",[333,802,537],{"class":416},[333,804,805,807,809,811,813,816],{"class":335,"line":546},[333,806,566],{"class":489},[333,808,793],{"class":416},[333,810,528],{"class":489},[333,812,531],{"class":416},[333,814,815],{"class":343},".\u002Frepositories\u002FPersonRepository.js",[333,817,537],{"class":416},[274,819,821],{"id":820},"push-to-sync","Push to Sync",[312,823,825],{"className":327,"code":824,"language":329,"meta":321,"style":321},"git add . && git commit -m \"Add Person entity\" && git push\n",[319,826,827],{"__ignoreMap":321},[333,828,829,831,833,836,838,841,844,847,850,853,856,858,860],{"class":335,"line":336},[333,830,410],{"class":339},[333,832,350],{"class":343},[333,834,835],{"class":343}," .",[333,837,430],{"class":416},[333,839,840],{"class":339}," git",[333,842,843],{"class":343}," commit",[333,845,846],{"class":343}," -m",[333,848,849],{"class":416}," \"",[333,851,852],{"class":343},"Add Person entity",[333,854,855],{"class":416},"\"",[333,857,430],{"class":416},[333,859,840],{"class":339},[333,861,862],{"class":343}," push\n",[270,864,865],{},"Kinotic OS reads entity definitions from the connected GitHub repository and synchronizes them for you -- publishing the entity creates the backing storage and registers its services. There is nothing to log in to or push from your machine besides git.",[274,867,869],{"id":868},"use-the-generated-repository","Use the Generated Repository",[270,871,872,873,876,877,880],{},"The provisioned repository ships a starter microservice at ",[319,874,875],{},"packages\u002Fmicroservices\u002Fmain"," that already sets the zone and connects. Extend its ",[319,878,879],{},"src\u002Fmain.ts"," to try the repository out:",[312,882,884],{"className":480,"code":883,"language":482,"meta":321,"style":321},"import { Kinotic, Pageable } from '@kinotic-ai\u002Fcore'\nimport { PersistencePlugin } from '@kinotic-ai\u002Fpersistence'\nimport { PersonRepository } from '@my-app\u002Fdomain'\nimport { appZone } from '@kinotic-ai\u002Fmanagement-api'\nimport config from '..\u002F..\u002F..\u002F..\u002F.config\u002Fkinotic.config'\n\nKinotic.use(PersistencePlugin)\nKinotic.zonePrefix = appZone(config.organizationId, config.applicationId)\n\n\u002F\u002F server and credentials resolve from the environment: KINOTIC_SERVER_HOST\u002FPORT\u002FUSE_SSL,\n\u002F\u002F KINOTIC_CLIENT_ID\u002FKINOTIC_CLIENT_SECRET, which a deployment sets to the app server and the\n\u002F\u002F microservice's own machine identity. With nothing set it dials https:\u002F\u002Fapi.kinotic.ai, the org\n\u002F\u002F server, which admits no runtime\nawait Kinotic.connect()\n\nconst personRepository = new PersonRepository()\n\n\u002F\u002F Create a person\nconst person = await personRepository.save({\n    id: null,\n    firstName: 'Jane',\n    lastName: 'Doe',\n    age: 28\n})\n\nconsole.log('Saved:', person)\n\n\u002F\u002F Find all people\nconst page = await personRepository.findAll(Pageable.create(0, 10))\nconsole.log('People:', page.content)\n",[319,885,886,911,930,950,970,987,991,1004,1036,1040,1045,1050,1055,1060,1075,1079,1096,1101,1107,1134,1144,1162,1178,1188,1197,1202,1227,1232,1238,1278],{"__ignoreMap":321},[333,887,888,890,892,895,897,900,902,904,906,909],{"class":335,"line":336},[333,889,490],{"class":489},[333,891,493],{"class":416},[333,893,894],{"class":423}," Kinotic",[333,896,499],{"class":416},[333,898,899],{"class":423}," Pageable",[333,901,525],{"class":416},[333,903,528],{"class":489},[333,905,531],{"class":416},[333,907,908],{"class":343},"@kinotic-ai\u002Fcore",[333,910,537],{"class":416},[333,912,913,915,917,920,922,924,926,928],{"class":335,"line":356},[333,914,490],{"class":489},[333,916,493],{"class":416},[333,918,919],{"class":423}," PersistencePlugin",[333,921,525],{"class":416},[333,923,528],{"class":489},[333,925,531],{"class":416},[333,927,534],{"class":343},[333,929,537],{"class":416},[333,931,932,934,936,939,941,943,945,948],{"class":335,"line":546},[333,933,490],{"class":489},[333,935,493],{"class":416},[333,937,938],{"class":423}," PersonRepository",[333,940,525],{"class":416},[333,942,528],{"class":489},[333,944,531],{"class":416},[333,946,947],{"class":343},"@my-app\u002Fdomain",[333,949,537],{"class":416},[333,951,952,954,956,959,961,963,965,968],{"class":335,"line":563},[333,953,490],{"class":489},[333,955,493],{"class":416},[333,957,958],{"class":423}," appZone",[333,960,525],{"class":416},[333,962,528],{"class":489},[333,964,531],{"class":416},[333,966,967],{"class":343},"@kinotic-ai\u002Fmanagement-api",[333,969,537],{"class":416},[333,971,972,974,977,980,982,985],{"class":335,"line":579},[333,973,490],{"class":489},[333,975,976],{"class":423}," config ",[333,978,979],{"class":489},"from",[333,981,531],{"class":416},[333,983,984],{"class":343},"..\u002F..\u002F..\u002F..\u002F.config\u002Fkinotic.config",[333,986,537],{"class":416},[333,988,989],{"class":335,"line":588},[333,990,543],{"emptyLinePlaceholder":542},[333,992,993,996,998,1001],{"class":335,"line":612},[333,994,995],{"class":423},"Kinotic",[333,997,467],{"class":416},[333,999,1000],{"class":433},"use",[333,1002,1003],{"class":423},"(PersistencePlugin)\n",[333,1005,1006,1008,1010,1013,1016,1018,1021,1023,1026,1028,1031,1033],{"class":335,"line":617},[333,1007,995],{"class":423},[333,1009,467],{"class":416},[333,1011,1012],{"class":423},"zonePrefix ",[333,1014,1015],{"class":416},"=",[333,1017,958],{"class":433},[333,1019,1020],{"class":423},"(config",[333,1022,467],{"class":416},[333,1024,1025],{"class":423},"organizationId",[333,1027,499],{"class":416},[333,1029,1030],{"class":423}," config",[333,1032,467],{"class":416},[333,1034,1035],{"class":423},"applicationId)\n",[333,1037,1038],{"class":335,"line":625},[333,1039,543],{"emptyLinePlaceholder":542},[333,1041,1042],{"class":335,"line":640},[333,1043,1044],{"class":785},"\u002F\u002F server and credentials resolve from the environment: KINOTIC_SERVER_HOST\u002FPORT\u002FUSE_SSL,\n",[333,1046,1047],{"class":335,"line":645},[333,1048,1049],{"class":785},"\u002F\u002F KINOTIC_CLIENT_ID\u002FKINOTIC_CLIENT_SECRET, which a deployment sets to the app server and the\n",[333,1051,1052],{"class":335,"line":652},[333,1053,1054],{"class":785},"\u002F\u002F microservice's own machine identity. With nothing set it dials https:\u002F\u002Fapi.kinotic.ai, the org\n",[333,1056,1057],{"class":335,"line":666},[333,1058,1059],{"class":785},"\u002F\u002F server, which admits no runtime\n",[333,1061,1062,1065,1067,1069,1072],{"class":335,"line":671},[333,1063,1064],{"class":489},"await",[333,1066,894],{"class":423},[333,1068,467],{"class":416},[333,1070,1071],{"class":433},"connect",[333,1073,1074],{"class":423},"()\n",[333,1076,1077],{"class":335,"line":687},[333,1078,543],{"emptyLinePlaceholder":542},[333,1080,1081,1084,1087,1089,1092,1094],{"class":335,"line":704},[333,1082,1083],{"class":569},"const",[333,1085,1086],{"class":423}," personRepository ",[333,1088,1015],{"class":416},[333,1090,1091],{"class":416}," new",[333,1093,938],{"class":433},[333,1095,1074],{"class":423},[333,1097,1099],{"class":335,"line":1098},17,[333,1100,543],{"emptyLinePlaceholder":542},[333,1102,1104],{"class":335,"line":1103},18,[333,1105,1106],{"class":785},"\u002F\u002F Create a person\n",[333,1108,1110,1112,1115,1117,1120,1123,1125,1128,1131],{"class":335,"line":1109},19,[333,1111,1083],{"class":569},[333,1113,1114],{"class":423}," person ",[333,1116,1015],{"class":416},[333,1118,1119],{"class":489}," await",[333,1121,1122],{"class":423}," personRepository",[333,1124,467],{"class":416},[333,1126,1127],{"class":433},"save",[333,1129,1130],{"class":423},"(",[333,1132,1133],{"class":416},"{\n",[333,1135,1137,1139,1141],{"class":335,"line":1136},20,[333,1138,592],{"class":591},[333,1140,372],{"class":416},[333,1142,1143],{"class":416}," null,\n",[333,1145,1147,1149,1151,1153,1156,1159],{"class":335,"line":1146},21,[333,1148,628],{"class":591},[333,1150,372],{"class":416},[333,1152,531],{"class":416},[333,1154,1155],{"class":343},"Jane",[333,1157,1158],{"class":416},"'",[333,1160,1161],{"class":416},",\n",[333,1163,1165,1167,1169,1171,1174,1176],{"class":335,"line":1164},22,[333,1166,655],{"class":591},[333,1168,372],{"class":416},[333,1170,531],{"class":416},[333,1172,1173],{"class":343},"Doe",[333,1175,1158],{"class":416},[333,1177,1161],{"class":416},[333,1179,1181,1183,1185],{"class":335,"line":1180},23,[333,1182,690],{"class":591},[333,1184,372],{"class":416},[333,1186,1187],{"class":700}," 28\n",[333,1189,1191,1194],{"class":335,"line":1190},24,[333,1192,1193],{"class":416},"}",[333,1195,1196],{"class":423},")\n",[333,1198,1200],{"class":335,"line":1199},25,[333,1201,543],{"emptyLinePlaceholder":542},[333,1203,1205,1208,1210,1213,1215,1217,1220,1222,1224],{"class":335,"line":1204},26,[333,1206,1207],{"class":423},"console",[333,1209,467],{"class":416},[333,1211,1212],{"class":433},"log",[333,1214,1130],{"class":423},[333,1216,1158],{"class":416},[333,1218,1219],{"class":343},"Saved:",[333,1221,1158],{"class":416},[333,1223,499],{"class":416},[333,1225,1226],{"class":423}," person)\n",[333,1228,1230],{"class":335,"line":1229},27,[333,1231,543],{"emptyLinePlaceholder":542},[333,1233,1235],{"class":335,"line":1234},28,[333,1236,1237],{"class":785},"\u002F\u002F Find all people\n",[333,1239,1241,1243,1246,1248,1250,1252,1254,1257,1260,1262,1265,1267,1270,1272,1275],{"class":335,"line":1240},29,[333,1242,1083],{"class":569},[333,1244,1245],{"class":423}," page ",[333,1247,1015],{"class":416},[333,1249,1119],{"class":489},[333,1251,1122],{"class":423},[333,1253,467],{"class":416},[333,1255,1256],{"class":433},"findAll",[333,1258,1259],{"class":423},"(Pageable",[333,1261,467],{"class":416},[333,1263,1264],{"class":433},"create",[333,1266,1130],{"class":423},[333,1268,1269],{"class":700},"0",[333,1271,499],{"class":416},[333,1273,1274],{"class":700}," 10",[333,1276,1277],{"class":423},"))\n",[333,1279,1281,1283,1285,1287,1289,1291,1294,1296,1298,1301,1303],{"class":335,"line":1280},30,[333,1282,1207],{"class":423},[333,1284,467],{"class":416},[333,1286,1212],{"class":433},[333,1288,1130],{"class":423},[333,1290,1158],{"class":416},[333,1292,1293],{"class":343},"People:",[333,1295,1158],{"class":416},[333,1297,499],{"class":416},[333,1299,1300],{"class":423}," page",[333,1302,467],{"class":416},[333,1304,1305],{"class":423},"content)\n",[270,1307,1308],{},"Run it with Bun:",[312,1310,1312],{"className":327,"code":1311,"language":329,"meta":321,"style":321},"bun run packages\u002Fmicroservices\u002Fmain\u002Fsrc\u002Fmain.ts\n",[319,1313,1314],{"__ignoreMap":321},[333,1315,1316,1318,1320],{"class":335,"line":336},[333,1317,449],{"class":339},[333,1319,752],{"class":343},[333,1321,1322],{"class":343}," packages\u002Fmicroservices\u002Fmain\u002Fsrc\u002Fmain.ts\n",[270,1324,1325],{},"You should see the saved person printed to the console, followed by a page of results containing that person.",[274,1327,1329],{"id":1328},"whats-next","What's Next?",[270,1331,1332],{},"Now that you have a working application, explore the rest of the documentation:",[279,1334,1335,1341,1346],{},[282,1336,1337,1340],{},[290,1338,1339],{"href":57},"Application Structure"," -- Understand how organizations, applications, projects, and artifacts are organized.",[282,1342,1343,1345],{},[290,1344,68],{"href":74}," -- Learn how to publish and consume services across your application.",[282,1347,1348,1350],{},[290,1349,89],{"href":95}," -- Dive deeper into entity definitions, relationships, and querying.",[1352,1353,1354],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":321,"searchDepth":356,"depth":356,"links":1356},[1357,1358,1359,1360,1361,1362,1363,1364],{"id":276,"depth":356,"text":277},{"id":303,"depth":356,"text":304},{"id":399,"depth":356,"text":400},{"id":470,"depth":356,"text":471},{"id":739,"depth":356,"text":740},{"id":820,"depth":356,"text":821},{"id":868,"depth":356,"text":869},{"id":1328,"depth":356,"text":1329},"Get started building your first Kinotic App -- from a provisioned project to a running CRUD service in under five minutes.","md",null,{},{"title":15,"description":1365},"JamfDyRfNA3ZxeoV6wP-tztB1-oXXEnk53rlMmB7KLc",[1372,1374],{"title":11,"path":12,"stem":13,"description":1373,"children":-1},"Learn what Kinotic is, why it exists, and how it helps developers and AI agents build enterprise-grade applications at scale.",{"title":19,"path":20,"stem":21,"description":1375,"icon":22,"children":-1},"Run Kinotic entirely on your own machine, without a Kinotic OS Cloud organization.",1792934222864]