Skip to main content

froGQL

Embedded GQL graph database with single-file storage. Rust core, Python bindings via PyO3.

froGQL implements ISO GQL path pattern matching: MATCH, comma-joins, unions, repetitions ({n,m}), OPTIONAL MATCH, EXISTS / NOT EXISTS, WHERE, RETURN, LIMIT. The runtime uses Leapfrog Triejoin (CompactLTJ) as its primary join strategy — worst-case-optimal for multi-way joins, with measured 14×–4000× speedups over pairwise hash-join on social-graph workloads.

Install

pip install frogql

Wheels ship for CPython 3.8+ on Linux (x86_64, aarch64), macOS (x86_64, arm64), and Windows (x86_64).

Quick start

import frogql

# Open or create a .gdb database
conn = frogql.open("movies.gdb")

# Run a query — returns a list of {alias: value} dicts.
# Use `AS name` in RETURN to pick the dict key; otherwise the
# projection falls back to col0, col1, ...
rows = conn.execute(
    "MATCH (p:Person)-[:ACTED_IN]->(m:Movie) "
    "WHERE m.released = 1999 "
    "RETURN p.name AS actor, m.title AS title",
    limit=10,
)
for row in rows:
    print(row["actor"], "->", row["title"])

# Inspect the graph
print(conn.node_count, conn.edge_count)
print(conn.schema())

Bare patterns (no RETURN)

A query without RETURN projects each row as a dict of the matched variables plus a special _paths key holding the full match:

rows = conn.execute("(p:Person)-[:ACTED_IN]->(m:Movie)", limit=1)
row = rows[0]
row["p"]        # {"kind": "node", "id": ..., "labels": [...], "props": {...}}
row["m"]        # the movie node
row["_paths"]   # [[node_p, edge, node_m]] — list of paths, each a
                # list of node/edge dicts in match order

_paths is a list because comma-joined patterns produce one path per joined sub-pattern. For a single pattern, _paths[0] is the full path.

Data import

# From JSON
frogql.import_json("graph.gdb", "graph.json")

# From a CSV directory with spanner_import_config.json
frogql.import_csv("graph.gdb", "path/to/csv_dir/")

Graph types and indexes

The catalog persists inside the .gdb file. DDL is plain GQL:

conn.execute("CREATE GRAPH TYPE movies { (:Movie {title STRING, released INT}) }")
conn.execute("USE GRAPH TYPE movies")
conn.execute("VALIDATE GRAPH TYPE movies")
conn.execute("CREATE BTREE INDEX ON :Movie(released)")

A DEFAULT graph type is auto-inferred at import time. Auto-built secondary indexes (hash + btree) cover unique (label, prop) pairs and are picked up by the optimizer for constant-folding and range filters.

API surface

Call Returns
frogql.open(path) Connection
frogql.import_json(db_path, json_path) None
frogql.import_csv(db_path, csv_dir) None
Connection.execute(query, limit=100) list[dict] (with RETURN: keys = aliases or colN; without RETURN: keys = pattern variables plus _paths)
Connection.schema() dict
Connection.graph_types() list[dict]
Connection.node_count / Connection.edge_count int

Connection is not thread-safe across Python threads (PyO3 unsendable).

License

MIT. See LICENSE in the source repository.

Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

frogql-0.2.8.tar.gz (356.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

frogql-0.2.8-cp38-abi3-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.8+Windows x86-64

frogql-0.2.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

frogql-0.2.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

frogql-0.2.8-cp38-abi3-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

frogql-0.2.8-cp38-abi3-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file frogql-0.2.8.tar.gz.

File metadata

  • Download URL: frogql-0.2.8.tar.gz
  • Upload date:
  • Size: 356.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for frogql-0.2.8.tar.gz
Algorithm Hash digest
SHA256 c075bcc21a7b541f05ca7738c829e3ea549e8e70015efe213153f4b67f6dbd8d
MD5 3f128b0cc1cd1558c63553200c1c103a
BLAKE2b-256 eb3b285ad322aedb2b130906d8605bba59c76fabfddf985537eb5afa70d8073a

See more details on using hashes here.

File details

Details for the file frogql-0.2.8-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: frogql-0.2.8-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for frogql-0.2.8-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f7ebfd4a374159ba1a0f4feaee3d1be2007d657e4f8dbeede81ac378e7811c98
MD5 ccc9e49516d92f4b385703d21e74c4e0
BLAKE2b-256 cd134d712c024e57a21624ac1f715e41d733e8f902dcc2e5e659a74b63ebbb46

See more details on using hashes here.

File details

Details for the file frogql-0.2.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for frogql-0.2.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f917b2482cfaff083044256174244640abae6572a68b9b7b9ca595e2df55892
MD5 047c82c94d9612cdb3e196f2b4c925cd
BLAKE2b-256 4b82e3994b147d2f504b9a166ef73311218a089bc2e25ae1cb8bd8a610949eea

See more details on using hashes here.

File details

Details for the file frogql-0.2.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for frogql-0.2.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6e69f38339e981b03ea0d055caaf0b9fbf91757a519a9a7084529b7f072c0836
MD5 3e7997ff04549b1eeffe5345b8d87690
BLAKE2b-256 87ee0f8bf6e312fbee6212387cf5ef284dec2903d158df9ceb9491df00d511ae

See more details on using hashes here.

File details

Details for the file frogql-0.2.8-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for frogql-0.2.8-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2388895889b116a0840d6238063e9d90c6a7c43fc919ed3c5195664dea6711b9
MD5 8b8eba833fd461300af4817418241209
BLAKE2b-256 d441fd4fbcb16a7f46ab319d2c7c0f81b16f8a19fb3714733809782bd4426c8a

See more details on using hashes here.

File details

Details for the file frogql-0.2.8-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for frogql-0.2.8-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e5552ad544f9b60af7c77974af740e0f4695413d6f012a6c16a3ffff8cfd1064
MD5 d85da9407be24e3426c13a25e8c8ac39
BLAKE2b-256 e2dada79281753f37d77e5ebf40ba3be4a7a44b9163f16daca5da61c27b30fe7

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

6 files

0.2.9

6 files

This release

0.2.8 This release

6 files

0.2.7

6 files

0.2.6

6 files

0.2.5

6 files

0.2.4

6 files

0.2.3

6 files

0.2.2

6 files

0.2.1

6 files

0.2.0

6 files

0.1.1

6 files

0.1.0

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page