Skip to main content

Bundled mode

In Bundled mode, you configure walkerOS with JSON files and build standalone bundles using the CLI. The output is a separate file that can be deployed independently of your application.

Quickstart

1. Install the CLI

npm install -g @walkeros/cli

# Verify installation
walkeros --version

2. Create a flow configuration

Create flow.json:

{
"version": 4,
"flows": {
  "default": {
    "config": {
      "platform": "web",
      "bundle": {
        "packages": {
          "@walkeros/collector": {},
          "@walkeros/web-source-browser": {}
        }
      }
    },
    "sources": {
      "browser": {
        "package": "@walkeros/web-source-browser",
        "config": {
          "settings": {
            "pageview": true,
            "session": true
          }
        }
      }
    },
    "collector": { "run": true }
  }
}
}

3. Build the bundle

walkeros bundle flow.json

This writes the bundle to stdout. Use -o to write to a file:

  • Web: -o ./dist/walker.js (IIFE format, loadable via script tag)
  • Server: -o ./dist/bundle.mjs (ESM format, runnable with Node.js)

4. Deploy

Add to your HTML:

<script src="/walker.js"></script>

Adding destinations

Add destinations to your flow.json:

{
"version": 4,
"flows": {
  "default": {
    "config": {
      "platform": "web",
      "bundle": {
        "packages": {
          "@walkeros/collector": {},
          "@walkeros/web-source-browser": {},
          "@walkeros/web-destination-api": {},
          "@walkeros/web-destination-gtag": {}
        }
      }
    },
    "sources": {
      "browser": {
        "package": "@walkeros/web-source-browser",
        "config": { "settings": { "pageview": true } }
      }
    },
    "destinations": {
      "api": {
        "package": "@walkeros/web-destination-api",
        "config": {
          "settings": { "url": "https://your-api.com/events" }
        }
      },
      "ga4": {
        "package": "@walkeros/web-destination-gtag",
        "config": {
          "settings": {
            "ga4": { "measurementId": "G-XXXXXXXXXX" }
          }
        }
      }
    },
    "collector": { "run": true }
  }
}
}

Rebuild: walkeros bundle flow.json


Add consent requirements in the destination config:

"destinations": {
"api": {
  "package": "@walkeros/web-destination-api",
  "config": {
    "settings": { "url": "https://your-api.com/events" },
    "consent": { "functional": true }
  }
},
"ga4": {
  "package": "@walkeros/web-destination-gtag",
  "config": {
    "settings": { "ga4": { "measurementId": "G-XXXXXXXXXX" } },
    "consent": { "analytics": true }
  }
}
}

Set consent at runtime:

// After loading walker.js
elb('walker consent', { functional: true, analytics: true });

Key concepts

The package: property

In Bundled mode, you reference packages by name:

"sources": {
"browser": {
"package": "@walkeros/web-source-browser"
}
}

The CLI downloads and bundles the package. This differs from Integrated mode where you use code: with a direct import.

Variables and environment

Use variables for environment-specific values:

{
"version": 4,
"variables": {
  "GA_ID": "$env.GA_MEASUREMENT_ID:G-DEFAULT",
  "API_URL": "$env.API_ENDPOINT:https://api.example.com"
},
"flows": {
  "default": {
    "destinations": {
      "ga4": {
        "config": {
          "settings": { "ga4": { "measurementId": "$var.GA_ID" } }
        }
      }
    }
  }
}
}

Environment variables ($env.NAME:default) are resolved at build time. Config variables ($var.name) reference values from the variables section.

Multiple flows

Define different flows for different environments:

{
"version": 4,
"flows": {
  "development": {
    "config": { "platform": "web" },
    "destinations": {
      "console": { "package": "@walkeros/destination-demo" }
    }
  },
  "production": {
    "config": { "platform": "web" },
    "destinations": {
      "ga4": { "package": "@walkeros/web-destination-gtag" }
    }
  }
}
}

Build specific flow: walkeros bundle flow.json --flow production


CLI commands

CommandPurpose
walkeros bundleBuild production bundle
walkeros push --simulateTest with mocked events
walkeros pushTest with real API calls
walkeros runStart HTTP collection server

See CLI documentation for full details.


Docker deployment

For production server deployments:

# Build the bundle
walkeros bundle flow.json

# Run with Docker
docker run -d -p 8080:8080 \
-v $(pwd)/dist/bundle.mjs:/app/flow.mjs \
-e BUNDLE=/app/flow.mjs \
walkeros/flow:latest

See Docker documentation for complete deployment guides.


See your event

Before you build and deploy, run the event through the flow offline with the named destination mocked.

Using the flow.json with destinations you created above, push builds the flow and runs the event through it with the named destination mocked. Nothing is sent to a vendor.

npx walkeros push flow.json \
-e '{"name":"page view"}' \
--simulate destination.ga4

Next steps


See also

💡 Not sure which mode fits your stack?
We are happy to talk through your architecture and recommend the right approach. Start with a free scoping call.