A personal runner is a much smaller thing than n8n: triggers (cron and webhooks), steps in code or HTTP, retries and a log of every run. An agent can build that in a weekend, and writing flows as files makes them easy to review. The catch is connectors: each OAuth service you rely on is its own small project, and the visual editor is a real product by itself. Because n8n's Community Edition is free to self-host, the shortest path for most people is to run it yourself rather than rebuild it.
Before you buildThere is no free n8n Cloud plan, but the Community Edition is free to self-host. Run that before building anything.
Build me a personal workflow runner to replace n8n Cloud for scheduled and webhook automations. Requirements:
- Node.js 22 + TypeScript: a Fastify server with a small server-rendered dashboard (Eta templates and
htmx). `npm start` serves http://localhost:4500.
- Flows are files in ./flows/*.flow.ts, each exporting { name, trigger, steps } built with a tiny helper
API. Triggers: cron (`croner`, with a timezone), webhook (POST /hook/<flow>/<secret>) and manual.
Watch ./flows and reload changes without a restart.
- Step types: http (fetch with retries and backoff), code (an async function that receives earlier
outputs as `steps.<name>`), email (nodemailer, SMTP settings in .env), shell (only commands on an
allow-list in the config) and branch (if/else on a value).
- Secrets: flows read them with secret("NAME") from .env; mask every secret value in the run log.
- Storage: better-sqlite3 in ./data/runs.db with one row per run and per step: input and output
(cut at 64 KB), status, duration and error. Prune runs older than 30 days.
- Dashboard: each flow with its next run time and last status; a run page showing every step's
input and output; buttons for run now, retry from the failed step, and enable or disable.
- Alerts: after 3 failures in a row send one email, then stay quiet until the flow succeeds again.
- Ship two examples: a daily RSS-to-email digest and a webhook that forwards a JSON body to a chat
webhook URL.
- Single user: the dashboard sits behind one password from .env (signed cookie). No accounts, no
telemetry, local-first.
- Out of scope: a visual editor, an OAuth connector library, multiple users or projects, queue mode,
AI nodes.
- README: how to add a flow, how to expose webhooks through a tunnel, and a warning that code and
shell steps run with your full permissions.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own n8n Cloud.
Add signature verification to the workflow runner in this folder. Requirements:
- A flow's webhook trigger can declare verify: { type: "hmac-sha256", header, secretName,
prefix? } using a secret from .env, plus a type for Stripe-style t=...,v1=... headers.
- Compare with crypto.timingSafeEqual on the raw body, never on re-serialised JSON.
- Reject with 401 and log the attempt without storing the body.
- Add tests with a valid, a tampered and a replayed (older than 5 minutes) request.
- Update the README.Extend the workflow runner in this folder. Requirements: - A command `npm run export -- --from 2026-01-01` that writes runs and steps to JSONL in ./exports/, with secrets already masked. - A Settings page for retention in days and a "prune now" button that shows how many rows it will delete. - VACUUM after a prune and show the database size on the dashboard. - Update the README.
Add a Google Sheets step to the workflow runner in this folder. Requirements: - Step kinds sheets.append and sheets.read using `googleapis` with a service account JSON path in .env (GOOGLE_SERVICE_ACCOUNT_FILE); no user OAuth. - Accept a spreadsheet id, a range and rows as arrays; return the updated range. - Retry on 429 and 5xx with backoff; never log the key file's contents. - Add an example flow and README steps for sharing a sheet with the service account's email.
People pay for hosted connectors that already work and a canvas that non-programmers can read, plus not running a server. Pricing by whole workflow runs rather than per step is part of the draw for long flows, and the paid tiers add environments, Git and SSO.
Estimate · Runs on your machine or a $5 VPS. Starter costs about $27 a month, so a build saves money only if you value the control. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $26.85/workspace | $22.38/workspace | 2,500 workflow executions a month, unlimited workflows and users, 1 shared project, 5 concurrent executions, 1,600 Assistant credits a month, forum support. |
| Pro | $67.13/workspace | $55.94/workspace | 10,000 executions a month, 3 shared projects, up to 50 concurrent executions, 7 days of insights, up to 9,600 Assistant credits, admin roles, workflow history. |
| Business | $895.04/workspace | $746.24/workspace | 40,000 executions a month, 6 shared projects, SSO and LDAP, Git version control, multiple environments, queue mode. |
| Enterprise | custom | — | Custom execution volume, unlimited projects, 200+ concurrent executions, 365 days of insights, external secret stores, log streaming, SLA support. |
No free cloud plan. A 14-day trial gives Pro features and up to 1,000 executions; the Community Edition is free to self-host.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: The visual canvas and the several hundred ready-made integration nodes, OAuth flows with token refresh handled for you.
About $26.85 a month on the Starter plan, $322.20 a year (checked 2026-10-14).
The visual canvas and the several hundred ready-made integration nodes; OAuth flows with token refresh handled for you; AI agent nodes, the Assistant and MCP triggers; Execution history, search and insights dashboards; Someone else running the server, with data hosted in the EU. If any of those matter to you, keep paying.
Yes: n8n Community Edition (free), Activepieces (open source), Node-RED (open source).