MoroJS started as a side project born of frustration with the frameworks I was paid to use. It grew into a full toolkit for TypeScript backends, with its own native engine underneath.
Make backend work boring in the best way. The framework should be the part of your stack you think about least: routes that read plainly, types that hold end to end, and defaults you rarely need to touch.
We run MoroJS in our own work, so the rough edges get felt before they ship. Features that annoy us don't make it in.
The schema you validate with is the type you code against. If the compiler is happy, the handler is safe. Most of our design decisions trace back to that.
Contributors steer the roadmap more than we do. Open an issue and you'll usually hear back the same day.
The short version, garage to now
Fed up with existing frameworks, I started building MoroJS in my garage. Late nights, endless coffee, and a vision to make TypeScript APIs actually enjoyable to build.
Intelligent routing, end-to-end types, and Zod validation landed. The core felt right, so I kept going.
First release on npm. Stars, issues, and the first strangers running MoroJS in projects I'd never heard of.
Contributors started showing up with fixes and features. Production apps shipped. It stopped being a solo project.
Bigger teams began evaluating MoroJS seriously, which meant harder questions: security reviews, audits, migration paths. Good pressure.
The native engine keeps getting faster, the tooling keeps getting simpler. The roadmap is public - if you want a say, the discussions are open.
MoroJS is a one-person project that stopped being one. If you care about how backends get built and want your fingerprints on a framework people actually run, there's room here.
Write features that matter, squash bugs like a pro
Make our docs so good they become bedtime reading
Help newcomers, share wins, grow the family
Have questions? Want to contribute? We'd love to hear from you.