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.

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

🟥 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, 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 MobilityAPIOGC 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

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. MobilityDB MobilityDB Public

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

    C 610 82

  2. PyMEOS PyMEOS Public

    Python binding for the MEOS library

    Python 22 9

  3. MobilityDB-workshop MobilityDB-workshop Public

    Source, data, and docs for the MobilityDB workshop

    Dockerfile 10 7

  4. MobilityDB-BerlinMOD MobilityDB-BerlinMOD Public

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

    PLpgSQL 9 10

  5. mest mest Public

    Multi-Entry Seach Trees for PostgreSQL

    C 11 3

Repositories

Showing 10 of 56 repositories

Top languages

Loading…

Most used topics

Loading…