Skip to content
@MobilityDB

MobilityDB

MobilityDB Ecosystem

MobilityDB Logo

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).

OGC Associate Member Logo

Book

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.

Mobility Data Science Book

Repository map

MobilityDB Ecosystem — MEOS C core as the foundation; MobilityDB/MobilityDuck/MobilitySpark SQL layers, MobilityNebula/MobilityKafka/MobilityFlink stream layers, MobilityAPI plus the MEOS-API OpenAPI/MCP/runtime contracts as the HTTP/API layer, and six language bindings as peer surfaces; MEOS-API as a side codegen catalog (IDL JSON + shape catalog); application, visualization and cloud as the top layer; a portable-data band (Arrow C Data Interface, TemporalParquet, Temporal Data Lake) beneath MEOS

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.

🟩 Portable data

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).

🟪 Core C library

  • MEOS — Mobility Engine, Open Source: the canonical C library underlying every other piece.

🟫 Tooling

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).

🟦 SQL layers

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.

🟥 Stream layers

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.

🟩 HTTP / API layer

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).

🟪 Language bindings

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.

🟨 Application platforms

🟧 Visualization and UI integrations

🟦 Cloud and deployment

📦 Packaging / distribution

📊 Datasets and benchmarks

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.

🎓 Education and workshops

📖 Documentation and websites

🔬 Research

🗂️ Indexing primitives

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 multirange and path types.
  • 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.

🗄️ Archived

Preserved in read-only form for historical reference and to keep existing links resolvable. Each carries an in-README banner pointing at its successor.

Where to start

If you want to…Go to
Understand what MEOS is, the type system, encodings, tutorialslibmeos.org
Use the SQL surfaceMobilityDB (PostgreSQL), MobilityDuck (DuckDB), or MobilitySpark (Spark)
Process trajectories as streamsMobilityNebula (NebulaStream), MobilityKafka (Kafka), or MobilityFlink (Flink)
Serve or call MEOS over HTTPMobilityAPIOGC 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 lakeThe 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 languagePyMEOS (Python), JMEOS (Java / JVM), GoMEOS (Go), meos-rs (Rust), MEOS.NET (.NET / C#), or MEOS.js (JavaScript / TypeScript)
Cite the project in academic workThe book reference above; or the CITATION.cff of any binding repo

Acknowledgements

EU Flag

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.

Pinned Loading

  1. MobilityDBMobilityDBPublic

    MobilityDB is a geospatial trajectory data management & analysis platform, built on PostgreSQL and PostGIS.

    C 621 84

  2. PyMEOSPyMEOSPublic

    Python binding for the MEOS library

    Python 23 11

  3. MobilityDB-workshopMobilityDB-workshopPublic

    Source, data, and docs for the MobilityDB workshop

    Dockerfile 10 7

  4. MobilityDB-BerlinMODMobilityDB-BerlinMODPublic

    BerlinMOD benchmark, a data generator and a tool for comparying Moving Object Databases

    PLpgSQL 9 10

  5. mestmestPublic

    Multi-Entry Seach Trees for PostgreSQL

    C 11 3

Repositories

Showing 10 of 59 repositories

Top languages

Loading…

Most used topics

Loading…