Roadmap โ
This page outlines the current state of Asena Framework and our plans for future development. Our goal is to build a production-ready, high-performance IoC framework for Bun with enterprise-grade features.
Living Document
This roadmap is updated regularly as we complete features and adjust priorities based on community feedback.
Current Release v0.11.x ยท Stable โ
These features are stable and production-ready in the current release:
New in v0.11 โ
@asenajs/asena 0.11.0, with both adapters at 4.0.0 โ a major, because their context semantics changed. Every official package took a major alongside it, since each now requires core 0.11.
imports- packages hand their components to the server directly, since the scan never walksnode_modules. The first step towards the plugin system below@Value- configuration injection from the environment, withparse,defaultand a loud failure for a required variable that is unsetcreateTestAppwalks the injection closure - a test names its roots; classes reached through@Inject(Class)come along, and a dependency nobody provides fails before the boot instead of mid-bootasena doctor- a read-only check for decorator flags, duplicate package copies, unsatisfied peer ranges and build settings that mangle component namesasena buildno longer rewrites your entry file - it bundles through a temporary wrapper instead, so the entry's formatting rules are gone and its module-level code no longer runs at build time- Unified context semantics (adapter majors) -
getQueryreturnsundefinedwhen absent on both adapters,setResponseHeaderreplaces andappendResponseHeaderappends on both, and SSE messages can carry acommentfor keep-alive pings - Lazy decorator options -
@Database,@Redisand@Otelaccept a thunk, so a service configured from the environment can ship inside a package - The drizzle transaction boot guard - an unwrapped
@Transactionmethod fails the boot instead of silently running with autocommit
New in v0.10 โ
- Component Lifecycle -
@OnStartand@OnStop, a symmetric pair aroundserver.start()andserver.stop().@PostConstructis now a deprecated alias of@OnStart, and start hooks moved out of the component scan intostart()- so a hook sees the finished graph, a@Configfinds its injected components already started, and no request can reach a component whose hook has not run. A hook still cannot publish throughulak: it runs before the transports are wired - Graceful shutdown, completed -
stop()reordered around the new hooks,ulak.dispose()called automatically, the WebSocket transport'sdestroy()actually invoked, and every teardown step contained so one failure cannot strand the rest - Signal handling -
SIGTERM/SIGINT/SIGHUPcallstop()by default; handlers are installed instart()and removed instop(), withforceExitAfterandonUnhandledErroras opt-ins keepAlive- a headless worker starts its loop in@OnStart, returns, and the process stays alive. The run loop no longer has to live in the entry file- Liveness and readiness probes -
{path}/liveand{path}/readynext to the original endpoint, with readiness wired to the lifecycle state so/readyanswers 503 for the whole drain server.resolve<T>(name)- resolve a component without reaching throughcoreContainer.container- A failing hook no longer kills the process -
process.exit(1)is gone; the error propagates andstart()rejects
New in v0.9 โ
- Decorator Inheritance - A route, page, event or message handler declared on a base class is now inherited by the decorated subclass. What changes the behaviour of a request travels with the route; what says where the route lives, or what a class is, stays with the concrete class
onNotFound- An unmatched route is a routing outcome, not an error, so it has its own config hook andonErrornever has to ask which it is looking at- Uniform error handling - Both adapters answer the same 404, 500 and validation envelopes, and the framework's default log fires exactly when its default response does
isHttpException()- Branded exception detection that survives a project resolving two copies of a package, whereinstanceofsilently answers false and turns every deliberate 401/403 into a 500
New in v0.9.2 โ
- One
HttpException- The class moved into@asenajs/asena/adapter, so the same import and the samethrowwork unchanged on both adapters. Each adapter used to declare its own, with different constructors and different response bodies. Hono'sHTTPExceptionis still fully supported, sohono/basic-auth,hono/bearer-auth,hono/jwtand hono's validator keep working - Hono brand parity - The Hono adapter's default response now selects on the brand rather than
instanceof, and its log level is derived from the same status the caller received. Previously a branded exception from a second resolved copy was answered 500 while its log line claimed the status it carried
Core Framework โ
- Dependency Injection Container - Full IoC container with constructor, property, and method injection
- Decorator-Based API - TypeScript decorators for controllers, services, middleware, and more
- Controller System - REST API controllers with route decorators (
@Get,@Post,@Put,@Delete,@Patch,@All,@Route) - Service Layer - Service components with lifecycle management
- Middleware System - Global, pattern-based, controller, and route-level middleware
- Context API - Unified request context abstraction across adapters
- Validation - Zod-based request validation with
@Middleware({ validator: true }) - Static File Serving -
@StaticServewith lifecycle hooks - WebSocket Support - Decorator-based WebSocket with namespace, room management, and multi-pod transport
- Ulak - Central message hub that breaks circular dependencies between services, WebSocket namespaces, and microservice transports
- Configuration Management -
@Configdecorator for server configuration - EventService Support - Built-in native EventService support with
@EventServiceand@On - Scheduled Tasks - Cron-based task scheduling with
@ScheduleandCronRunner - FrontendController - Serve HTML pages using Bun's native HTML imports with
@FrontendControllerand@Page - PostProcessor - Component interception for metadata collection and instance transformation
- SSE/Streaming - Server-Sent Events with
stream(),streamSSE(),streamText() - Duplicate Route Detection - Prevents accidental route conflicts at startup
- Graceful Server Shutdown -
server.stop()with a contained, ordered teardown: cron, adapter,@OnStophooks, microservice transports, Ulak, health endpoint - Microservices - Broker-agnostic messaging with
@MessageController,@MessagePattern(RPC),@EventPattern(events), Ulak client API, and multiple named transports - Headless Mode - Start without an HTTP adapter for message-driven internal services, with optional health endpoint
Testing โ
- mockComponent - Unit-level testing that auto-mocks every
@Injectdependency of a component, including expression injections such asulak() - createTestApp - Boot a full application in a test, replace any registered component with a mock, and assert on real HTTP responses with a fluent chain
- createWebTest - Controller-slice testing: routing, middlewares and validators stay real while every other dependency is auto-mocked
- Unix Socket Dispatch - Run the adapter's real routing pipeline without occupying a TCP port, so parallel suites never collide
Adapters โ
- Ergenecore Adapter - Native Bun adapter with SIMD-accelerated routing and streaming
- Hono Adapter - Hono-based adapter with strict mode (trailing slash), streaming, and middleware compatibility
Official Packages โ
- @asenajs/asena-logger - Structured logging with multiple transports (console, file, Loki)
- @asenajs/asena-drizzle - Drizzle ORM integration with repository pattern
- @asenajs/asena-openapi - Automatic OpenAPI 3.1 spec generation from existing validators
- @asenajs/asena-redis - Redis client with multi-pod WebSocket transport (pub/sub) and production-grade microservice transport (Redis Streams: consumer groups, retry + DLQ, graceful drain)
- @asenajs/asena-kafka - Kafka microservice transport with deterministic topic management, broker-tracked retry attempts, DLQ, and external-topic interop
- @asenajs/asena-otel - OpenTelemetry tracing with automatic instrumentation, including distributed tracing across microservices via
otelMessaging()
Independent Versioning
Adapters and official packages version independently of the core framework. @asenajs/asena v0.11.x is the baseline they all target โ check each package page for its own current version.
CLI Tools โ
- Project Scaffolding -
asena createcommand for project generation - Code Generation - Generate controllers, services, middleware, WebSocket services
- Project Bundling -
asena buildcommand bundles your project based onasena-config.ts, significantly improving performance by reducing cold start time and package size
Planned for v1.0 Planned โ
These features are planned for the v1.0 release and will make Asena enterprise-ready:
Plugin System โ
A powerful plugin architecture allowing third-party extensions.
The first step landed in v0.11:imports closes the gap that made a plugin impossible to write at all โ the component scan never walks node_modules, so a package's components had no way into the container short of the consumer re-declaring them. A package can now export its components and the application hands them in:
imports: [...platformComponents, OtelService]Combined with the lazy decorator options that landed alongside it, a package can also ship a configured @Database, @Redis or @Otel service and still read the consuming application's environment at the right moment.
What imports does not do, and what the plugin system is for:
| Missing | Why it matters |
|---|---|
| A plugin unit | imports takes a flat list of classes. There is no object a package can export that carries its components, its configuration schema and its identity together |
| Lifecycle hooks of its own | A plugin cannot run anything at load time. Only its components have @OnStart / @OnStop |
| Dependency resolution between plugins | Nothing declares "this plugin needs that one", so ordering is the application's problem |
| Configuration management | A plugin's options are whatever its own decorators read. There is no per-plugin config surface and no validation |
| A registry | Discovery is npm search |
Features still planned:
- Plugin lifecycle hooks (
onLoad, plus the plugin-level equivalents of the component@OnStart/@OnStopshipped in v0.10) - Plugin dependency resolution
- Plugin configuration management
- Official plugin registry
Use Cases:
- Authentication plugins (OAuth, JWT, SAML)
- Database adapters (PostgreSQL, MySQL, MongoDB)
- Monitoring and APM integrations
Future Ideas ยท CLI Under discussion โ
These features are under consideration for future CLI releases:
Dev Console (Quarkus-inspired) โ
Interactive development console for debugging and inspection.
Planned Features:
- Web-based dashboard running during development
- Live route inspection and testing
- Request/response logging
- Performance metrics in real-time
Inspiration: Similar to Quarkus Dev UI
Container Visualizer โ
Visual representation of IoC container dependencies.
Planned Features:
- Dependency graph visualization
- Service lifecycle tracking
- Circular dependency detection
Benefits:
- Understanding service dependencies
No Timeline Yet
These CLI features are ideas under discussion and do not have a fixed release timeline.
๐ฏ Release Philosophy โ
Version Strategy โ
- v0.x.x - Pre-1.0 releases with breaking changes possible
- v1.0.0 - First stable release with API stability guarantees
- v1.x.x - Patch and minor releases with backward compatibility
- v2.0.0 - Major release with new features and potential breaking changes
Stability Guarantees โ
| Version | Status | Breaking Changes | Production Use |
|---|---|---|---|
| v0.9.x | Older | Possible | Yes (with caution) |
| v0.10.x | Previous | Possible | Yes (with caution) |
| v0.11.x | Current | Possible | Yes (with caution) |
| v1.0.0+ | Stable | Semantic versioning | Recommended |
Development Priorities โ
- Stability First - Bug fixes and reliability improvements take priority
- Performance - Maintain Bun's performance advantages
- Developer Experience - Clear APIs, great documentation, helpful errors
- Community Feedback - Feature requests and issues guide our roadmap
๐ค Community Involvement โ
How to Contribute โ
We welcome contributions in many forms:
- Code Contributions - Submit PRs for features or bug fixes
- Documentation - Improve guides, add examples, fix typos
- Feature Requests - Open GitHub issues with your ideas
- Bug Reports - Report issues with reproducible examples
- Testing - Test pre-release versions and provide feedback
Feature Request Process โ
- Open a GitHub issue with the
feature-requestlabel - Describe the use case and expected behavior
- Community discussion and feedback
- Core team review and prioritization
- Implementation and release
๐ Release Schedule โ
Current Cycle โ
- v0.7.0 - Released April 2026 (OpenAPI, Redis, OTel, FrontendController, Schedule, PostProcessor, Streaming)
- v0.7.1 - Released April 2026 (
routePatternon Context, FrontendController registration refinements) - v0.8.0 - Released July 2026 (Microservices, Headless mode, Kafka package, test harness, Redis Streams transport, distributed tracing)
- v0.9.0 - Released July 2026 (Decorator inheritance,
onNotFoundhook, uniform error and 404 handling across adapters, brandedHttpException) - v0.9.2 - Released July 2026 (One
HttpExceptionin core, thrown identically on both adapters; the Hono adapter's default response and log level both moved onto the brand) - v0.10.0 - Released July 2026 (Component lifecycle (
@OnStart/@OnStop), reordered graceful shutdown, signal handling,keepAlive, liveness/readiness probes,server.resolve()). Breaking: start hooks moved from the component scan toserver.start() - v0.11.0 - Released August 2026 (
imports,@Value,createTestAppdependency closure,asena doctor, wrapper-basedasena build, lazy decorator options, drizzle transaction boot guard). Breaking: both adapters moved to 4.0.0 for unified context semantics, and every official package took a major to require core 0.11 - v1.0.0 - TBD (Plugin system)
Follow Progress
Track development progress on our GitHub repository and join discussions in GitHub Issues.
๐ฎ Long-Term Vision โ
Our vision for Asena is to become the go-to framework for Bun-based web applications, combining:
- Enterprise-Grade Features - Plugin system, observability, API documentation
- Developer Experience - Intuitive APIs, excellent tooling, comprehensive docs
- Performance - Native Bun speed with minimal overhead
- Ecosystem - Rich collection of official and community packages
Related โ
- Get Started - Start building with Asena today
- CLI Overview - Learn about Asena CLI tools
- GitHub Repository - Contribute to the project
- Examples - See real-world usage examples