Docker
The walkeros/flow image runs a flow bundle you build with the CLI. It runs prebuilt artifacts only, so every Docker path starts with walkeros bundle. This quickstart builds a small collector, runs it in a container, and sends it an event.
You need Docker, Node.js, and network access to npm (the CLI downloads the packages your flow names).
1. Create a flow
Save this as flow.json. The Express source receives events on /collect, and the demo destination logs each event's name and data:
{
"version": 4,
"flows": {
"default": {
"config": { "platform": "server" },
"sources": {
"http": { "package": "@walkeros/server-source-express" }
},
"destinations": {
"demo": {
"package": "@walkeros/destination-demo",
"config": { "settings": { "values": ["name", "data"] } }
}
}
}
}
}2. Bundle it
npm install -g @walkeros/cli
walkeros bundle flow.json -o dist/This writes dist/flow.mjs, dist/package.json, and dist/node_modules/. The packages stay in node_modules/, so the container needs the whole directory, not flow.mjs alone.
3. Run the container
Mount the bundle directory at /app/flow, where the image expects flow.mjs:
docker run --rm -p 8080:8080 \
-v "$PWD/dist:/app/flow:ro" \
walkeros/flow:<version>Replace <version> with a walkeros/flow version that ships runneros, ideally the CLI version you bundled with, see image tags. If the runtime exits with Flow artifact not found, check the mount path.
4. Send an event
In another terminal:
curl -X POST http://localhost:8080/collect \
-H "Content-Type: application/json" \
-d '{"name":"page view","data":{"title":"Home"}}'The response is {"success":true,"timestamp":...}, and the container log shows the event:
[demo] {
"name": "page view",
"data": {
"title": "Home"
}
}GET http://localhost:8080/health returns {"status":"ok"} while the container runs, and GET http://localhost:8080/ready returns {"status":"ready"} once the flow is up.
Build a custom image
Bake the bundle into your own image instead of mounting it:
FROM walkeros/flow:<version>
COPY dist/ /app/flow/docker build -t my-walker .
docker run -p 8080:8080 my-walkerTo build the artifact inside Docker as well, use the canonical Dockerfile.
Docker compose
services:
walkeros:
image: walkeros/flow:<version>
volumes:
- ./dist:/app/flow:ro
ports:
- '8080:8080'
restart: unless-stoppedSingle-file archive
To ship one file instead of a directory, bundle to an archive and point BUNDLE at it. The runtime extracts it into /app/flow/ at startup, so leave that directory writable:
walkeros bundle flow.json -o flow.tar.gz
docker run --rm -p 8080:8080 \
-v "$PWD/flow.tar.gz:/app/bundle/flow.tar.gz:ro" \
-e BUNDLE=/app/bundle/flow.tar.gz \
walkeros/flow:<version>Environment variables
| Variable | Description | Default |
|---|---|---|
BUNDLE | Artifact path or URL (.mjs, .js, .cjs, .tar.gz, .tgz) | /app/flow/flow.mjs |
PORT | Server port | 8080 |
Next steps
- Runtime: inputs, environment variables, health checks, constraints
- Available sources
- Available destinations