HN user

evantahler

549 karma

Keeping AI safe and powerful with Arcade.dev. Previously @ Airbyte & co-founder of Grouparoo & Voom. BDFL of Keryxjs.com & Actionherojs.com

* https://www.evantahler.com * https://github.com/evantahler * https://twitter.com/evantahler

[ my public key: https://keybase.io/evantahler; my proof: https://keybase.io/evantahler/sigs/0NsPFHC3XZlVcWViIXGSMTM73ap__K4X_p3Fgj1mwm4 ]

Posts66
Comments185
View on HN
www.keryxjs.com 2mo ago

Show HN: Keryx: TypeScript framework where one Action becomes HTTP, WS, CLI, MCP

evantahler
2pts1
github.com 2mo ago

icloud-backup: The iCloud backup tool I always wanted

evantahler
3pts1
www.keryxjs.com 3mo ago

Keryx – One TypeScript action class, five transports (HTTP, WS, CLI, MCP, tasks)

evantahler
10pts2
github.com 4mo ago

`mcpx` – MCP in a CLI

evantahler
7pts3
aaif.io 7mo ago

The Linux Foundation Launches the Agentic AI Foundation

evantahler
11pts6
github.com 1y ago

A payments protocol for the internet. Built on HTTP

evantahler
2pts0
airbyte.com 2y ago

Airbyte made progress on Postgres replication performance

evantahler
12pts0
airbyte.com 2y ago

Airbyte API & Terraform Provider – available in open source

evantahler
19pts6
airbyte.com 3y ago

Airbyte 0.50: Introducing Checkpointing, Column Selection and Schema Propagation

evantahler
8pts0
news.ycombinator.com 3y ago

Build custom ELT connectors in no-code within 10 minutes

evantahler
10pts1
airbyte.com 3y ago

The Road to GA: Understanding Airbyte Connector Release Stages

evantahler
1pts0
felt.com 4y ago

The Best Way to Make Maps on the Internet

evantahler
2pts0
airbyte.com 4y ago

Airbyte acquires Grouparoo to accelerate Data Movement

evantahler
5pts2
www.swyx.io 4y ago

Measuring Developer Relations

evantahler
3pts1
www.youtube.com 4y ago

I Hacked My Car to Play Mario Kart

evantahler
3pts1
www.grouparoo.com 5y ago

Grouparoo SyncModes – Choices for syncing profile data

evantahler
2pts1
www.grouparoo.com 5y ago

Making Animated GIF screen recordings with only open source software

evantahler
1pts0
about.gitlab.com 5y ago

(Gitlab) Out of the office: How the world adapted to working remotely in 2020

evantahler
6pts1
github.com 5y ago

Actionhero.js v25 Is Out

evantahler
2pts0
www.grouparoo.com 5y ago

Developing Node.js and TypeScript Apps on macOS Big Sur

evantahler
1pts0
www.grouparoo.com 5y ago

Sharing Code in Next.js Applications with Plugins

evantahler
1pts0
nextjs.org 5y ago

NextJS Conf

evantahler
2pts0
twitter.com 7y ago

I've Just Solved All the Problems with Corporate Surveillance in Our Digital Age

evantahler
1pts0
www.actionherojs.com 7y ago

ActionHero.js – Node.js Framework for HTTP, WS, and More

evantahler
2pts0
blog.evantahler.com 8y ago

I'm shutting down my side project; what did I forget?

evantahler
2pts0
blog.evantahler.com 9y ago

Looking for a new ElasticDump Maintainer. It could be you

evantahler
1pts0
news.ycombinator.com 9y ago

Open the Google Maps app on your phone

evantahler
1pts0
blog.evantahler.com 9y ago

On Ethical Ad-Supported Businesses

evantahler
2pts0
blog.evantahler.com 9y ago

Actionhero and Standard.js

evantahler
2pts0
www.actionherojs.com 9y ago

New ActionHero.JS documentation site

evantahler
1pts1

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?

Code is MIT licensed: https://github.com/actionhero/keryx

Happy to answer questions about the architecture, the MCP integration, or why I think Bun is ready for this kind of framework.

What if we put MCP /in/ the CLI?

`mcpx` is a command-line interface for MCP servers. curl for MCP. The internet is debating CLI vs MCP like they're competitors. They're not!

Over at Airbyte, we had a project this quarter to update all of our build & publish processes over to building multi-arch (AMD and ARM) docker images. As Airbyte runs entirely within docker, getting a smooth local experience for folks on M1/(2?) Macs was important. We had a long lived support thread (1) where you can see us grow through all the phases - from "nothing works", to "our deps don't work", to "the platform works" and finally to "the connectors work"!

Assuming your base images are themselves already multi-arch, most of the tooling we needed was already built into the `dockerx` build tool, which is awesome - check it out if you haven't (2). Docker has bundled all the tooling and emulation packages (qemu) needed into a single docker image that can publish multi-arch docker images for you! You run docker to emulate docker to publish docker... There are some interesting things that you'll need to do if you publish multi-stage builds, like publish a tmp tag and delete it when you are done, but it's not /too/ terrible. Since Airbyte is OSS, you can check out our connector publish script here (3) to see some examples.

I'd recommend that spending the time to work your multi-arch tooling - not only does it make the local dev experience faster/better, it:

1. unlocks ARM cloud compute, which can be faster/cheaper in many cases (AWS)

2. removes a class of emulation bugs when running AMD images on ARM - mostly around networking & timing (in the JAVA stack anyway)

Links:

1. https://github.com/airbytehq/airbyte/issues/2017

2. https://docs.docker.com/buildx/working-with-buildx

3. https://github.com/airbytehq/airbyte/blob/master/tools/integ...