Connect flows, finally a language.

FlowLang is a typed authoring language for Amazon Connect contact flows. Write your flows as code, with autocomplete, full documentation, and errors in your editor before deploy. AI assistants author alongside you through MCP. Lossless round-trip with the console so your team works freely on either side.

Why FlowLang?

The tooling you'd expect from a language, applied to Amazon Connect flows.

Errors, diagnostics, hints, full documentation.

Hover any block for its docs and typed-setter signatures. Squiggles on every shape Connect would reject. Autocomplete and signature help on every parameter. The reference site and the in-editor docs come from the same corpus, so what you read matches what you can type.

LLM-native authoring.

Structured diagnostics, machine-applicable fixes, and an MCP server available on request. Claude, Cursor, your custom agent — all fluent in it. Pair-program your contact flows the same way you pair-program your Rust or TypeScript.

Real diffs in git.

FlowLang output is plain text in the order you wrote it. A one-line change is a one-line diff. Reviewers see exactly what you changed, and your git history reflects your actual intent.

Errors before you deploy.

Every rejection rule the Connect API enforces, running on every keystroke. Get the diagnostic the moment you typed the line — find any issue in your editor instead of in a deploy log.

Quick fixes that actually fix.

Most flow errors have one mechanical fix. FlowLang offers it as a click. Apply. Compile clean. Done. CI pipelines auto-apply the safe ones; agents surface the suggested ones for review.

Round-trip lossless with the console.

Paste a Connect export, get readable code back. Edit it, compile, redeploy. The output is identical to what a console-authored flow looks like — your team picks the side that suits the moment.

One flow, all your accounts.

Every queue, prompt, Lambda, and customer-profile reference lifts out into a top-of-script arns map. Dev to staging to prod, or onto a customer's account — edit the map, redeploy. The flow body never changes.

Functions, for the things you write twenty times.

The welcome prompt in every IVR. The fraud-check sub-graph in every voicebot. Write it once as a function; call it from anywhere. Parameters, named exports, all the composition tools you'd expect from a real language — applied to your contact flows.

What it looks like

let mp = MessageParticipant();
mp.text("Welcome to Acme.");

let bye = DisconnectParticipant();
mp.next(bye).on_no_matching(bye);

Flow::start(mp).auto_layout();

Six lines of FlowLang produce the same Connect-deployable JSON a hand-authored flow would: auto-positioned on the canvas via Sugiyama layout, validated against the lint pass, ready to deploy via the CLI or upload through the Connect console.

Try it in the editor →