I wrote Actionhero in 2011 to stop duplicating handlers for HTTP and WebSocket. Fifteen years later, that same handler also needs to work for AI agents, so... here’s another framework ;)
A little OSS project that backs up drive, photos, contacts, and notes to the directory of your choice.
Along the way, me (and Claude) did a large amount of SQLite excivation to learn how apple stores all of this stuff locally. I extracted that into https://github.com/evantahler/macos-ts if you want to use a lower-level API yourself
Hi HN, I’m Evan. I’ve been building API frameworks in JavaScript and Typescript for over a decade (I created Actionhero), and Keryx is the distillation of everything I’ve learned, rebuilt from scratch on Bun and TypeScript.
The big idea: you write one action class with a Zod schema, and the framework serves it as an HTTP endpoint, a WebSocket handler, a CLI command, a background task, and an MCP tool with the same validation, same middleware, same `run()` method. The only thing that changes is how the request arrives.
The MCP part is what pushed me to build this. I work on AI agent infrastructure at Arcade (we do authorization and tooling for AI agents), and I kept seeing folks bolt MCP servers onto existing APIs as a separate layer with duplicated auth, duplicated schemas, and duplicated error handling. Keryx makes your API an MCP server by default — OAuth 2.1 + PKCE built in, per-session isolation, and typed errors that agents can actually distinguish.
The stack is opinionated: Bun, Zod, Drizzle ORM, Redis (for Resque-based background tasks and PubSub), PostgreSQL. No compilation step, sub-second startup.
You can try it right now:
bunx keryx new my-app
cd my-app
cp .env.example .env
bun install
bun dev
Requires Bun, PostgreSQL, and Redis running locally (and a `createdb bun` for the default DB).
Some things I’d love feedback on:
- Is the “one action, every transport” abstraction too magical, or does it feel natural once you use it?
- The MCP-native approach — is this how you’d want to add agent support to a new project?
- Anything missing from the comparison table on the homepage?
Grouparoo | Founding Community Manager / Developer Advocate | Full-Time | Remote - USA
---
Grouparoo (http://www.grouparoo.com) is a venture-backed software company building the open-source framework that makes it easy to have meaningful, data-driven conversations with your customers. Do you need to keep your product data in-sync with Hubspot, Marketo and Zendesk? Do you want to be able to build, test, and deploy data sync code just like the rest of your stack? That’s what Grouparoo is - the powerful combination of a Customer Data Platform (CDP) and a reverse-etl tool.
We call these roles "Founding" because you will have a real opportunity to influence the direction of the company and product. The main components of our stack are Typescript/Javascript, Actionhero, Next.js, and React. Join us to build the product and the community!
So… what does this mean for the right to be forgotten?