[{"data":1,"prerenderedAt":664},["ShallowReactive",2],{"navigation":3,"\u002Fcore\u002Fruntime":173,"\u002Fcore\u002Fruntime-surround":659},[4,9,14,19,46,96,109,127,148],{"title":5,"path":6,"stem":7,"icon":8},"Introduction","\u002Fintroduction","01.introduction","i-lucide-info",{"title":10,"path":11,"stem":12,"icon":13},"Installation","\u002Finstallation","02.installation","i-lucide-circle-arrow-down",{"title":15,"path":16,"stem":17,"icon":18},"First App","\u002Ffirst-app","03.first-app","i-lucide-play",{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":45},"Core","i-lucide-container","\u002Fcore","10.core",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Architecture","\u002Fcore\u002Farchitecture","10.core\u002F1.architecture","i-lucide-folder-tree",{"title":31,"path":32,"stem":33,"icon":34},"Concepts","\u002Fcore\u002Fconcepts","10.core\u002F2.concepts","i-lucide-lightbulb",{"title":36,"path":37,"stem":38,"icon":39},"Runtime","\u002Fcore\u002Fruntime","10.core\u002F3.runtime","i-lucide-cpu",{"title":41,"path":42,"stem":43,"icon":44},"Modules","\u002Fcore\u002Fmodules","10.core\u002F4.modules","i-lucide-puzzle",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Server","i-simple-icons-nestjs","\u002Fnest","11.nest",[52,55,72,77,82,87,92],{"title":5,"path":53,"stem":54,"icon":8},"\u002Fnest\u002Fintroduction","11.nest\u002F1.introduction",{"title":56,"path":57,"stem":58,"children":59,"icon":71},"Database","\u002Fnest\u002Fdatabase","11.nest\u002F2.database\u002F1.index",[60,61,66],{"title":56,"path":57,"stem":58,"icon":8},{"title":62,"path":63,"stem":64,"icon":65},"Models","\u002Fnest\u002Fdatabase\u002Fmodels","11.nest\u002F2.database\u002F2.models","i-lucide-database-zap",{"title":67,"path":68,"stem":69,"icon":70},"Plugins","\u002Fnest\u002Fdatabase\u002Fplugins","11.nest\u002F2.database\u002F3.plugins","i-lucide-plug","i-lucide-database",{"title":73,"path":74,"stem":75,"icon":76},"Controllers","\u002Fnest\u002Fcontrollers","11.nest\u002F3.controllers","i-lucide-route",{"title":78,"path":79,"stem":80,"icon":81},"Guards","\u002Fnest\u002Fguards","11.nest\u002F4.guards","i-lucide-shield-check",{"title":83,"path":84,"stem":85,"icon":86},"Services","\u002Fnest\u002Fservices","11.nest\u002F5.services","i-lucide-layers",{"title":88,"path":89,"stem":90,"icon":91},"Locales","\u002Fnest\u002Flocales","11.nest\u002F6.locales","i-lucide-languages",{"title":93,"path":94,"stem":95},"Env","\u002Fnest\u002Fenv","11.nest\u002F7.env",{"title":97,"icon":98,"path":99,"stem":100,"children":101,"page":45},"Client","i-simple-icons-nuxt","\u002Fnuxt","12.nuxt",[102,105],{"title":5,"path":103,"stem":104},"\u002Fnuxt\u002Fintroduction","12.nuxt\u002F1.introduction",{"title":106,"path":107,"stem":108},"Coming Soon","\u002Fnuxt\u002Fcoming-soon","12.nuxt\u002F2.coming-soon",{"title":110,"icon":111,"path":112,"stem":113,"children":114,"page":45},"Configuration","i-lucide-settings","\u002Fconfiguration","13.configuration",[115,119,123],{"title":116,"path":117,"stem":118},"Opensya Config","\u002Fconfiguration\u002Fopensya-config","13.configuration\u002F1.opensya-config",{"title":120,"path":121,"stem":122},"Runtime Config","\u002Fconfiguration\u002Fruntime-config","13.configuration\u002F2.runtime-config",{"title":124,"path":125,"stem":126},"Server Config","\u002Fconfiguration\u002Fserver-config","13.configuration\u002F3.server-config",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":45},"Deployment","i-lucide-cloud","\u002Fdeployment","14.deployment",[133,136,140,144],{"title":5,"path":134,"stem":135},"\u002Fdeployment\u002Fintroduction","14.deployment\u002F1.introduction",{"title":137,"path":138,"stem":139},"Docker","\u002Fdeployment\u002Fdocker","14.deployment\u002F2.docker",{"title":141,"path":142,"stem":143},"Production","\u002Fdeployment\u002Fproduction","14.deployment\u002F3.production",{"title":145,"path":146,"stem":147},"Self Hosting","\u002Fdeployment\u002Fself-hosting","14.deployment\u002F4.self-hosting",{"title":149,"icon":150,"path":151,"stem":152,"children":153,"page":45},"Advanced","i-lucide-plus","\u002Fadvanced","15.advanced",[154,158,162,165,169],{"title":155,"path":156,"stem":157},"Internals","\u002Fadvanced\u002Finternals","15.advanced\u002F1.internals",{"title":159,"path":160,"stem":161},"Compiler","\u002Fadvanced\u002Fcompiler","15.advanced\u002F2.compiler",{"title":41,"path":163,"stem":164},"\u002Fadvanced\u002Fmodules","15.advanced\u002F3.modules",{"title":166,"path":167,"stem":168},"Globals","\u002Fadvanced\u002Fglobals","15.advanced\u002F4.globals",{"title":170,"path":171,"stem":172},"Lifecycle","\u002Fadvanced\u002Flifecycle","15.advanced\u002F5.lifecycle",{"id":174,"title":36,"body":175,"description":652,"extension":653,"links":654,"meta":655,"navigation":656,"path":37,"seo":657,"stem":38,"__hash__":658},"docs\u002F10.core\u002F3.runtime.md",{"type":176,"value":177,"toc":642},"minimark",[178,182,186,189,194,197,200,203,224,232,236,239,287,290,313,316,320,323,326,397,400,404,407,410,435,438,458,461,468,471,473,490,494,497,558,561,565,568,571,574,588,592,595,625,629,632,635,638],[179,180,36],"h1",{"id":181},"runtime",[183,184,185],"p",{},"At the core of OpenSya lies a convention-driven runtime system responsible for discovering, orchestrating and bootstrapping applications automatically.",[183,187,188],{},"The runtime is designed to minimize manual configuration while keeping applications modular and scalable.",[190,191,193],"h2",{"id":192},"runtime-philosophy","Runtime Philosophy",[183,195,196],{},"OpenSya relies on runtime orchestration instead of boilerplate generation.",[183,198,199],{},"Rather than generating static code templates, the runtime continuously discovers and orchestrates the application from the filesystem structure.",[183,201,202],{},"This includes:",[204,205,206,209,211,214,216,218,221],"ul",{},[207,208,73],"li",{},[207,210,83],{},[207,212,213],{},"Database models",[207,215,67],{},[207,217,78],{},[207,219,220],{},"Runtime hooks",[207,222,223],{},"Generated typings",[225,226,229],"callout",{"color":227,"icon":228},"primary","i-lucide-box",[183,230,231],{},"The filesystem acts as the runtime registry for the entire application.",[190,233,235],{"id":234},"backend-runtime","Backend Runtime",[183,237,238],{},"The backend runtime is powered by NestJS and heavily orchestrated by OpenSya.",[240,241,246],"pre",{"className":242,"code":243,"filename":235,"language":244,"meta":245,"style":245},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","server\u002F\n├── controllers\u002F\n├── services\u002F\n├── database\u002F\n├── guards\u002F\n└── locales\u002F\n","txt","",[247,248,249,257,263,269,275,281],"code",{"__ignoreMap":245},[250,251,254],"span",{"class":252,"line":253},"line",1,[250,255,256],{},"server\u002F\n",[250,258,260],{"class":252,"line":259},2,[250,261,262],{},"├── controllers\u002F\n",[250,264,266],{"class":252,"line":265},3,[250,267,268],{},"├── services\u002F\n",[250,270,272],{"class":252,"line":271},4,[250,273,274],{},"├── database\u002F\n",[250,276,278],{"class":252,"line":277},5,[250,279,280],{},"├── guards\u002F\n",[250,282,284],{"class":252,"line":283},6,[250,285,286],{},"└── locales\u002F\n",[183,288,289],{},"OpenSya automatically:",[204,291,292,295,298,301,304,307,310],{},[207,293,294],{},"Discovers routes",[207,296,297],{},"Registers services",[207,299,300],{},"Loads database models",[207,302,303],{},"Initializes plugins",[207,305,306],{},"Registers guards",[207,308,309],{},"Generates typings",[207,311,312],{},"Bootstraps the NestJS application",[183,314,315],{},"Developers focus on business logic while OpenSya handles runtime orchestration.",[190,317,319],{"id":318},"runtime-discovery","Runtime Discovery",[183,321,322],{},"The backend runtime continuously scans the filesystem to discover application definitions.",[183,324,325],{},"Examples:",[327,328,329,343],"table",{},[330,331,332],"thead",{},[333,334,335,340],"tr",{},[336,337,339],"th",{"align":338},"left","Directory",[336,341,342],{"align":338},"Runtime Responsibility",[344,345,346,357,367,377,387],"tbody",{},[333,347,348,354],{},[349,350,351],"td",{},[247,352,353],{},"server\u002Fcontrollers",[349,355,356],{},"HTTP route discovery",[333,358,359,364],{},[349,360,361],{},[247,362,363],{},"server\u002Fservices",[349,365,366],{},"Business service registration",[333,368,369,374],{},[349,370,371],{},[247,372,373],{},"server\u002Fdatabase\u002Fmodels",[349,375,376],{},"Database model discovery",[333,378,379,384],{},[349,380,381],{},[247,382,383],{},"server\u002Fdatabase\u002Fplugins",[349,385,386],{},"Database plugin loading",[333,388,389,394],{},[349,390,391],{},[247,392,393],{},"server\u002Fguards",[349,395,396],{},"Access control registration",[183,398,399],{},"The runtime transforms these discovered definitions into a fully orchestrated NestJS application.",[190,401,403],{"id":402},"frontend-runtime","Frontend Runtime",[183,405,406],{},"The frontend runtime is powered by Nuxt.",[183,408,409],{},"Unlike the backend runtime, most frontend orchestration is already handled natively by Nuxt itself.",[240,411,413],{"className":242,"code":412,"filename":403,"language":244,"meta":245,"style":245},"client\u002F\n├── pages\u002F\n├── components\u002F\n└── plugins\u002F\n",[247,414,415,420,425,430],{"__ignoreMap":245},[250,416,417],{"class":252,"line":253},[250,418,419],{},"client\u002F\n",[250,421,422],{"class":252,"line":259},[250,423,424],{},"├── pages\u002F\n",[250,426,427],{"class":252,"line":265},[250,428,429],{},"├── components\u002F\n",[250,431,432],{"class":252,"line":271},[250,433,434],{},"└── plugins\u002F\n",[183,436,437],{},"Nuxt already provides:",[204,439,440,443,446,449,452,455],{},[207,441,442],{},"File-based routing",[207,444,445],{},"Component auto-imports",[207,447,448],{},"Plugin loading",[207,450,451],{},"Runtime orchestration",[207,453,454],{},"Module ecosystem",[207,456,457],{},"Frontend build system",[183,459,460],{},"Because of this, OpenSya intentionally keeps the frontend runtime lightweight.",[225,462,465],{"color":463,"icon":464},"info","i-lucide-monitor-smartphone",[183,466,467],{},"The frontend runtime is mostly delegated to Nuxt itself.",[183,469,470],{},"OpenSya only adds a thin layer of shared conventions and runtime integrations on top of Nuxt.",[183,472,202],{},[204,474,475,478,481,484,487],{},[207,476,477],{},"Shared runtime conventions",[207,479,480],{},"Shared typings",[207,482,483],{},"Runtime integrations",[207,485,486],{},"OpenSya-specific configuration",[207,488,489],{},"Fullstack interoperability",[190,491,493],{"id":492},"runtime-lifecycle","Runtime Lifecycle",[183,495,496],{},"The backend runtime generally follows this lifecycle:",[240,498,500],{"className":242,"code":499,"filename":170,"language":244,"meta":245,"style":245},"Filesystem Discovery\n        ↓\nRuntime Registration\n        ↓\nPlugin Initialization\n        ↓\nType Generation\n        ↓\nApplication Bootstrap\n        ↓\nRuntime Execution\n",[247,501,502,507,512,517,521,526,530,536,541,547,552],{"__ignoreMap":245},[250,503,504],{"class":252,"line":253},[250,505,506],{},"Filesystem Discovery\n",[250,508,509],{"class":252,"line":259},[250,510,511],{},"        ↓\n",[250,513,514],{"class":252,"line":265},[250,515,516],{},"Runtime Registration\n",[250,518,519],{"class":252,"line":271},[250,520,511],{},[250,522,523],{"class":252,"line":277},[250,524,525],{},"Plugin Initialization\n",[250,527,528],{"class":252,"line":283},[250,529,511],{},[250,531,533],{"class":252,"line":532},7,[250,534,535],{},"Type Generation\n",[250,537,539],{"class":252,"line":538},8,[250,540,511],{},[250,542,544],{"class":252,"line":543},9,[250,545,546],{},"Application Bootstrap\n",[250,548,550],{"class":252,"line":549},10,[250,551,511],{},[250,553,555],{"class":252,"line":554},11,[250,556,557],{},"Runtime Execution\n",[183,559,560],{},"This orchestration process happens automatically during application startup.",[190,562,564],{"id":563},"generated-typings","Generated Typings",[183,566,567],{},"Generated typings are deeply integrated into the runtime system.",[183,569,570],{},"The runtime uses discovered filesystem definitions to generate strongly typed contracts across the application.",[183,572,573],{},"This provides:",[204,575,576,579,582,585],{},[207,577,578],{},"Strong type safety",[207,580,581],{},"Shared runtime contracts",[207,583,584],{},"Better IDE autocompletion",[207,586,587],{},"Consistent developer experience",[190,589,591],{"id":590},"runtime-goals","Runtime Goals",[183,593,594],{},"The OpenSya runtime is designed around four main goals:",[596,597,598,605,611,618],"card-group",{},[599,600,602],"card",{"icon":29,"title":601},"Convention Driven",[183,603,604],{},"Reduce configuration complexity through filesystem conventions.",[599,606,608],{"icon":228,"title":607},"Modular",[183,609,610],{},"Keep applications modular and independently scalable.",[599,612,615],{"icon":613,"title":614},"i-lucide-badge-check","Typed",[183,616,617],{},"Generate strong typings automatically from runtime definitions.",[599,619,622],{"icon":620,"title":621},"i-lucide-server-cog","Fullstack",[183,623,624],{},"Create a unified backend and frontend developer experience.",[190,626,628],{"id":627},"philosophy","Philosophy",[183,630,631],{},"OpenSya does not try to replace NestJS or Nuxt.",[183,633,634],{},"Instead, it orchestrates and extends them through conventions, runtime discovery and generated typings.",[183,636,637],{},"This allows OpenSya to provide a scalable infrastructure layer for modern recruitment and business platforms while still benefiting from the ecosystems of both frameworks.",[639,640,641],"style",{},"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);}",{"title":245,"searchDepth":253,"depth":259,"links":643},[644,645,646,647,648,649,650,651],{"id":192,"depth":259,"text":193},{"id":234,"depth":259,"text":235},{"id":318,"depth":259,"text":319},{"id":402,"depth":259,"text":403},{"id":492,"depth":259,"text":493},{"id":563,"depth":259,"text":564},{"id":590,"depth":259,"text":591},{"id":627,"depth":259,"text":628},"Understand how the OpenSya runtime orchestrates backend and frontend applications.","md",null,{},{"icon":39},{"title":36,"description":652},"zqVRPqiPZq3_HPbz6BNC-UcvHAUMZmEoQOUStAy5ChE",[660,662],{"title":31,"path":32,"stem":33,"description":661,"icon":34,"children":-1},"Learn the core concepts behind the OpenSya runtime architecture.",{"title":41,"path":42,"stem":43,"description":663,"icon":44,"children":-1},"Learn how OpenSya modules extend and orchestrate recruitment and business infrastructures.",1779143767266]