<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yousif Abdulkarim</title>
    <description>The latest articles on DEV Community by Yousif Abdulkarim (@yousifkhalilabdulkarim).</description>
    <link>https://dev.to/yousifkhalilabdulkarim</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4068140%2F0a6f431c-bd2c-4e63-9a19-f7f273f60f1b.jpg</url>
      <title>DEV Community: Yousif Abdulkarim</title>
      <link>https://dev.to/yousifkhalilabdulkarim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yousifkhalilabdulkarim"/>
    <language>en</language>
    <item>
      <title>Announcing eridu-tech - A Modular Backend Platform for TypeScript</title>
      <dc:creator>Yousif Abdulkarim</dc:creator>
      <pubDate>Fri, 07 Aug 2026 23:09:54 +0000</pubDate>
      <link>https://dev.to/yousifkhalilabdulkarim/announcing-eridu-tech-a-modular-backend-platform-for-typescript-4c66</link>
      <guid>https://dev.to/yousifkhalilabdulkarim/announcing-eridu-tech-a-modular-backend-platform-for-typescript-4c66</guid>
      <description>&lt;h1&gt;
  
  
  Announcing eridu-tech
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;eridu-tech is a framework-agnostic backend platform for TypeScript: composable infrastructure components, middleware, configuration, and HTTP routing that can be embedded into the framework you already use.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My story
&lt;/h2&gt;

&lt;p&gt;Four years ago, I tried running NestJS inside Next.js. It wasn't as simple as I expected. Embedding NestJS's server meant relying on Next.js configuration that wasn't typed, while using NestJS as a DI container depended on TypeScript's experimental decorators, which didn't work well with Next.js.&lt;/p&gt;

&lt;p&gt;So I split the application into separate frontend and backend parts. First, I used two repositories; later, I moved to a monorepo. Neither approach was ideal. Separate repositories meant separate servers and deployments to keep in sync, while the monorepo added its own setup and maintenance overhead.&lt;/p&gt;

&lt;p&gt;I then tried embedding Hono directly into Next.js. That solved the HTTP routing problem, but Hono is intentionally lightweight, so I ended up patching together different libraries to fill the gaps.&lt;/p&gt;

&lt;p&gt;At work, I ran into another set of problems with a frontend and backend in a monorepo. Transactions, logging, and observability started leaking into business logic, making the code harder to read, test, and maintain. Deployment was also slow and manual, without blue-green deployments, easy rollbacks, or integrated CI/CD.&lt;/p&gt;

&lt;p&gt;These problems were amplified by tight deadlines. There was rarely enough time to build the surrounding infrastructure properly, so we ended up cutting corners or spending time stitching libraries together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's why I built eridu-tech: to provide the reusable backend infrastructure I kept needing without tying it to a specific application framework.&lt;/strong&gt; It combines adapter-first components, framework-agnostic middleware, an embeddable HTTP router, and a common type-safe foundation.&lt;/p&gt;

&lt;p&gt;The goal is simple: &lt;strong&gt;make it easier to ship maintainable backend systems under real-world time constraints, without sacrificing architecture just to move faster.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 The idea behind eridu-tech
&lt;/h2&gt;

&lt;p&gt;eridu-tech is built around a few core ideas.&lt;/p&gt;

&lt;h4&gt;
  
  
  🧩 Bring your own framework
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Your backend infrastructure shouldn't force you to adopt a particular application framework.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;eridu-tech doesn't require its own DI container, so it can be integrated with frameworks such as Express, NestJS, AdonisJS, Next.js, Nuxt, or TanStack Start. A package tied to a framework's container also ties you to that container's scopes and lifecycle, which can become implicit constraints on your architecture. Moving the package elsewhere can then mean untangling or rewriting those bindings.&lt;/p&gt;

&lt;p&gt;eridu-tech keeps those concerns separate.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔄 Switch infrastructure without rewriting business logic
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure choices should stay behind stable adapters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Postgres today, another storage implementation tomorrow. Adapter-based components let you change infrastructure implementations without coupling your business logic directly to them.&lt;/p&gt;

&lt;h4&gt;
  
  
  🧪 Test components without Docker
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Every component ships with an in-memory adapter where practical, making application tests faster and easier to run.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Components also come with reusable tests that can be used when creating custom adapters, helping verify that different implementations behave consistently.&lt;/p&gt;

&lt;h4&gt;
  
  
  🛡️ Type-safe from day one
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;TypeScript is part of the design rather than an afterthought.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;eridu-tech uses precise generics, schema validation, and ESM-native packages without CommonJS baggage.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ A unified foundation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The components are designed to work together through a small set of shared primitives rather than through a framework-specific runtime.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serde&lt;/strong&gt; — a shared serialization engine used across components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution context&lt;/strong&gt; — a shared execution context that can travel across components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config &amp;amp; env access&lt;/strong&gt; — standardized, type-safe patterns for reading configuration and environment variables through &lt;code&gt;ConfigAccessor&lt;/code&gt; and &lt;code&gt;EnvAccessor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Middleware&lt;/strong&gt; — composable, framework-agnostic middleware that can be applied to methods or functions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HttpRouter&lt;/strong&gt; — a framework-agnostic HTTP router built on the performant Hono router engine and implementing the WinterTC Fetch API, designed to embed directly into full-stack frameworks such as Next.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform is also being extended with &lt;strong&gt;transaction context, observability, dependency injection, deployment tooling, and component introspection&lt;/strong&gt;. These are part of the roadmap rather than capabilities I want to present as finished today.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧑‍💻 The developer workflow
&lt;/h2&gt;

&lt;p&gt;Here's the workflow I'm building toward with eridu-tech: &lt;strong&gt;start with validated inputs, keep configuration structured, wire dependencies consistently, and keep infrastructure concerns out of business logic.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;🔑 &lt;strong&gt;Environment variables are often read inconsistently&lt;/strong&gt; — missing validation, runtime errors, and duplicated parsing logic can spread throughout an application. eridu-tech provides a &lt;strong&gt;standardized, type-safe way to read and validate environment variables&lt;/strong&gt;, so your application gets the values it expects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚙️ &lt;strong&gt;Configuration becomes difficult to maintain as applications grow.&lt;/strong&gt; A small configuration can turn into a deeply nested, untyped object or a collection of smaller configurations scattered across the codebase. eridu-tech provides a &lt;strong&gt;standardized, type-safe pattern for defining domain configurations&lt;/strong&gt;, with a &lt;strong&gt;maximum nesting depth of two&lt;/strong&gt;, and deriving values from validated environment variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔌 &lt;strong&gt;Manually wiring services and infrastructure gets harder to maintain as an application grows.&lt;/strong&gt; eridu-tech provides a &lt;strong&gt;structured way to wire your own services and infrastructure components&lt;/strong&gt; by dependency injection container, using domain configuration to drive the setup so the wiring remains consistent and maintainable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛠️ &lt;strong&gt;Cross-cutting concerns can quickly leak into business logic.&lt;/strong&gt; Retries, timeouts, rate limiting, circuit breaking, concurrency control, and observability can make otherwise simple methods difficult to read and test. eridu-tech provides &lt;strong&gt;predefined, framework-agnostic middleware&lt;/strong&gt; so these concerns can be applied without cluttering business logic.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;🔁 Retry&lt;/li&gt;
&lt;li&gt;⏱️ Timeout&lt;/li&gt;
&lt;li&gt;🚦 Rate limiting&lt;/li&gt;
&lt;li&gt;🧯 Circuit breaking&lt;/li&gt;
&lt;li&gt;🔒 Concurrency control — distributed locks, semaphores, and reader-writer locks&lt;/li&gt;
&lt;li&gt;📊 Observability — logging, tracing, and metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;🔁 &lt;strong&gt;Coordinating transactions across databases, event buses, and job schedulers is error-prone.&lt;/strong&gt; The roadmap includes a &lt;strong&gt;shared transaction context and transaction middleware&lt;/strong&gt; so components can participate in the same transaction, with event dispatch coordinated around successful commits and scheduled jobs able to participate in the transaction model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📡 &lt;strong&gt;Propagating execution context across servers, processes, and asynchronous boundaries can require significant boilerplate.&lt;/strong&gt; The roadmap includes &lt;strong&gt;serialization and propagation of execution context across runtimes&lt;/strong&gt;, so request and correlation information can remain available throughout distributed systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌐 &lt;strong&gt;Full-stack applications can require separate backend services, repositories, and deployments.&lt;/strong&gt; The embeddable &lt;code&gt;HttpRouter&lt;/code&gt; is designed to let the backend run directly inside full-stack frameworks such as Next.js, providing a path toward deploying the frontend and backend together without maintaining a separate backend service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 &lt;strong&gt;Deploying an application and its infrastructure can be slow and manual.&lt;/strong&gt; The roadmap includes a &lt;strong&gt;deployment CLI&lt;/strong&gt; for deploying applications and infrastructure to a VPS via SSH, with blue-green deployments, rollbacks, and GitHub Actions CI/CD scripts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔍 &lt;strong&gt;When something goes wrong, component runtime state can be difficult to inspect.&lt;/strong&gt; The roadmap includes &lt;strong&gt;component-level introspection APIs&lt;/strong&gt; that would allow the CLI to inspect runtime data during development and production.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's available today
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The current focus is the composable foundation and the components that are already usable.&lt;/strong&gt; The roadmap features above are being developed incrementally rather than being presented as completed capabilities.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://dev.to/docs/components/overview"&gt;component overview&lt;/a&gt; walks through the available eridu-tech components — including the foundation, storage, and infrastructure building blocks — with in-memory adapters for fast testing and pluggable adapters for real infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 What's next
&lt;/h2&gt;

&lt;p&gt;eridu-tech is pre-v1 and evolving quickly. The &lt;a href="https://dev.to/docs/roadmap"&gt;roadmap&lt;/a&gt; shows what's planned and in progress across the ecosystem.&lt;/p&gt;

&lt;p&gt;If the problems behind eridu-tech sound familiar, &lt;strong&gt;try the components, explore the architecture, and let me know what you think.&lt;/strong&gt; I'm especially interested in feedback from developers who have dealt with the same problems around framework coupling, infrastructure abstractions, testing, and keeping backend code maintainable under tight deadlines.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
