[{"data":1,"prerenderedAt":853},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Froadmap":176,"\u002Fdocs\u002Froadmap-surround":848},[4,21,86,158],{"title":5,"path":6,"stem":7,"children":8,"status":11,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,16],{"title":10,"path":6,"stem":7,"status":11},"Introduction",null,{"title":13,"path":14,"stem":15,"status":11},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation",{"title":17,"path":18,"stem":19,"status":11},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start",false,{"title":22,"path":23,"stem":24,"children":25,"status":11,"icon":20},"Core Concepts","\u002Fdocs\u002Fcore-concepts","1.docs\u002F2.core-concepts\u002F1.index",[26,28,32,36,46,50,54,58,62,66,70,74,78,82],{"title":27,"path":23,"stem":24,"status":11},"Overview",{"title":29,"path":30,"stem":31,"status":11},"Response","\u002Fdocs\u002Fcore-concepts\u002Fresponse","1.docs\u002F2.core-concepts\u002F10.response",{"title":33,"path":34,"stem":35,"status":11},"Testing","\u002Fdocs\u002Fcore-concepts\u002Ftesting","1.docs\u002F2.core-concepts\u002F12.testing",{"title":37,"path":38,"stem":39,"children":40,"status":11,"icon":20,"defaultOpen":20},"Decorators","\u002Fdocs\u002Fcore-concepts\u002Fdecorators","1.docs\u002F2.core-concepts\u002F13.decorators\u002F1.index",[41,42],{"title":27,"path":38,"stem":39,"status":11},{"title":43,"path":44,"stem":45,"status":11},"Custom","\u002Fdocs\u002Fcore-concepts\u002Fdecorators\u002Fcustom","1.docs\u002F2.core-concepts\u002F13.decorators\u002F2.custom",{"title":47,"path":48,"stem":49,"status":11},"Discovery Service","\u002Fdocs\u002Fcore-concepts\u002Fdiscovery","1.docs\u002F2.core-concepts\u002F14.discovery",{"title":51,"path":52,"stem":53,"status":11},"Application Lifecycle","\u002Fdocs\u002Fcore-concepts\u002Fapp-lifecycle","1.docs\u002F2.core-concepts\u002F15.app-lifecycle",{"title":55,"path":56,"stem":57,"status":11},"Controllers","\u002Fdocs\u002Fcore-concepts\u002Fcontrollers","1.docs\u002F2.core-concepts\u002F2.controllers",{"title":59,"path":60,"stem":61,"status":11},"Routing","\u002Fdocs\u002Fcore-concepts\u002Frouting","1.docs\u002F2.core-concepts\u002F3.routing",{"title":63,"path":64,"stem":65,"status":11},"Providers","\u002Fdocs\u002Fcore-concepts\u002Fproviders","1.docs\u002F2.core-concepts\u002F4.providers",{"title":67,"path":68,"stem":69,"status":11},"Modules","\u002Fdocs\u002Fcore-concepts\u002Fmodules","1.docs\u002F2.core-concepts\u002F5.modules",{"title":71,"path":72,"stem":73,"status":11},"Configuration","\u002Fdocs\u002Fcore-concepts\u002Fconfiguration","1.docs\u002F2.core-concepts\u002F6.configuration",{"title":75,"path":76,"stem":77,"status":11},"Middleware","\u002Fdocs\u002Fcore-concepts\u002Fmiddleware","1.docs\u002F2.core-concepts\u002F7.middleware",{"title":79,"path":80,"stem":81,"status":11},"Guards","\u002Fdocs\u002Fcore-concepts\u002Fguards","1.docs\u002F2.core-concepts\u002F8.guards",{"title":83,"path":84,"stem":85,"status":11},"Exceptions","\u002Fdocs\u002Fcore-concepts\u002Fexceptions","1.docs\u002F2.core-concepts\u002F9.exceptions",{"title":87,"path":88,"stem":89,"children":90,"status":11,"icon":20},"Packages","\u002Fdocs\u002Fpackages","1.docs\u002F3.packages\u002F1.index",[91,92,97,108,112,130,134,138,142,146,150,154],{"title":27,"path":88,"stem":89,"status":11},{"title":93,"path":94,"stem":95,"status":96},"CLI","\u002Fdocs\u002Fpackages\u002Fcli","1.docs\u002F3.packages\u002F10.cli","experimental",{"title":98,"path":99,"stem":100,"children":101,"status":11,"icon":20,"defaultOpen":20},"Events","\u002Fdocs\u002Fpackages\u002Fmessaging","1.docs\u002F3.packages\u002F11.messaging\u002F1.index",[102,104],{"title":27,"path":99,"stem":100,"status":103},"beta",{"title":105,"path":106,"stem":107,"status":96},"Redis","\u002Fdocs\u002Fpackages\u002Fmessaging\u002Fredis","1.docs\u002F3.packages\u002F11.messaging\u002F2.redis",{"title":109,"path":110,"stem":111,"status":103},"Serve Static","\u002Fdocs\u002Fpackages\u002Fserve-static","1.docs\u002F3.packages\u002F12.serve-static",{"title":113,"path":114,"stem":115,"children":116,"status":11,"icon":20,"defaultOpen":20},"Auth","\u002Fdocs\u002Fpackages\u002Fauth","1.docs\u002F3.packages\u002F2.auth\u002F1.index",[117,118,122,126],{"title":27,"path":114,"stem":115,"status":103},{"title":119,"path":120,"stem":121,"status":103},"JWT Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Fjwt","1.docs\u002F3.packages\u002F2.auth\u002F2.jwt",{"title":123,"path":124,"stem":125,"status":103},"Local Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Flocal","1.docs\u002F3.packages\u002F2.auth\u002F3.local",{"title":127,"path":128,"stem":129,"status":96},"OAuth2 Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Foauth2","1.docs\u002F3.packages\u002F2.auth\u002F4.oauth2",{"title":131,"path":132,"stem":133,"status":103},"JWT","\u002Fdocs\u002Fpackages\u002Fjwt","1.docs\u002F3.packages\u002F3.jwt",{"title":135,"path":136,"stem":137,"status":103},"Drizzle","\u002Fdocs\u002Fpackages\u002Fdrizzle","1.docs\u002F3.packages\u002F4.drizzle",{"title":139,"path":140,"stem":141,"status":103},"Papr","\u002Fdocs\u002Fpackages\u002Fpapr","1.docs\u002F3.packages\u002F5.papr",{"title":143,"path":144,"stem":145,"status":103},"Mongoose","\u002Fdocs\u002Fpackages\u002Fmongoose","1.docs\u002F3.packages\u002F6.mongoose",{"title":147,"path":148,"stem":149,"status":103},"Swagger","\u002Fdocs\u002Fpackages\u002Fswagger","1.docs\u002F3.packages\u002F7.swagger",{"title":151,"path":152,"stem":153,"status":103},"Node Server","\u002Fdocs\u002Fpackages\u002Fnode-server","1.docs\u002F3.packages\u002F8.node-server",{"title":155,"path":156,"stem":157,"status":103},"uWS Server","\u002Fdocs\u002Fpackages\u002Fuws-server","1.docs\u002F3.packages\u002F9.uws-server",{"title":159,"path":160,"stem":161,"children":162,"status":11,"icon":20},"Roadmap","\u002Fdocs\u002Froadmap","1.docs\u002F4.roadmap\u002F1.index",[163,164,168,172],{"title":27,"path":160,"stem":161,"status":11},{"title":165,"path":166,"stem":167,"status":11},"Short term (0-3 months)","\u002Fdocs\u002Froadmap\u002Fshort-term","1.docs\u002F4.roadmap\u002F2.short-term",{"title":169,"path":170,"stem":171,"status":11},"Mid term (3-9 months)","\u002Fdocs\u002Froadmap\u002Fmid-term","1.docs\u002F4.roadmap\u002F3.mid-term",{"title":173,"path":174,"stem":175,"status":11},"Long term (9-12+ months)","\u002Fdocs\u002Froadmap\u002Flong-term","1.docs\u002F4.roadmap\u002F4.long-term",{"id":177,"title":27,"body":178,"description":842,"extension":843,"meta":844,"navigation":845,"path":160,"seo":846,"status":11,"stem":161,"__hash__":847},"docs\u002F1.docs\u002F4.roadmap\u002F1.index.md",{"type":179,"value":180,"toc":831},"minimark",[181,185,188,193,196,257,261,264,369,373,380,640,644,647,673,677,683,750,753,757,760,804,808,828],[182,183,184],"p",{},"This page is a living plan. It exists so you can see where MiiaJS is going before you adopt it - and so contributors can pick up something that matches their interest. Items move forward when there is a real reason to do them: an example app needs them, a user reports a gap, or production usage exposes a missing primitive. Nothing on the list is a promise of a date.",[182,186,187],{},"The repo is pre-1.0; the public API is allowed to evolve. After the first stable release this page will split into \"shipped\" and \"planned\" with semver-respecting deprecation cycles for breaking work.",[189,190,192],"h2",{"id":191},"principles-that-dont-move","Principles that don't move",[182,194,195],{},"These are not roadmap items - they are constraints every roadmap item is checked against.",[197,198,199,229,235,245,251],"ul",{},[200,201,202,206,207,211,212,215,216,219,220,219,222,219,225,228],"li",{},[203,204,205],"strong",{},"Web Standards first."," No ",[208,209,210],"code",{},"Express.Request",", no proprietary ",[208,213,214],{},"Reply",". Anything new must compose with ",[208,217,218],{},"Request","\u002F",[208,221,29],{},[208,223,224],{},"Headers",[208,226,227],{},"URL"," and run on Bun, Deno, and Node.",[200,230,231,234],{},[203,232,233],{},"Decorators for declarations, middleware for control flow."," Koa-style middleware replaces interceptors, pipes, and filters. New features should not introduce a fourth lifecycle layer just because NestJS has one.",[200,236,237,240,241,244],{},[203,238,239],{},"Lightweight before clever."," Each package earns its keep. If a feature is one screen of glue code on top of ",[208,242,243],{},"@miiajs\u002Fcore",", it stays in the host app or in an example - not a new package.",[200,246,247,250],{},[203,248,249],{},"Per-app DI container, flat by default."," Module scoping arrives only when there is a concrete user request that flat DI cannot solve.",[200,252,253,256],{},[203,254,255],{},"Real demand over theoretical completeness."," A pattern lands when the second user asks for it, not the first time it sounds nice in a design doc.",[189,258,260],{"id":259},"status-legend","Status legend",[182,262,263],{},"Each package and roadmap item carries a maturity label. Same scale as elsewhere in the docs.",[265,266,267,283],"table",{},[268,269,270],"thead",{},[271,272,273,277,280],"tr",{},[274,275,276],"th",{},"Status",[274,278,279],{},"Meaning",[274,281,282],{},"How it advances",[284,285,286,299,314,338,354],"tbody",{},[271,287,288,293,296],{},[289,290,291],"td",{},[208,292,96],{},[289,294,295],{},"API may break, no proof of correctness. Low or no tests, untested failure modes. Use in side projects, expect churn.",[289,297,298],{},"Real-app validation surfaces edge cases, tests cover them, API stops moving.",[271,300,301,305,311],{},[289,302,303],{},[208,304,103],{},[289,306,307,308],{},"API mostly stable, well-tested internally, but the package has not faced real production load yet. ",[203,309,310],{},"Pre-1.0 default for any package shipped.",[289,312,313],{},"Production deployment, no P0\u002FP1 issues for 60 days, semver freeze.",[271,315,316,321,335],{},[289,317,318],{},[208,319,320],{},"stable",[289,322,323,324,327,328,330,331,334],{},"API frozen with semver guarantees, production-tested at scale, community-validated. ",[203,325,326],{},"Post-1.0 only."," No package can be ",[208,329,320],{}," while the project itself is on ",[208,332,333],{},"0.x",".",[289,336,337],{},"Project ships 1.0; package keeps a clean track record across at least one minor cycle.",[271,339,340,345,348],{},[289,341,342],{},[208,343,344],{},"planned",[289,346,347],{},"On the roadmap. No code yet (or scaffolding only).",[289,349,350,351,353],{},"Design discussion lands; implementation begins; status moves to ",[208,352,96],{}," on first publish.",[271,355,356,361,366],{},[289,357,358],{},[208,359,360],{},"idea",[289,362,363,364,334],{},"Direction we like; needs more demand or design before it becomes ",[208,365,344],{},[289,367,368],{},"A second independent user asks for it, or a design doc resolves the open questions.",[189,370,372],{"id":371},"where-the-project-is-today","Where the project is today",[182,374,375,376,379],{},"Current package state, all on ",[208,377,378],{},"0.1.0",":",[265,381,382,397],{},[268,383,384],{},[271,385,386,389,391,394],{},[274,387,388],{},"Package",[274,390,276],{},[274,392,393],{},"Tests",[274,395,396],{},"Note",[284,398,399,413,431,447,464,481,503,520,536,553,570,590,607,623],{},[271,400,401,405,407,410],{},[289,402,403],{},[208,404,243],{},[289,406,103],{},[289,408,409],{},"174",[289,411,412],{},"Foundation. DI, decorators, router, middleware, exceptions.",[271,414,415,423,425,428],{},[289,416,417],{},[418,419,420],"a",{"href":152},[208,421,422],{},"@miiajs\u002Fnode-server",[289,424,103],{},[289,426,427],{},"28",[289,429,430],{},"Optimized Node.js HTTP adapter.",[271,432,433,440,442,444],{},[289,434,435],{},[418,436,437],{"href":156},[208,438,439],{},"@miiajs\u002Fuws-server",[289,441,103],{},[289,443,427],{},[289,445,446],{},"uWebSockets.js adapter, parallel optimization to node-server.",[271,448,449,456,458,461],{},[289,450,451],{},[418,452,453],{"href":148},[208,454,455],{},"@miiajs\u002Fswagger",[289,457,103],{},[289,459,460],{},"63",[289,462,463],{},"OpenAPI 3.1 + Swagger UI.",[271,465,466,473,475,478],{},[289,467,468],{},[418,469,470],{"href":99},[208,471,472],{},"@miiajs\u002Fmessaging",[289,474,103],{},[289,476,477],{},"54",[289,479,480],{},"Decorator-driven event bus, retry, DLQ, idempotency, named buses.",[271,482,483,488,490,493],{},[289,484,485],{},[208,486,487],{},"@miiajs\u002Fconfig",[289,489,103],{},[289,491,492],{},"16",[289,494,495,496,499,500,334],{},"Zod-validated env via ",[208,497,498],{},"ConfigService"," + ",[208,501,502],{},"ConfigModule.configure",[271,504,505,512,514,517],{},[289,506,507],{},[418,508,509],{"href":140},[208,510,511],{},"@miiajs\u002Fpapr",[289,513,103],{},[289,515,516],{},"19",[289,518,519],{},"MongoDB via Papr.",[271,521,522,529,531,533],{},[289,523,524],{},[418,525,526],{"href":144},[208,527,528],{},"@miiajs\u002Fmongoose",[289,530,103],{},[289,532,516],{},[289,534,535],{},"MongoDB via Mongoose.",[271,537,538,545,547,550],{},[289,539,540],{},[418,541,542],{"href":136},[208,543,544],{},"@miiajs\u002Fdrizzle",[289,546,103],{},[289,548,549],{},"17",[289,551,552],{},"Drizzle ORM (PG\u002FMySQL\u002FSQLite).",[271,554,555,562,564,567],{},[289,556,557],{},[418,558,559],{"href":114},[208,560,561],{},"@miiajs\u002Fauth",[289,563,103],{},[289,565,566],{},"12",[289,568,569],{},"Strategy primitives, AuthGuard. Small surface; critical paths covered.",[271,571,572,579,581,584],{},[289,573,574],{},[418,575,576],{"href":132},[208,577,578],{},"@miiajs\u002Fjwt",[289,580,103],{},[289,582,583],{},"6",[289,585,586,587,334],{},"JWT sign\u002Fverify (jose wrapper). Core logic tested upstream in ",[208,588,589],{},"jose",[271,591,592,599,601,604],{},[289,593,594],{},[418,595,596],{"href":110},[208,597,598],{},"@miiajs\u002Fserve-static",[289,600,103],{},[289,602,603],{},"49",[289,605,606],{},"Static file serving. Full HTTP semantics (Range, conditional GET, HEAD, dotfile guard, SPA fallback).",[271,608,609,616,618,620],{},[289,610,611],{},[418,612,613],{"href":94},[208,614,615],{},"@miiajs\u002Fcli",[289,617,96],{},[289,619,603],{},[289,621,622],{},"Build\u002Fdev\u002Fscaffold CLI. Scaffolds not yet validated by real adoption.",[271,624,625,632,634,637],{},[289,626,627],{},[418,628,629],{"href":106},[208,630,631],{},"@miiajs\u002Fmessaging-redis",[289,633,96],{},[289,635,636],{},"14",[289,638,639],{},"Redis Streams transport + idempotency store. Untested at production load; XAUTOCLAIM crash-recovery test still TODO.",[189,641,643],{"id":642},"roadmap-horizons","Roadmap horizons",[182,645,646],{},"The list is split by realistic timeframes, not strict commitments. Items can move up if real demand surfaces; items can move down if a use case goes cold.",[197,648,649,659,666],{},[200,650,651,655,656,658],{},[418,652,653],{"href":166},[203,654,165],{}," - hardening: validate ",[208,657,96],{}," packages on real apps, file upload, rate limiting, body size limits, server-sent events.",[200,660,661,665],{},[418,662,663],{"href":170},[203,664,169],{}," - production essentials: WebSocket, OpenTelemetry, cache abstraction.",[200,667,668,672],{},[418,669,670],{"href":174},[203,671,173],{}," - ecosystem: NATS transport, GraphQL, request-reply, type-safe RPC client.",[189,674,676],{"id":675},"road-to-10","Road to 1.0",[182,678,679,682],{},[208,680,681],{},"1.0"," is gated by facts on the ground, not a date. Concrete criteria:",[684,685,686,692,701,707,722,732],"ol",{},[200,687,688,691],{},[203,689,690],{},"At least 3 independent production users."," Pre-1.0 friends-of-friends do not count - need teams that can answer \"what broke\" with telemetry, not opinions.",[200,693,694,700],{},[203,695,696,697,699],{},"All ",[208,698,103],{}," packages have zero open P0\u002FP1 API issues for 60 consecutive days."," Bug fixes are fine; design churn is not.",[200,702,703,706],{},[203,704,705],{},"Semver deprecation policy documented and exercised at least once."," A breaking change shipped through a deprecation cycle, removal in the next major.",[200,708,709,712,713,721],{},[203,710,711],{},"Benchmarks frozen."," Stable numbers vs Hono\u002FElysia in the ",[418,714,718],{"href":715,"rel":716},"https:\u002F\u002Fgithub.com\u002Fmiiajs\u002Fbenchmarks",[717],"nofollow",[208,719,720],{},"miiajs\u002Fbenchmarks"," repo, regression CI gate in place.",[200,723,724,727,728,731],{},[203,725,726],{},"API freeze period."," Minimum two months in ",[208,729,730],{},"1.0.0-rc.x"," before final.",[200,733,734,737,738,741,742,745,746,749],{},[203,735,736],{},"Examples coverage."," At least one example app per shipped package. As of 0.1, every package is covered by an example - ",[208,739,740],{},"examples\u002Ffull-app"," exercises core\u002Fconfig\u002Fauth\u002Fjwt\u002Fdrizzle\u002Fswagger\u002Fserve-static, ",[208,743,744],{},"examples\u002Fmessaging-app"," covers messaging + messaging-redis, the dedicated DB examples cover papr\u002Fmongoose, and ",[208,747,748],{},"examples\u002Fuws-app"," covers the uWS adapter. Coverage for new packages must land alongside the package itself.",[182,751,752],{},"Anything not on this list is nice-to-have, not gating.",[189,754,756],{"id":755},"how-items-get-prioritized","How items get prioritized",[182,758,759],{},"Roughly in this order, top wins:",[684,761,762,780,786,792,798],{},[200,763,764,770,771,773,774,776,777,779],{},[203,765,766,767,769],{},"Validate ",[208,768,96],{}," packages on real apps."," ",[208,772,615],{}," and ",[208,775,631],{}," need real-adoption shakedowns before they earn ",[208,778,103],{},". Internal tests are not enough.",[200,781,782,785],{},[203,783,784],{},"Production essentials missing from existing packages."," Multipart, rate limiting, body size limits, SSE. These unblock real apps for real deployments.",[200,787,788,791],{},[203,789,790],{},"High-impact abstractions."," WebSocket, OpenTelemetry, cache - each enables a class of apps but doesn't depend on niche infrastructure.",[200,793,794,797],{},[203,795,796],{},"New transports \u002F integrations."," NATS, GraphQL, RPC client. Niche-r, but each opens a deployment lane.",[200,799,800,803],{},[203,801,802],{},"Polish."," DX improvements, better error messages, examples coverage. Continuous, not project-managed.",[189,805,807],{"id":806},"how-to-influence-the-roadmap","How to influence the roadmap",[197,809,810,816,822],{},[200,811,812,815],{},[203,813,814],{},"Open an issue"," describing the problem (not the solution). Real workloads beat hypothetical ones.",[200,817,818,821],{},[203,819,820],{},"Bring a use case from production."," \"I'd use this if it had X\" is the strongest signal.",[200,823,824,827],{},[203,825,826],{},"Submit a PR."," Pre-1.0 is the cheapest time to land breaking design improvements.",[182,829,830],{},"The roadmap will be revised when meaningful items ship or new ones emerge - probably every couple of months.",{"title":832,"searchDepth":833,"depth":833,"links":834},"",2,[835,836,837,838,839,840,841],{"id":191,"depth":833,"text":192},{"id":259,"depth":833,"text":260},{"id":371,"depth":833,"text":372},{"id":642,"depth":833,"text":643},{"id":675,"depth":833,"text":676},{"id":755,"depth":833,"text":756},{"id":806,"depth":833,"text":807},"Public roadmap for MiiaJS - what is shipped, what is coming, and how items are prioritized.","md",{},true,{"title":27,"description":842},"g7agIVJN2wlryAAFau9IQsioLFfJnUBKlMETyoIBAGA",[849,851],{"title":155,"path":156,"stem":157,"description":850,"children":-1},"uWebSockets.js HTTP server adapter for maximum throughput.",{"title":165,"path":166,"stem":167,"description":852,"children":-1},"Hardening and gap-fills - what gets attention next.",1778575269583]