OpenAltFinder
Velocity

Velocity

Self-hosted, keyless flight, ship and satellite tracker that keeps a replayable history you own, with source provenance on every contact.

Open source alternative to:

hero-world.jpeg
places-airspace.jpeg
replay-scrubber.jpeg
hero-replay.gif
rail-layers.jpeg
ui-explorer.png
inspector-selection.jpeg
1 / 7

Velocity is a self-hosted geospatial tracking console for aircraft, vessels, satellites, GPS jamming, dark-vessel candidates, temporary flight restrictions, military bases, ports, earthquakes, internet outages, and conflict events. Everything draws on one CesiumJS WebGL2 globe, and the core feeds need no API key: ADS-B comes from OpenSky, airplanes.live, adsb.lol and FR24, AIS from ShipXplorer, MyShipTracking, Digitraffic and Kystverket, quakes from USGS and EMSC, and satellites from CelesTrak. Optional keys (AISStream, an OpenSky login, NASA FIRMS, ACLED, Cloudflare) only widen coverage.

The feature the project leads with is history you own. Positions are written to a Postgres + TimescaleDB hypertable with 6-hour chunks and columnar compression, with SQLite as the keyless fallback, and a time dock scrubs the globe back through 1h, 6h, 24h, 3d, and 7d windows with playback from 1x to 3600x. Aircraft can also reach back to 2024 through public readsb heatmap archives that the backend proxies and caches. Depth is bounded by your disk, and /api/history/coverage reports the real recorded window rather than a configured ceiling.

Every contact carries provenance: which independent sources reported it, how many agreed, and how old the actual fix is, with a per-source /api/status/provenance view of how many contacts each feed alone is seeing. On top of the live picture sit a watch-officer inbox that fuses jamming, dark vessels, military air activity, and conflict events into ranked, cited alerts; an evidence locker that hashes captures with SHA-256 and appends them to a custody chain; case exports as JSON, self-contained HTML, or PPTX; a Foundry layer for bringing in CSV, JSON, or NDJSON through governed pipelines; and a Workflows node graph for automating the feeds. The backend also runs as an MCP server so an AI agent can query the same warm feeds, and the repo ships a Claude Code plugin with an analyst skill and slash commands.

Compared with Flightradar24, MarineTraffic, and ADS-B Exchange, Velocity is not a better live feed: the underlying community data is largely the same. What changes is the paywall and the archive. There is no account, no key, and no vendor truncating replay to 7 days or 24 hours, but you supply the disk and the box, and you absorb the third-party terms of the sources it scrapes. It is explicitly a single-analyst tool: live derived state such as incidents and briefs clears on restart, AIS coverage is densest over Northern Europe, and the 3D satellite mode is VRAM-heavy.

Frequently Asked Questions

Which feeds work without any API keys?

Aircraft, vessels, earthquakes, satellites, and the basemap all run keyless. ADS-B is merged from OpenSky, airplanes.live, adsb.lol, and FR24, AIS from ShipXplorer, MyShipTracking, Digitraffic, and Kystverket, quakes from USGS and EMSC, and satellites from CelesTrak. Optional keys only add reach: AISStream for dense global AIS, an OpenSky login for a bigger ADS-B budget, NASA FIRMS for wildfire hotspots, ACLED for conflict events, and a Cloudflare token for outages. GET /api/intel/sources reports what is actually live versus waiting on a key.

How much disk space does the history archive need?

Budget roughly 3 GB per hour for a keyless box pulling global ADS-B and AIS at full breadth, which means a true 48-hour archive needs on the order of 150 GB. The dev Compose profile caps storage at HISTORY_MAX_BYTES of 2 GB and a 48-hour ceiling, so the byte cap binds first and effective depth is under two hours out of the box. Raise the byte cap, or set ARCHIVE_MODE=1 with HISTORY_DISK_BUDGET_GB, and check /api/history/coverage for the depth actually recorded.

Can an AI agent query the live feeds?

Yes. The backend doubles as a Model Context Protocol server mounted at /mcp, exposing the same analytics the console uses through tools such as get_situation, focus_area, query_aircraft, gps_jamming, query_vessels, detect_deception, whats_changed, and deep_analyze. It runs over streamable HTTP or stdio, and responses are bounded JSON with short and long detail modes so an agent sweeps cheaply and drills in. deep_analyze uses DeepSeek when configured, otherwise a local Ollama model, and degrades to raw JSON if neither is available. The repo also ships a Claude Code plugin with an analyst skill and slash commands.

What hardware does Velocity need?

The backend is light: Python 3.12 with outbound HTTPS, about 530 MB steady-state RSS in the default lite profile and around 3.2 GB with all direct feeds warm. The optional headless-Chrome coverage sidecars are the real cost, roughly 15 GB on top when both are enabled. The client needs a WebGL2 browser; the default 2D-dark basemap runs on integrated graphics with 2 to 4 GB VRAM, while 3D satellite with terrain and 3D buildings measured 20+ GB on a 32 GB card. Docker 24+ with the Compose plugin is the easiest path.

Can I feed in my own ADS-B receiver?

Yes. Point ADSB_FEED_URLS at your tar1090 aircraft.json endpoint, for example http://192.168.1.20:8080/data/aircraft.json, and your receiver's contacts join the same picture and get archived like any other source. Contacts are merged by ICAO address with the freshest fix winning. The variable replaces the default feed list entirely, so keep the defaults in it if you still want public coverage, and use the receiver's LAN address rather than localhost when running inside Docker.

AI usage detected - recent commits in this repository appear to include AI-generated code.
OpenAltFinder Score
54/100
Project Health (50%)
32/100
License (20%)
40/100
Self-hostable (20%)
100/100
Recency (10%)
100/100
How scoring works
Project Details
Platforms
Web
License
AGPL-3.0
Self hostable
Yes
AI Contributions
Detected
Repository details
Version
v1.2.0
Created
6/12/2026
Stars
106
Forks
18
Open issues
7
Last commit
10/22/2026

Updated 10/22/2026, 10:00:16 AM

View Repository