Skip to content
Merged
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
1 change: 1 addition & 0 deletions pages/memgraph-zero/memgql/_meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ export default {
"reference": "Reference",
"licensing": "Licensing",
"changelog": "Changelog",
"telemetry": "Telemetry",
}
61 changes: 61 additions & 0 deletions pages/memgraph-zero/memgql/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,67 @@ description: MemGQL release notes

# MemGQL Changelog

## MemGQL v0.13.0 - October 7th, 2026

### 🍃 New features & Improvements

- **Multi-label vertex mappings.** A vertex may declare
`"labels": ["Cat", "Animal"]` instead of a single `label`. The first label
identifies the mapping; the others may be shared with other mappings. A
pattern on a shared label (`MATCH (a:Animal)`) reads every table that
carries it as one `UNION` inside the connector, resolving shared property
names through each table's own columns and returning `null` for a property
only some of them declare. Returned nodes carry all of their labels. See
[Vertices](/memgraph-zero/memgql/schema-file#vertices).
- **`--bolt-address` and `--bolt-port`.** The Bolt listener's interface and
port as flags, alongside `BOLT_LISTEN_ADDR`; each flag replaces only its half
of the address, so `--bolt-port=7690` starts a second server beside the
first. `--bolt-address=127.0.0.1` keeps a server local. See
[Configuration](/memgraph-zero/memgql/reference#configuration-reference).
- **Join edges within one connector.** `mappedJoinSource` now also links two
tables in the same relational connector — the case where a row carries the
target's *business key* rather than a foreign key into its `metaFields.id`,
which a table-backed edge cannot express. The traversal is pushed down as a
single `JOIN`, so aggregates across it work and no federated join is
involved. See
[Cross-connector edges](/memgraph-zero/memgql/schema-file#cross-connector-edges).
- **Usage telemetry.** MemGQL sends anonymous usage data to Memgraph: a start
and shutdown record with basic host facts and, every hour, the peak number
of connectors, connections and graphs plus the number of mappings. It never
includes your data, schema, or queries. Start the server with
`--telemetry-enabled=false` to turn it off. See
[Telemetry](/memgraph-zero/memgql/telemetry).

### ⚠️ Behavior changes

- **MemGQL listens on every interface by default.** The Bolt listener binds
`0.0.0.0:7688` instead of `127.0.0.1:7688`, matching Memgraph's own
`--bolt-address` default, so a published container port or a Kubernetes
Service reaches it without `BOLT_LISTEN_ADDR`. Anything that can route to
the host can now open a session: set `--bolt-address=127.0.0.1` (or
`BOLT_LISTEN_ADDR=127.0.0.1:7688`) where the server should stay local, and
the `server.listen_addr` row of `SHOW CONFIG` reports what it bound.
- **A label the mapping does not declare now matches nothing.**
`MATCH (p:Person&Vip)` (GQL; `(p:Person:Vip)` in Cypher) on a `Person` table
that does not carry `Vip` returns no rows. Previously the second label was
ignored and every `Person` came back.

### 🐞 Bug fixes

- `SHOW STATS CONNECTORS` missed queries that routed by label to a single
connector; only federated and `USE`-qualified queries were counted.

### 🚧 Known limitations

- A shared label is unioned within one connector only; shared across
connectors it is refused by routing as ambiguous. A node matched through a
shared label cannot be traversed from, `INSERT`ed, or have JSON keys read
through it — each refusal names the identifying label to use instead. See
[Known limitations](/memgraph-zero/memgql/reference#known-limitations).
- A join edge inside one connector cannot be traversed with a variable-length
step, and both endpoints on a Memgraph or Neo4j connector are refused in
favour of `mappedGraphSource`.

## MemGQL v0.12.0 - September 14th, 2026

### ⚠️ Breaking changes
Expand Down
7 changes: 3 additions & 4 deletions pages/memgraph-zero/memgql/complete.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,13 @@ Save the following as `docker-compose.yml`:
```yaml
services:
memgql:
image: ${MEMGQL_IMAGE:-memgraph/memgql:0.12.0}
image: ${MEMGQL_IMAGE:-memgraph/memgql:0.13.0}
container_name: memgql
ports:
- "7688:7688"
environment:
CONNECTOR_TYPE: ${CONNECTOR_TYPE:-multi}
MEMGRAPH_URI: memgraph:7687
BOLT_LISTEN_ADDR: 0.0.0.0:7688
# To enable enterprise features, set these in a .env file or via CLI:
# MEMGQL_ENTERPRISE_LICENSE=mglk-...
# MEMGQL_ORGANIZATION_NAME=your-org
Expand Down Expand Up @@ -183,7 +182,7 @@ services:
- memgql-net

lab:
image: memgraph/lab:3.13.1
image: memgraph/lab:3.13.2
container_name: lab
ports:
- "3000:3000"
Expand Down Expand Up @@ -260,7 +259,7 @@ Wait for all containers to become healthy:
docker compose ps
```

You should see all eight services running: `memgraph`, `memgql`, `memgql-init`,
You should see all seven services running: `memgraph`, `memgql`, `memgql-init`,
`lab`, `postgres`, `memgql-mcp`, and `structured2graph`. The `memgql-init`
container registers both connectors and exits; this is expected.

Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/clickhouse.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ docker run --rm \
--env CLICKHOUSE_URL=http://clickhouse-dev:8123 \
--env CLICKHOUSE_DB=default \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/duckdb.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ docker run --rm \
--env CONNECTOR_TYPE=duckdb \
--env DUCKDB_PATH=/data/graph.duckdb \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./data:/data \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/fabric.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ docker run --rm \
--stop-timeout 2 \
-p 7688:7688 \
--env CONNECTOR_TYPE=multi \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/hana.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ docker run --rm \
--stop-timeout 2 \
-p 7688:7688 \
--env CONNECTOR_TYPE=multi \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
12 changes: 5 additions & 7 deletions pages/memgraph-zero/memgql/connect/iceberg.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ docker run -d --rm \
-p 9001:9001 \
--env MINIO_ROOT_USER=admin \
--env MINIO_ROOT_PASSWORD=password \
quay.io/minio/minio server /data --console-address ":9001"
cgr.dev/chainguard/minio server /data --console-address ":9001"

# Create the warehouse bucket.
docker exec minio-dev sh -c \
"mc alias set local http://localhost:9000 admin password && \
mc mb --ignore-existing local/warehouse"
# Create the warehouse bucket once MinIO answers.
until curl -sf http://localhost:9000/minio/health/live; do sleep 1; done
curl --aws-sigv4 "aws:amz:us-east-1:s3" --user admin:password \
-X PUT http://localhost:9000/warehouse

# Iceberg REST Catalog backed by MinIO.
docker run -d --rm \
Expand Down Expand Up @@ -154,7 +154,6 @@ docker run --rm \
--env ICEBERG_DIRECT_S3_ACCESS_KEY_ID=admin \
--env ICEBERG_DIRECT_S3_SECRET_ACCESS_KEY=password \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down Expand Up @@ -246,7 +245,6 @@ docker run --rm \
--env TRINO_CATALOG=iceberg \
--env TRINO_SCHEMA=default \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/memgraph.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ docker run --rm \
-p 7688:7688 \
--env CONNECTOR_TYPE=memgraph-gql \
--env MEMGRAPH_URI=memgraph-dev:7687 \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
memgraph/memgql:latest
```

Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/mongodb.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ docker run --rm \
--env MONGODB_URL=mongodb://mongodb-dev:27017 \
--env MONGODB_DB=test \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
--mount type=bind,source="$PWD/mapping.json",target=/data/mapping.json,readonly \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/mysql.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ docker run --rm \
--env CONNECTOR_TYPE=mysql \
--env MYSQL_URL="mysql://root:mysql@mysql-dev:3306/test" \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/neo4j.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ docker run --rm \
--env NEO4J_URI=neo4j-dev:7687 \
--env NEO4J_USER=neo4j \
--env NEO4J_PASS=password \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
memgraph/memgql:latest
```

Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/oracle.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ docker run --rm \
--env CONNECTOR_TYPE=oracle \
--env ORACLE_URL="oracle://system:oracle@oracle-dev:1521/FREEPDB1" \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/pinot.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ docker run --rm \
--env PINOT_URL=http://pinot-broker-dev:8099 \
--env PINOT_QUERY_OPTIONS=useMultistageEngine=true \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/postgres.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ docker run --rm \
--env CONNECTOR_TYPE=postgres \
--env POSTGRES_URL="host=postgres-dev user=postgres password=postgres dbname=postgres" \
--env MAPPING_FILE=/data/mapping.json \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/snowflake.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,6 @@ docker run --rm \
--stop-timeout 2 \
-p 7688:7688 \
--env CONNECTOR_TYPE=multi \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
-v ./rsa_key.p8:/data/rsa_key.p8 \
memgraph/memgql:latest
Expand Down
1 change: 0 additions & 1 deletion pages/memgraph-zero/memgql/connect/sqlserver.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ docker run --rm \
--stop-timeout 2 \
-p 7688:7688 \
--env CONNECTOR_TYPE=multi \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v ./mapping.json:/data/mapping.json \
memgraph/memgql:latest
```
Expand Down
1 change: 1 addition & 0 deletions pages/memgraph-zero/memgql/licensing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ MemGQL is built with the following open-source libraries:
| [neo4rs](https://crates.io/crates/neo4rs) | Neo4j/Memgraph Bolt protocol driver | MIT |
| [oracle-rs](https://crates.io/crates/oracle-rs) | Pure-Rust Oracle TNS protocol driver | MIT / Apache-2.0 |
| [parquet](https://crates.io/crates/parquet) | Apache Parquet columnar file format | Apache-2.0 |
| [redb](https://crates.io/crates/redb) | Embedded key-value store (telemetry buffer) | MIT / Apache-2.0 |
| [postgres](https://crates.io/crates/postgres) | PostgreSQL synchronous client | MIT / Apache-2.0 |
| [reqwest](https://crates.io/crates/reqwest) | HTTP client | MIT / Apache-2.0 |
| [rust_decimal](https://crates.io/crates/rust_decimal) | Fixed-precision decimal numbers | MIT |
Expand Down
2 changes: 0 additions & 2 deletions pages/memgraph-zero/memgql/quick-start.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ docker run --rm \
-p 7688:7688 \
--env CONNECTOR_TYPE=memgraph-gql \
--env MEMGRAPH_URI=memgraph-dev:7687 \
--env BOLT_LISTEN_ADDR=0.0.0.0:7688 \
memgraph/memgql:latest
```

Expand Down Expand Up @@ -290,7 +289,6 @@ stop the MemGQL container you started earlier (Ctrl-C) to free port 7688:
```bash
docker run --rm -p 7688:7688 \
--network memgql-net \
-e BOLT_LISTEN_ADDR=0.0.0.0:7688 \
-v "$(pwd)/schema.json:/data/schema.json" \
memgraph/memgql:latest --schema=/data/schema.json
```
Expand Down
12 changes: 11 additions & 1 deletion pages/memgraph-zero/memgql/reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ supports.
| Multiple chained `WITH` steps in one query | ✓ | ✓ | ✓ |
| Pass a whole node through `WITH n` to a later step | ✓ | ✓ | ✓ |
| `MATCH (n)-[r:R]->(m)` typed edge expansion | ✓ | ✓ | ✓ |
| Multi-label pattern `(n:A&B)`; shared label over several mappings | ✓ | ✓ | ✗ |
| Untyped edge `()-[]->(b)` (union over types) | ✓ | ✗ | ✗ |
| `UNION` / `UNION ALL` / `UNION DISTINCT` | ✓ | ✓ | ✗ |
| `INTERSECT` / `EXCEPT` | ✓ | ✓ | ✗ |
Expand Down Expand Up @@ -73,6 +74,13 @@ supports.
`MATCH p = (a){1,3}(b) RETURN p` is not yet supported on SQL backends or
MongoDB. Drop the `p =` binding (or query a Cypher backend) and `RETURN` the
individual nodes / edges instead.
- **Shared labels** (a label listed by several vertex mappings, see
[Vertices](/memgraph-zero/memgql/schema-file#vertices)) are unioned only
within one connector; a label shared across connectors is refused by routing
as ambiguous. A pattern matched through a shared label can be returned,
filtered, sorted and aggregated, but not traversed from (`(a:Animal)-[:R]->()`),
not `INSERT`ed, and JSON keys (`a.props.key`) cannot be read through it —
each is refused with a pointer to the identifying label to use instead.

#### MongoDB-specific

Expand Down Expand Up @@ -407,7 +415,7 @@ for property-level introspection. See
|---------------------------|------------------|-------------------------------------------------------------------|
| `CONNECTOR_TYPE` | `memgraph` | Connector to use (see table below) |
| `CONNECTION_TYPE` | _(none)_ | Alias for `CONNECTOR_TYPE` |
| `BOLT_LISTEN_ADDR` | `127.0.0.1:7688` | Address the Bolt server binds to |
| `BOLT_LISTEN_ADDR` | `0.0.0.0:7688` | `<ip>:<port>` the Bolt listener binds — every interface by default, as in Memgraph. Use `127.0.0.1:7688` to accept only connections from the same host. An IP, not a hostname; IPv6 in brackets (`[::]:7688`). `--bolt-address` / `--bolt-port` override it. |
| `MEMGQL_DEFAULT_LANGUAGE` | `gql` | [Query language](/memgraph-zero/memgql/reference#query-languages) for bare (unprefixed) queries |

### Logging
Expand All @@ -421,6 +429,8 @@ CLI flags on the Bolt server binary.

| Flag | Default | Description |
|----------------------------|--------------------|------------------------------------------------------|
| `--bolt-address=<IP>` | `0.0.0.0` | Interface the Bolt listener binds; `127.0.0.1` refuses connections from other hosts. An IP, not a hostname; IPv6 bare (`::`). |
| `--bolt-port=<PORT>` | `7688` | Port the Bolt listener binds (`--bolt-server=<PORT>` is a synonym). Each flag replaces only its half of `BOLT_LISTEN_ADDR`. |
| `--log-level=<LEVEL>` | `INFO` | Logging verbosity for console and file (see below) |
| `--log-file=<PATH>` | `bolt_server.log` | File to mirror the (level-filtered) log output to |
| `--default-language=<L>` | `gql` | [Query language](/memgraph-zero/memgql/reference#query-languages) for bare queries (`gql` / `cypher`) |
Expand Down
Loading
Loading