Skip to main content
The state machine is a Go service that sits between the Worlds detection API and your workflows. It subscribes to live detection streams, maintains track and zone state, and delivers enriched signals to your workflows via webhooks.

Why it exists

Raw detection streams from the Worlds API arrive at high frequency — potentially hundreds of detections per second across multiple cameras. Processing these directly in the Workflow Builder would cause:
  • Race conditions — multiple detections for the same track arriving simultaneously
  • Incomplete data — individual detections lack context like velocity, dwell time, and zone intersection
  • Resource exhaustion — the Workflow Builder would need a WebSocket connection per workflow per camera
The state machine solves all three problems.

What it does

Track state management

The state machine aggregates individual detections into coherent tracks. Each track maintains:
  • Current position (pixel + geo)
  • Velocity (rolling average in px/s and m/s)
  • Active zones with dwell times and intersection percentages
  • Zone history (previously visited zones)
  • Zone sequence (order of zone visits)
  • Detection count and age

Signal generation

The state machine emits three signal types to your workflows:

Per-datasource ordering

Detections are processed sequentially per data source (camera). This prevents race conditions — your workflow is guaranteed to process signals for a given camera in order.

Subscription management

Workflows register with the state machine via webhook URLs. The state machine:
  • Matches detections against registered subscriptions by data source, object type, and zone
  • Delivers only matching signals to each workflow
  • Reuses WebSocket connections across subscriptions sharing the same credentials

Architecture

Redis database layout

The state machine uses multiple Redis databases for isolation:

Configuration

Key environment variables:

Batch processing

For workflows that need complete track data and track-to-track interactions, the state machine supports batch mode:
  • Stores raw detections in DB3
  • Emits tracks only when they expire (complete lifecycle)
  • Calculates track-to-track interactions (bounding box overlap, proximity)
  • Delivers batch payloads at configurable intervals
See the Detection Webhook Trigger batch mode for configuration.