finds.dev← search

// the find

mjackson/mach

★ 800 · JavaScript · updated May 2018

HTTP for JavaScript

Mach is a dead isomorphic HTTP server/client library for Node and the browser, built around the idea that server apps, client requests, and proxies all share one function signature. It's from the pre-async/await promise era (2013-2018) and hasn't been touched since mid-2018.

The unified app signature is the one genuinely interesting idea here — a 'proxy' is just an app that forwards to another app, and client requests use the same call shape as server handlers, so middleware composes identically on both sides. The middleware set is broad for its era: pluggable session stores (memory/cookie/Redis), multipart parsing, CSRF tokens, conditional GET via ETag/Last-Modified — most frameworks bolt these on as separate packages. Errors propagate as promise rejections instead of callback-style `(err, result)`, which was a real ergonomics win before async/await existed.

No commits since May 2018 — this predates native fetch, async/await idioms, and seven years of Node security advisories, so it's not something to put in front of real traffic. It ships its own Promise shim (modules/utils/Promise.js) instead of relying on native promises, which was defensible in 2013 and is just dead weight now. No TypeScript types at all. And the ecosystem argument is decisive: Express/Koa/Fastify solved the same composability problem, kept shipping, and have the plugin ecosystems and Stack Overflow coverage to match — there's no reason to pick Mach over them today except archaeology.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →