Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 37 additions & 26 deletions profile/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,41 +24,47 @@ The companion datasets and reproducible scripts live in [MobilityDataScienceBook

## Repository map

<img src="https://raw.githubusercontent.com/MobilityDB/.github/main/profile/images/mobilitydb_ecosystem.svg" width="800" alt="MobilityDB Ecosystem — MEOS core; MobilityDB, MobilityDuck and MobilitySpark as peer SQL surfaces; MEOS-API as a side codegen catalog projected to OpenAPI/MCP/runtime; a teal portable-data interchange band (Arrow C Data Interface, Parquet / Temporal Data Lake) beneath MEOS; and a dashed, ghosted PLANNED Stream-layers box (MobilityNebula, MobilityKafka, MobilityFlink) as a future fourth peer" />
<img src="https://raw.githubusercontent.com/MobilityDB/.github/main/profile/images/mobilitydb_ecosystem.svg" width="800" alt="MobilityDB Ecosystem — MEOS core; MobilityDB, MobilityDuck and MobilitySpark as peer SQL surfaces; MEOS-API as a side codegen catalog projected to OpenAPI/MCP/runtime; a teal portable-data interchange band (Arrow C Data Interface, Parquet / Temporal Data Lake) beneath MEOS; and a Stream-layers box (MobilityNebula, MobilityKafka, MobilityFlink) as a fourth peer" />

The sections below follow the figure's boxes **bottom → top, left → right**.
### 🟩 Portable data — the interchange band beneath MEOS

### 🔄 Portable data — the interchange band beneath MEOS
This is the portable-data interchange band drawn beneath MEOS in the figure. MEOS exposes a zero-copy [Arrow C Data Interface](https://arrow.apache.org/docs/format/CDataInterface.html) and a Parquet / *TemporalParquet* on-disk form, so trajectories move between the engines and a **Temporal Data Lake** without re-encoding. It is the data-side complement of the *portable-computation* property of the SQL layers below. Both properties — and their reproducible companions — are catalogued in the mobility-platform interoperability index (in [MobilityDB](https://github.com/MobilityDB/MobilityDB), `doc/temporal-parquet/`). On disk, the **Temporal Data Lake** is designed to store trajectories as [Apache Iceberg](https://iceberg.apache.org/) tables under an [Apache Polaris](https://polaris.apache.org/) REST catalog (RBAC, multi-tenancy, credential vending), with columnar engines such as [Polars](https://pola.rs/) reading them straight off the Arrow stream without copies.

This is the portable-data interchange band drawn beneath MEOS in the figure. MEOS exposes a zero-copy [Arrow C Data Interface](https://arrow.apache.org/docs/format/CDataInterface.html) and a Parquet / *TemporalParquet* on-disk form, so trajectories move between the engines and a **Temporal Data Lake** without re-encoding. It is the data-side complement of the *portable-computation* property of the SQL layers below. Both properties — and their reproducible companions — are catalogued in the mobility-platform interoperability index (in [MobilityDB](https://github.com/MobilityDB/MobilityDB), `doc/temporal-parquet/`).

### ⬛ Core C library
### 🟪 Core C library

| Repository | Description |
|---|---|
| [MEOS](https://libmeos.org) | Mobility Engine, Open Source — the canonical C library underlying every other piece. |

### 🟫 Tooling

[MEOS-API](https://github.com/MobilityDB/MEOS-API) is a machine-readable description of the MEOS C-library API — an IDL JSON plus a shape-metadata catalog, generated from the MEOS headers via libclang. It is the single codegen source the rest of the ecosystem draws from:

- **Language bindings** — the codegen source for PyMEOS, JMEOS, GoMEOS, MEOS.NET, meos-rs and MEOS.js.
- **Stream layers** — MobilityFlink and MobilityKafka reach MEOS through the generated JMEOS binding.
- **Service contracts** — an OpenAPI 3.1 contract, a Model Context Protocol (MCP) tool manifest (so LLMs / agents call the MEOS spatiotemporal algebra directly), and a contract-driven runtime HTTP server.

| Repository | Description |
|---|---|
| [MEOS-API](https://github.com/MobilityDB/MEOS-API) | Machine-readable description of the MEOS C-library API (an IDL JSON plus a shape-metadata catalog), generated from the MEOS headers via libclang. Beyond binding code-generation, the enriched catalog is projected into service contracts: an OpenAPI 3.1 contract, a Model Context Protocol (MCP) tool manifest (so LLMs/agents can call the MEOS spatiotemporal algebra directly), and a contract-driven runtime HTTP server. |
| [MEOS-API](https://github.com/MobilityDB/MEOS-API) | The MEOS API catalog (IDL JSON + shape metadata) and its binding / service-contract generators. |

### 🟦 SQL layers (peers above MEOS)

Three SQL surfaces share the same MEOS-backed type system, function catalog, and BerlinMOD reference queries. Portable SQL means the same query text runs against any of the three. The portable named-function dialect and its rationale are described in the [edge-to-cloud SQL portability discussion (#861)](https://github.com/MobilityDB/MobilityDB/discussions/861).

This is the platform's **portable computation** property — one query text, three engines. Its data-side complement, **portable data**, is the interchange band described in the *🔄 Portable data — the interchange band beneath MEOS* section above.
Three SQL surfaces share the same MEOS-backed type system, function catalog, and BerlinMOD reference queries. Portable SQL means 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](https://github.com/MobilityDB/MobilityDB-BerlinMOD).

| Repository | Description |
|---|---|
| [MobilityDB](https://github.com/MobilityDB/MobilityDB) | PostgreSQL extension — the project's reference SQL surface. |
| [MobilityDuck](https://github.com/MobilityDB/MobilityDuck) | DuckDB extension — peer SQL layer for analytics / columnar workloads. |
| [MobilitySpark](https://github.com/MobilityDB/MobilitySpark) | Apache Spark plugin — peer SQL layer for distributed and large-scale workloads, with MEOS-backed UDFs and DataFrame integration. |

### 🌊 Stream layers (planned)
### 🟥 Stream layers

**Planned — not yet built.** The same edge-to-cloud model is planned for the streaming side of the ecosystem, each tool in its canonical role: [MobilityNebula](https://github.com/MobilityDB/MobilityNebula) ([NebulaStream](https://nebula.stream/)) on the **edge**, [MobilityKafka](https://github.com/MobilityDB/MobilityKafka) ([Apache Kafka](https://kafka.apache.org/)) as the streaming **transport backbone** in between, and [MobilityFlink](https://github.com/MobilityDB/MobilityFlink) ([Apache Flink](https://flink.apache.org/)) for **stream processing in the cloud** — reproducing the SNCB benchmark from [*MobilityNebula* (EDBT 2026)](https://docs.mobilitydb.com/pub/MobilityNebula_EDBT_2026.pdf). It is drawn as a dashed, ghosted box — same format as the other peer boxes, second in the peers row of the figure above (dashed = not yet built).
The same edge-to-cloud model runs on the streaming side of the ecosystem, each tool in its canonical role: [MobilityNebula](https://github.com/MobilityDB/MobilityNebula) ([NebulaStream](https://nebula.stream/)) on the **edge**, [MobilityKafka](https://github.com/MobilityDB/MobilityKafka) ([Apache Kafka](https://kafka.apache.org/)) as the streaming **transport backbone** in between, and [MobilityFlink](https://github.com/MobilityDB/MobilityFlink) ([Apache Flink](https://flink.apache.org/)) for **stream processing in the cloud**. The published reference architecture is [*MobilityNebula* (EDBT 2026)](https://docs.mobilitydb.com/pub/MobilityNebula_EDBT_2026.pdf), with real railway data (SNCB) as the application demonstration. It is the second peer in the row of peer surfaces in the figure above.

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)** — with the snapshot form anchored to the batch BerlinMOD outputs in [MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD). The same generator and scale-factor axis as the batch side are reused.

The Flink and Kafka platforms reach MEOS through a single `MEOSBridge` over [JMEOS](https://github.com/MobilityDB/JMEOS) — calling MEOS' `geog_dwithin` over WGS84 geographies via its `utils.spatial.Haversine` and `utils.spatial.PointToSegment` wrappers, with a pure-Java great-circle fallback when libmeos is not loadable. MobilityNebula calls MEOS C directly, with the BerlinMOD-specific aggregations (`TEMPORAL_LENGTH`, `PAIR_MEETING`, `CROSS_DISTANCE`) wired across NebulaStream's logical / physical / parser / lowering layers.

| Repository | Engine |
|---|---|
Expand All @@ -70,7 +76,7 @@ This is the platform's **portable computation** property — one query text, thr

| Repository | Description |
|---|---|
| [MobilityAPI](https://github.com/MobilityDB/MobilityAPI) | HTTP server implementing the OGC API – Moving Features Standard. |
| [MobilityAPI](https://github.com/MobilityDB/MobilityAPI) | OGC API – Moving Features server, built on MobilityDB via PyMEOS — REST (GET/POST/PUT/DELETE) over collections of moving features. |

### 🟪 Language bindings of MEOS

Expand Down Expand Up @@ -99,15 +105,15 @@ Each binding follows its language community's naming convention.
| Repository | Stack |
|---|---|
| [MobilityDeck](https://github.com/MobilityDB/MobilityDeck) | [deck.gl](https://deck.gl/) |
| [MobilityFlink-Deck](https://github.com/MobilityDB/MobilityFlink-Deck) | [deck.gl](https://deck.gl/) on the planned Flink stream layer |
| [MobilityFlink-Deck](https://github.com/MobilityDB/MobilityFlink-Deck) | [deck.gl](https://deck.gl/) on the Flink stream layer |
| [MobilityOpenLayers](https://github.com/MobilityDB/MobilityOpenLayers) | [OpenLayers](https://openlayers.org/) |
| [MobilityLeaflet](https://github.com/MobilityDB/MobilityLeaflet) | [Leaflet](https://leafletjs.com/) |
| [MobilityQGIS](https://github.com/MobilityDB/MobilityQGIS) | [QGIS](https://qgis.org/) integration |
| [MobilityGeoServer](https://github.com/MobilityDB/MobilityGeoServer) | [GeoServer](https://geoserver.org/) |
| [MOVE](https://github.com/MobilityDB/move) | QGIS plugin for visualizing MobilityDB query results |
| [Franchise](https://github.com/MobilityDB/Franchise) | Notebook SQL client for exploring MobilityDB / MEOS-backed SQL |

### 🔵 Cloud and deployment
### 🟦 Cloud and deployment

| Repository | Target |
|---|---|
Expand All @@ -124,15 +130,17 @@ Each binding follows its language community's naming convention.
| [pymeos-feedstock](https://github.com/MobilityDB/pymeos-feedstock) | conda-forge feedstock for PyMEOS. |
| [pymeos-cffi-feedstock](https://github.com/MobilityDB/pymeos-cffi-feedstock) | conda-forge feedstock for PyMEOS-CFFI. |

### 🟤 Datasets and benchmarks
### 📊 Datasets and benchmarks

[BerlinMOD](https://secondo-database.github.io/BerlinMOD/BerlinMOD.html) is the project's benchmark — a synthetic-trajectory generator and moving-object-database comparison tool that generates data on an [OpenStreetMap](https://www.openstreetmap.org/) base map via [pgRouting](https://pgrouting.org/), and serves as the cross-platform conformance suite for the portable SQL dialect: the same queries run on all three SQL surfaces and must return identical results.

| Repository | Description |
|---|---|
| [MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD) | [BerlinMOD](https://secondo-database.github.io/BerlinMOD/BerlinMOD.html) data generator and benchmark, using [Open Street Map](https://www.openstreetmap.org/) data and [pgRouting](https://pgrouting.org/). Brussels by default; a Hanoi (Vietnam) instantiation lives in [MobilityDB-BerlinMOD-Hanoi](https://github.com/MobilityDB/MobilityDB-BerlinMOD-Hanoi). Also 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-Brussels](https://github.com/MobilityDB/MobilityDB-Brussels) | Real Brussels public-transport dataset (STIB, TLC) — companion data, not a BerlinMOD instantiation. |
| [MobilityDB-TPCDS](https://github.com/MobilityDB/MobilityDB-TPCDS) | TPC-DS benchmark adaptation. |
| [MobilityDB-BerlinMOD](https://github.com/MobilityDB/MobilityDB-BerlinMOD) | The BerlinMOD generator and benchmark itself. |
| [MobilityDB-Brussels](https://github.com/MobilityDB/MobilityDB-Brussels) | BerlinMOD instantiated on the **Brussels** base map (default). |
| [MobilityDB-BerlinMOD-Hanoi](https://github.com/MobilityDB/MobilityDB-BerlinMOD-Hanoi) | BerlinMOD instantiated on the **Hanoi** (Vietnam) base map. |

### 🟢 Education and workshops
### 🎓 Education and workshops

| Repository | Description |
|---|---|
Expand All @@ -146,19 +154,20 @@ Each binding follows its language community's naming convention.
| [libmeos-website](https://github.com/MobilityDB/libmeos-website) | Source of [libmeos.org](https://libmeos.org) — the project's public front door (concepts, type system, tutorials, bindings). |
| [mobilitydb-website](https://github.com/MobilityDB/mobilitydb-website) | Source of the MobilityDB project website. |

### 🟥 Research
### 🔬 Research

| Repository | Description |
|---|---|
| [MobilityDB-Semantic](https://github.com/MobilityDB/MobilityDB-Semantic) | Semantic-trajectory research project. |
| [MobilityDB-Semantic](https://github.com/MobilityDB/MobilityDB-Semantic) | Semantic trajectories in MobilityDB — reproducible artifacts accompanying the research. |
| [MobilityDB-TPCDS](https://github.com/MobilityDB/MobilityDB-TPCDS) | A TPC-DS-based temporal data-warehouse benchmark — reproducible artifacts accompanying the temporal-OLAP research. |

### 🟣 Indexing primitives
### 🗂️ Indexing primitives

| Repository | Description |
|---|---|
| [mest](https://github.com/MobilityDB/mest) | Multi-Entry Search Trees for PostgreSQL — generic indexing primitive used by MobilityDB. |

### Archived
### 🗄️ Archived

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

Expand All @@ -175,8 +184,10 @@ These repositories are preserved in read-only form for historical reference and
|---|---|
| Understand what MEOS is, the type system, encodings, tutorials | [libmeos.org](https://libmeos.org) |
| Use the SQL surface | [MobilityDB](https://github.com/MobilityDB/MobilityDB) (PostgreSQL), [MobilityDuck](https://github.com/MobilityDB/MobilityDuck) (DuckDB), or [MobilitySpark](https://github.com/MobilityDB/MobilitySpark) (Spark) |
| Move data between engines / build a data lake | The [Arrow C Data Interface](https://arrow.apache.org/docs/format/CDataInterface.html) export + Parquet — see the interoperability index in [MobilityDB](https://github.com/MobilityDB/MobilityDB) (`doc/temporal-parquet/`) |
| Use MEOS from your language | The corresponding [language binding](https://libmeos.org/bindings/) |
| Process trajectories as streams | [MobilityFlink](https://github.com/MobilityDB/MobilityFlink) (Flink), [MobilityKafka](https://github.com/MobilityDB/MobilityKafka) (Kafka), or [MobilityNebula](https://github.com/MobilityDB/MobilityNebula) (NebulaStream) |
| Serve or call MEOS over HTTP | [MobilityAPI](https://github.com/MobilityDB/MobilityAPI) — OGC API – Moving Features over feature collections; [MEOS-API](https://github.com/MobilityDB/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](https://arrow.apache.org/docs/format/CDataInterface.html) export + Parquet / *TemporalParquet*; the **Temporal Data Lake** stores to [Apache Iceberg](https://iceberg.apache.org/) under an [Apache Polaris](https://polaris.apache.org/) catalog, read by [Polars](https://pola.rs/) — see the interoperability index in [MobilityDB](https://github.com/MobilityDB/MobilityDB) (`doc/temporal-parquet/`) |
| Use MEOS from your language | [PyMEOS](https://github.com/MobilityDB/PyMEOS) (Python), [JMEOS](https://github.com/MobilityDB/JMEOS) (Java), [GoMEOS](https://github.com/MobilityDB/GoMEOS) (Go), [meos-rs](https://github.com/MobilityDB/meos-rs) (Rust), [MEOS.NET](https://github.com/MobilityDB/MEOS.NET) (.NET), or [MEOS.js](https://github.com/MobilityDB/MEOS.js) (JavaScript) |
| Cite the project in academic work | The book reference above; or the `CITATION.cff` of any binding repo |

## Acknowledgements
Expand Down
Loading