Open source · MIT licensed

Many feeds in. One explainable track picture out.

OpenTrack is an open-source tracking and correlation framework for sensor correlation, fusion and track management. Its plugin SDK lets you bring in new algorithms quickly. Operators work in a fast web UI, and autonomous systems can run it headless to coordinate with each other.

OpenTrack's track management page: a world map of live military aircraft from ADS-B, a selected track's card, and the track table

A correlation layer between your sensors and your platforms

OpenTrack sits between data-link gateways and sensor feeds on one side and displays and C2 platforms on the other. It complements both rather than replacing either.

Onboard any feed without code

Pick a transport (TCP, UDP multicast, HTTP, WebSocket, MQTT, gRPC) and a codec. OpenTrack probes the feed, infers its schema and suggests a mapping, and a live preview shows the result at every pipeline stage.

Tracking and correlation

GNN and MHT trackers turn raw plots into tracks. The correlator pairs tracks across sources using kinematics and identity, and logs the evidence for every comparison.

More than points

Lines of bearing, areas of uncertainty, ELINT ellipses and acoustic bearings are correlated with tracks, using cross-fixes and single-sensor motion analysis.

Track management

Designate, pair, merge, split, group and delete, following the OTH-GOLD track database model. Every decision is attributed and can be undone. Includes a MIL-STD-2525D symbol designer.

Several nodes, one picture

Ships, shore sites and drone swarms sync with no leader node. Each object keeps one ID across a network split and rejoin, within a bandwidth budget you set.

Built for accreditation

FIPS 140-3 cryptography, ASD STIG controls, a hash-chained audit log, OpenTelemetry export, signed images and an accreditation document set.

See it work

Each video is a test run through the real engine and scored against ground truth: recorded sensor data from a ferry in Trondheim, and synthetic ESM and acoustic scenarios.

LiDAR and radar tracks paired with vessels 4/4 paired correctly · 0 wrong · 0 clutter paired Recorded data from the NTNU Autoferry dataset. A radar track turns blue once it agrees with the vessel. When the LiDAR tracker splits one 30 m vessel into several tracks, OpenTrack keeps them apart rather than guessing.
Raw detections associated, clutter rejected 457/531 to the right vessel · 0 wrong · 0/318 clutter Each plot flashes with a line to the track it joined. Land and quay clutter never joins a vessel.
One aircraft, three sensors, one track ESM-only track at 4:45 · final error 20 m · one track number throughout A patrol aircraft's ESM finds a fast boat with no AIS, ELINT confirms it and video closes on it. The aircraft steers on OpenTrack's own picture.
Acoustic arrays against small drones 6 tracks → 1 per drone · 100% covered · 12 m RMS Three SAPIENT acoustic arrays each start their own track on each drone. As evidence builds, the tracks of each drone merge into one.

The operator's view

A web UI for onboarding feeds, watching the pipeline and managing the picture. It also runs headless when there's no one to watch it.

Quick start

Run it with Docker, open localhost:8090, and add a feed from the UI or from one of the worked examples.

# clone and configure the first admin
git clone https://github.com/kineticlogic-io/OpenTrack.git
cd OpenTrack
cat > .env <<'EOF'
OT_ADMIN_EMAIL=you@example.com
OT_ADMIN_PASSWORD=Choose-A-Long-Passw0rd!
OT_NATS_URL=nats://nats:4222
EOF

# OpenTrack, Redis and a local NATS
docker compose --profile dev-nats up --build

# add live military aircraft from adsb.lol
curl -X POST -H 'content-type: application/json' \
  --data @docs/examples/adsb-lol.json \
  localhost:8090/api/v1/sources

What's inside

  • Rust server: one binary, with roles you can split across processes
  • SQLite, Redis and NATS JetStream, all on one host: 16,000 tracks at 1 Hz
  • Codecs: JSON, XML, CoT, protobuf, SAPIENT (BSI Flex 335), STANAG 4607
  • Outputs: NATS JetStream and TAK (CoT), with OpenTelemetry for operations
  • Plugins in Rust, Python or WASM: codecs, trackers, pairing scorers
  • SAML SSO, roles, mutual TLS and signed multi-node sync
  • A benchmark that scores every change against truth (GOSPA, IDF1)

Administrator guide →
Reference →