This organization hosts the source code for the MobilityDB ecosystem — an open-source platform for geospatial trajectory data management and analysis.
For the conceptual overview, type system, tutorials, quickstarts, and encoding specifications, see libmeos.org — the project's public front door. This page is the repository map: where each piece of code lives.
The project is developed by the Computer & Decision Engineering Department of the Université libre de Bruxelles (ULB) under the direction of Prof. Esteban Zimányi. ULB is an OGC Associate Member and member of the OGC Moving Feature Standard Working Group (MF-SWG).
Detailed explanations and application scenarios are in the project's textbook:
Mahmoud Sakr, Alejandro Vaisman, Esteban Zimányi. Mobility Data Science: From Data to Insights. Springer, 2025.
The companion datasets and reproducible scripts live in MobilityDataScienceBook.
Each section below maps to a colored box in the figure (its heading marker matches the box color); each bullet is one of that box's inner components.
The interchange band drawn beneath MEOS: trajectories move between the engines and a Temporal Data Lake without re-encoding — the data-side complement of the SQL layers' portable computation. Both properties are catalogued in the mobility-platform interoperability index (in MobilityDB, doc/temporal-parquet/).
- Arrow C Data Interface — the zero-copy in-memory form MEOS exposes, so engines share trajectories without re-encoding (Apache Arrow standard).
- TemporalParquet — the on-disk form: a Parquet footer convention for temporal types (RFC #870).
- Temporal Data Lake — the storage architecture: trajectories as Apache Iceberg tables under an Apache Polaris REST catalog (RBAC, multi-tenancy, credential vending), read by columnar engines such as Polars straight off the Arrow stream (RFC #913).
- MEOS — Mobility Engine, Open Source: the canonical C library underlying every other piece.
MEOS-API is a machine-readable description of the MEOS C-library API, generated from the MEOS headers via libclang:
- IDL JSON (
meos-api.json) — the function and type catalog. - Shape-metadata catalog — argument/return shape annotations for faithful code generation.
From this catalog the ecosystem generates the language bindings (PyMEOS, JMEOS, GoMEOS, meos-rs, MEOS.NET, MEOS.js — JMEOS also backs the MobilityFlink and MobilityKafka stream layers) and the HTTP API contracts (OpenAPI / MCP / runtime server, shown in the HTTP / API layer below).
Three SQL surfaces share the same MEOS-backed type system, function catalog, and BerlinMOD reference queries — the same query text runs against any of the three. The parity contract: the same BerlinMOD reference queries run across all three surfaces and must return identical results, validated by the cross-platform conformance suite in MobilityDB-BerlinMOD.
- MobilityDB · PostgreSQL — the project's reference SQL surface (PostgreSQL extension), spatiotemporally indexed via mest.
- MobilityDuck · DuckDB — peer SQL layer for analytics / columnar workloads.
- MobilitySpark · Apache Spark — peer SQL layer for distributed, large-scale workloads (MEOS-backed UDFs + DataFrame integration).
The same edge-to-cloud model runs on the streaming side, each tool in its canonical role. The published reference architecture is MobilityNebula (EDBT 2026), with real railway data (SNCB) as the application demonstration. The parity contract matches the SQL-layer one: the same BerlinMOD reference queries run across all three platforms in three streaming forms — continuous (always-on), windowed (tumbling / sliding / session), and snapshot (query at time T, ≡ the batch result at the same scale factor) — the snapshot form anchored to the batch BerlinMOD outputs. The Flink and Kafka platforms reach MEOS through a single MEOSBridge over JMEOS; MobilityNebula calls MEOS C directly.
- MobilityNebula · NebulaStream — the edge.
- MobilityKafka · Apache Kafka — the streaming transport backbone.
- MobilityFlink · Apache Flink — stream processing in the cloud.
- MobilityAPI · OGC API – Moving Features — server over moving-feature collections, built on MobilityDB via PyMEOS.
Three further HTTP surfaces are projected from the MEOS-API catalog over the MEOS algebra:
- OpenAPI — an OpenAPI 3.1 contract.
- MCP — a Model Context Protocol tool manifest, so LLMs / agents call the MEOS algebra directly.
- runtime — a runnable HTTP server, auto-generated from the catalog, that serves each MEOS function as an endpoint; the MEOS backend behind it is swappable (a compiled
libmeos, or a stub for testing).
Each binding follows its language community's naming convention.
- PyMEOS — Python; the reference binding, and the basis for MobilityPandas and MobilityAPI.
- JMEOS — Java / JVM; also backs the MobilityFlink and MobilityKafka stream layers via
MEOSBridge. - GoMEOS — Go; idiomatic wrappers over the MEOS C ABI.
- meos-rs — Rust; safe bindings to MEOS.
- MEOS.NET — .NET / C#; MEOS for the .NET runtime.
- MEOS.js — JavaScript / TypeScript; MEOS in the browser and Node.
- MobilityPandas — MovingPandas backed by PyMEOS.
- MobilityOpenTripPlanner — OpenTripPlanner multimodal trip planning.
- MobilityMapMatching — map matching as a service.
- MobilityDB-PublicTransport — GTFS / NeTEx integration.
- MobilityDeck — deck.gl.
- MobilityFlink-Deck — deck.gl on the Flink stream layer.
- MobilityOpenLayers — OpenLayers.
- MobilityLeaflet — Leaflet.
- MobilityQGIS — QGIS integration.
- MobilityGeoServer — GeoServer.
- MOVE — QGIS plugin for visualizing MobilityDB query results.
- Franchise — notebook SQL client for exploring MobilityDB / MEOS-backed SQL.
- MobilityDB-AWS — deployment recipes and images for Amazon Web Services.
- MobilityDB-Azure — deployment recipes and images for Microsoft Azure.
- MobilityDB-GCP — deployment recipes and images for Google Cloud Platform.
- MobilityDB-docker — official Docker images for MobilityDB.
- meos-feedstock — conda-forge feedstock for the MEOS C library.
- pymeos-feedstock — conda-forge feedstock for PyMEOS.
- pymeos-cffi-feedstock — conda-forge feedstock for PyMEOS-CFFI.
BerlinMOD is the project's benchmark — a synthetic-trajectory generator and moving-object-database comparison tool that generates data on an OpenStreetMap base map via pgRouting, and the cross-platform conformance suite for the portable SQL dialect: the same queries run on all three SQL surfaces and must return identical results.
- MobilityDB-BerlinMOD — the BerlinMOD generator and benchmark itself.
- MobilityDB-Brussels — BerlinMOD instantiated on the Brussels base map (default).
- MobilityDB-BerlinMOD-Hanoi — BerlinMOD instantiated on the Hanoi (Vietnam) base map.
- MobilityDB-workshop — hands-on workshop materials.
- MobilityDataScienceBook — companion datasets and scripts for the textbook.
- libmeos-website — source of libmeos.org, the project's public front door.
- mobilitydb-website — source of the MobilityDB project website.
- MobilityDB-Semantic — semantic trajectories in MobilityDB; reproducible artifacts accompanying the research.
- MobilityDB-TPCDS — a TPC-DS-based temporal data-warehouse benchmark; reproducible artifacts accompanying the temporal-OLAP article.
mest provides Multi-Entry GiST and SP-GiST access methods for PostgreSQL — variants of GiST / SP-GiST that index complex and composite types more efficiently. The repository ships three extensions:
- mest — multi-entry R-tree / Quadtree for the PostgreSQL
multirangeandpathtypes. - postgis-mest — multi-entry R-tree / Quadtree / Kd-tree for PostGIS
geometry/geography. - mobilitydb-mest — the same for MobilityDB's MEOS types (
spanset,tgeompoint) — the spatiotemporal indexes MobilityDB relies on, including in the cross-platform BerlinMOD benchmark.
Preserved in read-only form for historical reference and to keep existing links resolvable. Each carries an in-README banner pointing at its successor.
- MobilityDB-python → PyMEOS
- MobilityDB-JDBC → JMEOS
- pg_mfserv → MobilityAPI
- MobilityPySpark → MobilitySpark
| If you want to… | Go to |
|---|---|
| Understand what MEOS is, the type system, encodings, tutorials | libmeos.org |
| Use the SQL surface | MobilityDB (PostgreSQL), MobilityDuck (DuckDB), or MobilitySpark (Spark) |
| Process trajectories as streams | MobilityNebula (NebulaStream), MobilityKafka (Kafka), or MobilityFlink (Flink) |
| Serve or call MEOS over HTTP | MobilityAPI — OGC API – Moving Features over feature collections; MEOS-API — an OpenAPI 3.1 contract, an MCP tool manifest and a runtime server over the MEOS algebra |
| Move data between engines / build a data lake | The Arrow C Data Interface export + Parquet / TemporalParquet; the Temporal Data Lake stores to Apache Iceberg under an Apache Polaris catalog, read by Polars — see the interoperability index in MobilityDB (doc/temporal-parquet/) |
| Use MEOS from your language | PyMEOS (Python), JMEOS (Java / JVM), GoMEOS (Go), meos-rs (Rust), MEOS.NET (.NET / C#), or MEOS.js (JavaScript / TypeScript) |
| Cite the project in academic work | The book reference above; or the CITATION.cff of any binding repo |
The MobilityDB project has received funding from the European Union's Horizon Europe research and innovation programme under grant agreements No 101070279 MobiSpaces and No 101093051 EMERALDS.


