Flowbase · Visual workflow engine

Automate
like you code.

A visual workflow engine for developers who ship — typed nodes, real executions, first-class observability, and no vendor moat. Compose it in the canvas, run it on your infra.

MIT · Self-hostable · v0.1.0

Flowbase canvas previewGoogle FormsubmittedIffield > 0Geminigenerate...DiscordSend msgTelegramPermission...run · queuedrun · ai.intent · 612msrun · 814ms · success

The shift

Automation tools
forgot they were
software.

Zapier hides your logic behind a wizard. n8n asks you to run a database and a queue yourself. The low-code tools you inherited behave like furniture — useful until you need to move them.

Flowbase treats automations the way your code is treated. Typed inputs. Real executions. Branching you can reason about. Logs you can grep. One binary you can host anywhere a container runs.

02Capabilities

A small set of primitives.
Nothing you'll outgrow.

Flowbase ships the smallest surface area that runs real production automations. Add a node when the job demands one — not because the UI had an empty slot.

Canvas

A canvas that keeps up with your thinking.

Drag, connect, branch. Edges carry typed payloads between nodes so you never wonder what a handle emits.

Runtime

Durable runs on Inngest.

Topological execution. Retries, step memoization, and replay — without you writing a scheduler.

Observability

Logs that look like dev tools.

Every node publishes realtime status. Timing, payloads, errors — streamed into the editor as it runs.

Triggers

Webhooks, forms, payments, manual.

Bring any event. Sign it, template the response, route the payload — no glue services required.

AI nodes

Claude, GPT, Gemini. First-class.

Chain prompts with typed variables. Handlebars for templating. Stream outputs into downstream nodes.

ai.prompt({ model: "sonnet-4", input: 
$trigger.body.message
}) → $intent

Credentials

Keys encrypted at rest.

AES via Cryptr. Scoped per user, selected per node. Never expose secrets to the browser.

How it works

Three moves, end to end.

  1. 01Compose

    Open the canvas. Drop a trigger, drag nodes into place, wire them together. Every edge is typed.

  2. 02Run

    Flowbase topologically sorts your graph and dispatches it to Inngest. Retries, steps, replay — built in.

  3. 03Observe

    Status streams into the editor as the workflow executes. Drill into any node for payload, timing, errors.

Integrations

Connects to the tools
you already pay for.

First-class integrations for messaging, AI providers, payments, and anything with an HTTP endpoint.

Gmail
Telegram
WhatsApp
Webhooks
Slack
Discord
Anthropic
OpenAI
Gemini
Stripe
Google Form
+moreany http endpoint

The shape of a workflow

Every canvas is a value
your editor already understands.

workflows/lead-router.ts
import { defineWorkflow } from "flowbase";

export default defineWorkflow((w) => ({
  name: "stripe → slack router",
  trigger: w.webhook({ path: "/hook/stripe", verify: w.env.STRIPE_SECRET }),

  nodes: {
    intent: w.ai({
      model: "sonnet-4",
      input: "$trigger.body.description",
      schema: w.z.object({ category: w.z.enum(["lead", "support", "spam"] })},
    }),

    route: w.branch(($intent.category, {
      lead: w.slack({ channel: "#sales", text: `new lead: ${$trigger.body.email}` }),
      support: w.gmail({ to: "support@acme.co" }),
      spam: w.drop(),
    }),
  },
}))