What is walkerOS
walkerOS is an open-source event data collection platform you run as code. Capture events from anywhere, transform them with mapping, and route them to any destination, all with built-in consent management.
No fragile UI configs. No vendor lock-in. Just tracking you can version, test, and trust.
It's built for analytics engineers, data leads, and developers who own analytics on a custom-built app and want to replace a duct-taped GA4 and server-side tag manager stack with a pipeline they actually control.
Try it now
Send your first event in five minutes → Quickstart
Then: send it to GA4 with mapping →
Build and simulate a flow locally with the walkerOS MCP, no account needed: With an AI assistant.
Why walkerOS?
- Open-Source: MIT licensed, free forever, no restrictions
- Self-hostable: Run it on your own infrastructure
- Config-as-Code: Version control, PRs, deploy with confidence
- Composable: Mix sources, destinations, and mappings freely
- Developer-first: TypeScript and declarative tagging, with an optional hosted app and MCP/AI-assisted management
How it works
Every walkerOS setup follows one pattern:
- Sources: Where events come from (browser DOM, dataLayer, HTTP endpoints, custom code)
- Transformers: Middleware that validates, enriches, routes, or redacts events before and after the collector
- Collector: The processing engine (consent, enrichment, routing)
- Destinations: Where events go (GA4, your API, BigQuery, any service)
- Stores: Shared key-value storage used by transformers and destinations (caching, file serving, session state)
A "flow" connects sources to destinations through a collector. You can have one flow or many, client-side, server-side, or both working together.
The centerpiece: mapping
Mapping transforms events between stages. It's how walkerOS adapts to any source or destination format.
One transformation language works everywhere. This is what makes walkerOS truly composable.
Core concepts
| Concept | What It Is | Learn More |
|---|---|---|
| Flow | Sources + collector + destinations configuration | Flow configuration |
| Event model | How events are structured (entity action format) | Event model |
| Mapping | Event transformation rules | Mapping |
| Consent | Privacy controls at destination and property level | Consent management |
| Sources | Event capture from browser, server, or custom code | Sources |
| Transformers | Middleware for validating, enriching, routing, and redacting events | Transformers |
| Destinations | Event delivery to analytics, APIs, warehouses | Destinations |
| Stores | Shared key-value storage for caching, file serving, and session state | Stores |
Two ways to use walkerOS
Both modes use the same architecture. You choose at deploy time, after your first event, see operating modes.
Integrated mode
The collector lives inside your application code.
import { startFlow } from '@walkeros/collector';
import { sourceBrowser } from '@walkeros/web-source-browser';
const { elb } = await startFlow({
sources: { browser: { code: sourceBrowser } },
});Best for: Building into your app, full TypeScript control, dynamic configuration.
Get started with integrated mode →
Bundled mode
The collector is a separate artifact you configure with JSON.
{
"version": 4,
"flows": {
"default": {
"config": { "platform": "web" },
"sources": { "browser": { "package": "@walkeros/web-source-browser" } }
}
}
}Then: walkeros bundle flow.json → standalone file.
Best for: Config-as-code, Docker deployments, separate tracking scripts.
Get started with bundled mode →
Quick links
Deploying to production?
- Deploy: self-hosted or managed
- CLI Reference: Build and test commands
Already using walker.js?
- Walker.js Docs: Pre-built convenience bundle
Need help choosing?
- Operating Modes: Detailed comparison