DEV Community

Sayem Chowdhury
Sayem Chowdhury

Posted on

Devo: a code-first alternative to n8n and Activepieces

I’m building Devo, a self-hosted automation builder for people who prefer code over workflow canvases.

Think n8n or Activepieces, but code-first instead of canvas-first.

Instead of wiring nodes together, every automation is a small JavaScript/TypeScript task. Each task has its own:

  • main.ts
  • .env
  • package.json

That means tasks can import npm packages, use normal code patterns, and be reviewed like regular source code.

Devo demo

Why I’m building it

Visual workflow tools are great for simple integrations.

But once an automation becomes more complex, node graphs can become harder to reason about:

  • business logic gets split across many nodes
  • error handling becomes awkward
  • testing is not natural
  • reviewing changes is difficult
  • reuse is limited

For many automations, code is simply a better interface.

Devo tries to keep the good parts of automation platforms, while making the actual logic plain JavaScript/TypeScript.

How it works

The main UI is an AI chat plus a browser editor.

You can ask the agent something like:

Build a webhook that receives Shopify orders and stores them in Postgres.

Devo generates TypeScript code, shows it in the editor, and lets you edit it before saving/deploying.

Tasks can currently run from:

  • manual runs
  • webhook endpoints
  • cron schedules with timezone support

Because every task has a package.json, you can use npm packages just like a normal project.

Example

A webhook task can look like this:

export async function webhook(req: Request) {
  const order = await req.json();

  console.log("received order", order.id);

  return Response.json({
    ok: true,
    order_id: order.id
  });
}
Enter fullscreen mode Exit fullscreen mode

The task can then be deployed behind an opaque webhook URL.

Self-hosted by default

Devo is built for local and self-hosted use.

It stores app data locally and runs task code as child processes with timeouts and output limits.

Important note: this is still early MVP software. The current runtime is not a secure multi-tenant sandbox. It is meant for trusted self-hosted use right now.

Current stack

  • SvelteKit / Svelte 5
  • Better Auth
  • Kysely + SQLite/libSQL
  • Monaco editor
  • OpenAI Agents SDK
  • Bun or Node task execution

Try it

GitHub:

https://github.com/sayem314/devo

Docker quick start:

docker run --rm \
  -p 3000:3000 \
  -v devo-data:/data \
  -e AUTH_SECRET="$(openssl rand -base64 32)" \
  -e ORIGIN="http://127.0.0.1:3000" \
  sayem314/devo:latest
Enter fullscreen mode Exit fullscreen mode

Then open:

http://127.0.0.1:3000
Enter fullscreen mode Exit fullscreen mode

Feedback wanted

I’d love feedback on:

  • whether the “code-first automation” direction makes sense
  • what triggers/runtimes should come next
  • how task isolation should work for self-hosted users
  • whether this feels meaningfully different from existing workflow tools

If you’ve used n8n, Activepieces, Zapier, Temporal, Val Town, or similar tools, I’d especially like to hear where this approach feels useful or not useful.

Top comments (0)