Urgent.News

What's breaking now, across thousands of outlets.

Tech

Why I Created Xeno.JS: Architectural Rigor and Zero Infrastructure Constraints

Introduction How many times have you eagerly started a new TypeScript project, picked the trendy HTTP framework of the month, only to find yourself six months later with a chaotic monolith—hopelessly coupled to a specific library and crushed by unsustainable technical debt? The problem in modern TypeScript development isn’t writing the first few lines of code. The problem is what happens when the…

For many developers, the excitement of starting a new TypeScript project often gives way to the challenge of scaling the application without accumulating unsustainable technical debt. The issue isn't the initial coding, but rather the growth and complexity that ensues. As businesses expand, domain logic often mixes with infrastructure details, leading to bloated HTTP controllers and convoluted services that rely on monolithic libraries.

Dependency injection, which aims to simplify management of dependencies, can become a tangled mess of opaque decorators, making it difficult to comprehend the underlying workings. This creates a dilemma when requirements change, such as migrating from a traditional Node.js server to a Serverless architecture or Edge Functions, as the chosen framework may not be compatible with lightweight V8 Edge engines, forcing a complete rewrite of the application.

The current options leave developers in a frustrating position: edge-focused micro-frameworks provide speed and lightness but offer no architectural structure, requiring reinvention of validation, CQRS, asynchronous contexts, and clean-code patterns; or heavy enterprise frameworks provide structure but tie the application to a rigid, slow Node.js infrastructure.

After experiencing these constraints repeatedly, the creator of Xeno.JS felt it was time to develop an alternative that offered both architectural rigor and zero infrastructure constraints.

Xeno.JS is designed to be an application architecture framework for TypeScript that merges the clean and mature patterns of .NET/C# with the modern, lightweight nature of JavaScript. To address the problems of technical debt, Xeno.JS implements several key features: it strictly separates domain logic and application use cases from infrastructure, thus maintaining clean separation of boundaries.

It employs an explicit, zero-magic Dependency Injection system that uses explicit factories and strict lifecycles (singleton, scoped, transient) with native checks against circular and captive dependencies. Furthermore, Xeno.JS is runtime-agnostic, meaning it is lightweight enough to run seamlessly on command-line applications, traditional HTTP servers, or native Edge Functions without heavy reliance on Node.js dependencies.

Lastly, its composable module architecture allows developers to include only the necessary components (such as Database, Redis Cache, Auth, Security pipelines) through an AppBuilder, ensuring the project isn’t weighed down by unnecessary dependencies.

The creator of Xeno.JS is seeking community support and feedback. By trying Xeno.JS in next projects, leaving a star on GitHub, testing its capabilities, reporting bugs, proposing improvements, or contributing to discussions in the community, developers can help shape the future of clean architecture in TypeScript. This collaborative approach is crucial to overcoming the challenges of software development and ensuring that the framework evolves to meet the needs of those who value both modernity and solid architectural practices.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

3 Identity Checks When Staging DNS Records Reach the Wrong Production Zone

TL;DR: Treat a DNS change as a typed publication with three identities: environment, customer, and zone. Resolve all three from the request, compare them with independently loaded expectations, and…

  • Verify environment, customer, and zone identities separately
  • Halt write operation if identities do not align
  • Focus on zone reference, not just record value validity

Reading Input in Java

System.in, BufferedReader, and Scanner Every Java beginner eventually asks the same question: "Okay, I can print output — how do I actually read something the user types?" Java gives you a few ways to…

  • System.in.read() reads single byte, returns ASCII value
  • BufferedReader reads entire lines, converts to desired type
  • Scanner simplifies input, handles multiple data types

An $11,400 AWS bill, and CloudWatch Logs was $2,100 of it

I got access to the account on a Tuesday morning The founder had sent over credentials the night before with a message that said roughly: I think we're overpaying but I don't know where Total monthly…

  • $11,400 monthly AWS bill deemed excessive for 800 active users
  • $2,100 of the bill attributed to CloudWatch Logs with 43 unretained log groups
  • Debug logging disabled, $900 saved by deleting unused log groups

More from Saturday 3 October →