Run your Flow
Now that you’ve defined and compiled your flow, it’s time to execute it!
In this guide, we’ll set up an Edge Worker to process your flow tasks, trigger your first flow, and observe its execution.
-
Create a worker function
Section titled “Create a worker function”Create a new Edge Function that will process tasks for your flow:
npx supabase functions new greet_user_workerReplace contents of
index.tsfile with the following:supabase/functions/greet_user_worker/index.ts import { EdgeWorker } from "jsr:@pgflow/edge-worker";import GreetUser from '../_flows/greet_user.ts';// Pass the flow definition to the Edge WorkerEdgeWorker.start(GreetUser); -
Disable JWT verification
Section titled “Disable JWT verification”Edit
supabase/config.tomlto disable JWT verification for local development:[functions.greet_user_worker]enabled = trueverify_jwt = trueverify_jwt = falseimport_map = "./functions/greet_user_worker/deno.json" -
Start the Edge Runtime
Section titled “Start the Edge Runtime”Start the Edge Runtime to make your worker function available:
npx supabase functions serveThis will start the Edge Runtime server but not yet start your worker. You should see similar output in your terminal:
Setting up Edge Functions runtime...Serving functions on http://127.0.0.1:54321/functions/v1/<function-name>Using supabase-edge-runtime-1.67.4 (compatible with Deno v1.45.2)serving the request with supabase/functions/greet_user_worker -
Start your worker
Section titled “Start your worker”In a new terminal, send an HTTP request to start your worker:
curl http://localhost:54321/functions/v1/greet_user_workerYou should see output in your Edge Runtime terminal indicating the worker has started:
[Info] [INFO] worker_id=unknown module=DenoAdapter DenoAdapter logger instance created and working.[Info] [INFO] worker_id=unknown module=DenoAdapter HTTP Request: null -
Trigger your first flow
Section titled “Trigger your first flow”Now let’s start a flow run! Using Supabase Studio:
- Open Supabase Studio in your browser (typically at http://localhost:54323)
- Navigate to the SQL Editor
- Execute this SQL to start your flow:
SELECT * FROM pgflow.start_flow(flow_slug => 'greet_user',input => '{"first_name": "Alice", "last_name": "Smith"}'::jsonb);The output should look like:
run_id | flow_slug | status | input | output | remaining_steps--------------+--------------+---------+-----------------------------------------------+--------+-----------------<run_id UUID> | greet_user | started | {"first_name": "Alice", "last_name": "Smith"} | null | 2 -
Monitor execution
Section titled “Monitor execution”Your worker should start processing tasks immediately. You should see log output in the Edge Runtime terminal as each step executes:
[Info] [INFO] worker_id=<long UUID> module=ExecutionController Scheduling execution of task 1[Info] [INFO] worker_id=<long UUID> module=ExecutionController Scheduling execution of task 2You can check the run status using Supabase Studio:
In the SQL Editor, run this query:
SELECT * FROM pgflow.runsWHERE flow_slug = 'greet_user'ORDER BY started_at DESCLIMIT 1;As steps complete, you’ll see the
remaining_stepscount decrease. When it reaches 0, the run will be marked ascompleted:run_id | flow_slug | status | input | output | remaining_steps--------------+--------------+-----------+-----------------------------------------------+-------------------------------------+-----------------<run_id UUID> | greet_user | completed | {"first_name": "Alice", "last_name": "Smith"} | {"greeting": "Hello, Alice Smith!"} | 0