Every GPS receiver
trusts the sky.

We're the software that tells it when not to.

The console

One verdict, always on screen.

This is the interface behind the headline: a live replay of a spoof walk-off, the same feed an operator would watch on any platform under watch. No ambiguity, no dashboard to interpret.

TRUST SCORE · SCENARIO: SPOOF_WALKOFF TRUSTED
C/N₀ (dB-Hz)
44.1
SATELLITES
12
GPS↔IMU DRIFT
0.3 m
FLEET STATUS
  • UAV-114 · TRUSTED
  • USV-02 · TRUSTED
  • GV-7 · DEGRADED
  • UAV-114 · SPOOFED
SIGNAL HEALTH
SYSTEM LOG
The four verdicts
TRUSTED

All four checks agree. GPS is safe to feed to navigation.

DEGRADED

Something is off. Signal health is slipping or checks mildly disagree.

JAMMED

Signal drowned out. Fixes are missing or too noisy to use.

SPOOFED

The signal looks healthy but contradicts physics. Someone is lying.

Measured, not asserted

End-to-end flight log analysis.

On station-keeping flight, Navoro detects all three interference classes, instantaneous position spoofing, slow walk-off, and jamming, in 0.4 to 0.8 seconds. Walk-off is the one that matters: GPS position and velocity stay mutually consistent and the signal stays healthy, so no GPS-only check can see it. Ours does.

0.4–0.8s
Detection latency, all three interference classes
0.00%
False-positive rate, worst of 25 independent noise runs
3
Interference classes covered: spoofing, walk-off, jamming
How detection works

A spoofed signal can say anything. It can't rewrite physics.

Every GPS fix is tested against what the vehicle's own sensors say is possible, whether it's a drone, a ground vehicle, a vessel, or an aircraft. Four independent checks, none of which trusts the GPS on its own, fused into a single score, with hysteresis, so one noisy frame never flips the state.

CHECK / KINEMATICS

Kinematic consistency

Does the reported motion match what the inertial sensors say the vehicle actually did? Teleporting fixes fail here instantly.

CHECK / DEAD RECKONING

Dead-reckoned position

A short inertial estimate carried forward from the last trusted fix. Slow walk-off spoofs diverge from it and get caught.

CHECK / BAROMETER

Barometric altitude

An independent altitude channel the spoofer can't touch. GPS altitude has to agree with the air itself.

CHECK / SIGNAL

Signal health

Carrier-to-noise and satellite count from the receiver. Jamming shows up here before positions even go bad.

0.96
FUSED TRUST SCORE · 0 TO 1

One number, one state, every frame. Deterministic and pure: the same telemetry always produces the same verdict, which is exactly what you want when the verdict gets audited. Today that fusion is a documented weighted sum, not a black box, with a marked seam in the code for a learned model once we have the labelled data to train one responsibly.

Detection to decision

An alarm tells you something's wrong. We tell you what to do.

Spoofing doesn't need to bring a vehicle down to win. It only needs to make navigation untrustworthy enough that an operator hesitates or grounds the fleet, so a system that only raises an alarm hands the attacker exactly that. The mitigation layer is built and tested, not just the detector.

Hold, not follow

When trust drops, the vehicle holds its last trusted position instead of following the spoofed one.

Escalates on its own

As position confidence keeps falling, it escalates automatically toward return-and-land.

A decision, not a light

A trusted position, an honest uncertainty budget, and a live countdown of how long the mission can safely continue.

Integration

One function. Frames in, verdicts out.

# pure and deterministic. one Detection per frame
# pydantic v2 models as a frozen contract between components
from src.detector.engine import run

detections = run(frames, config)

# each Detection:
#   trust_score: 0.0 to 1.0
#   state: TRUSTED | DEGRADED | JAMMED | SPOOFED

$ make setup && make run
# then http://localhost:8000, pick a scenario, hit Run

It's a library, not a platform. Feed it telemetry frames, from a flight log or a live stream, and it returns a verdict for every frame. No hardware, no SDR, no cloud dependency.

  • Software-only. Python 3.12, numpy/scipy for the dead-reckoning and signal processing, pymap3d for geodetic transforms. No additional hardware.
  • Deterministic. Same input, same output, every time. Auditable by replay.
  • Real logs in. Ingests PX4 and ArduPilot flight logs directly, via pyulog, alongside live telemetry over a FastAPI endpoint.
  • Reproducible. Every number on this page traces to a test, runnable from a single command.
  • Operator view included. Plain HTML/JS and Leaflet, no build step, drops into an existing ground station.
60 seconds to a verdict

Watch a spoof get caught in real time.

Four canonical scenarios: clean flight, spoof jump, slow walk-off, jam corridor. Streamed onto a live map, colored by trust state as detections land.

Book the demo