Application architecture for Typescript
Your HTTP framework handles HTTP.
Xeno.JS handles the application.
Xeno.JS gives TypeScript applications explicit boundaries for domain logic, use cases, dependencies, request context, and cross-cutting execution.
Keep Fastify, Express, Hono, Vue, or the transport you already use. Build
the application layer underneath it.
Build a large TypeScript application without framework coupling.
Xeno.JS gives you a cohesive set of decoupled primitives designed for long-lived systems, keeping your domain pure and maintainable.
Xeno.JS is for you if...
Recognize the exact inflection point where standard framework conventions start slowing your team down.
Why Xeno.JS
Xeno.JS makes the application architecture explicit.
It gives TypeScript applications clear boundaries for domain logic, use cases, dependencies, request context, and cross-cutting execution.
Keep the HTTP framework, UI framework, and infrastructure you already use. Xeno.JS sits underneath them and gives the application layer a structure that remains visible as the codebase grows.
Zero-Magic Inversion of Control
No decorators or directory scanning. Dependencies are registered explicitly, making application composition visible and deterministic.
Native CQRS & Pipeline
Commands and Queries make application intent explicit. Pipelines keep validation, logging, caching, resilience, and other cross-cutting concerns outside business logic.
One Application Model
Use the same architectural language across Node.js and Vue: domain primitives, application contracts, commands, queries, pipelines, and explicit context.
One architecture. Different responsibilities
Explore Xeno.Js Ecosystem
Dependencies you can see, reason about, and trust.
Xeno.JS uses an explicit functional container with deterministic lifetimes. It catches captive dependencies before they become production memory leaks and preserves compile-time safety without decorator metadata.
- Explicit registrations
- Lifetime safety
- Compile-time contracts
- Framework-independent domain
import { AppBuilder, LOG_LEVEL, TOKENS } from '@xeno-js/core'
export const XenoApp = new AppBuilder<MyRegistry>()
.addLogger((config) => {
config.level = LOG_LEVEL.INFO
config.console = true
})
.addDb((opts, config) => {
opts.connectionString = config.getOrThrow('DATABASE_URL')
})
.addServices((srv) => {
srv.addTransient('MY_SERVICE', (c) => new MyService(c.resolve(TOKENS.LOGGER)))
})
await XenoApp.build()Bring the application model to the browser.
Xeno.JS brings commands, queries, pipelines, context, and explicit application composition into Vue.
The result is one architectural language across backend and frontend, while domain logic remains independent from transports, databases, and UI concerns.
@xeno-js/core
Backend@xeno-js/vue
FrontendHelp keep Xeno independent and sustainable.
Xeno.JS is an independent, MIT-licensed open-source project focused on making application architecture explicit for TypeScript. Your support helps fund the time behind the project: maintaining the core, improving documentation, refining the tooling, and growing the Xeno.JS ecosystem.
Are you using Xeno.JS in production? Reach out directly at xeno-js@outlook.it for support.