We've been working on MoroJS for a while now. The problem we kept running into was that TypeScript APIs usually start simple, then slowly turn into a stack of decisions around the router: validation, OpenAPI, auth, rate limiting, queues, realtime, deployment adapters, middleware ordering, etc. None of those pieces are unusual on their own. The annoying part is that every project seems to reassemble them slightly differently, and after enough refactors the “simple API” becomes hard to reason about. MoroJS is our attempt at treating those production concerns as part of the framework contract instead of a bunch of separate bolt-ons.…