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.envpackage.json
That means tasks can import npm packages, use normal code patterns, and be reviewed like regular source code.
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
});
}
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
Then open:
http://127.0.0.1:3000
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)