Skip to main content

Graphite

A clean, embedded graph database engine for Python.


Graphite is a lightweight yet flexible graph database engine implemented in pure Python. It is designed to model graph-like data inside large Python codebases without introducing the complexity of an external database.

Optimized for graphs up to 500K nodes (tested up to 1M). 10x faster than NetworkX, with pure Python simplicity. (Repeat benchmark available at tests/benchmark.py)


Features

🧩 Embedded by Design

Graphite is not a separate service or infrastructure dependency. It lives inside your project, evolves with it, and collaborates naturally with your existing code.

No servers. No ports. No deployment headaches.


🛠 Ready-made, Customizable Module

Graphite is intentionally simple and hackable. You can fork it, modify it, or deeply integrate it into your project without fighting rigid abstractions.

The database adapts to your project — not the other way around.


🐍 Native Python API

Everything is done through Python APIs. No query strings. DSL parsing is just an optional layer. No context switching.

Your editor already knows how to autocomplete and document your queries.


🔍 Query? It’s Code.

Queries are built by chaining Python functions on the QueryResult object.

  • Zero parsing cost
  • Full IDE support
  • Refactor-safe
  • Debuggable

🔄 Runtime Evolution

Change structures, data, or even engine behavior at runtime. No shutdowns. No migrations. No waiting.


🧱 Structure-Oriented Modeling

Define:

  • node types
  • relation types
  • fields
  • base types
  • valid forms

Model your domain explicitly and safely.


🧬 Node Inheritance

Create base node types and extend them with shared properties and advanced relationships.


✨ Simple, Predictable Syntax

From defining structures to querying data, every step favors clarity and minimal syntax.


💾 Serializable

Persist the entire database into a single file.


Installation

Install from PyPI:

pip install graphitedb

Why Graphite?

Graphite was extracted from a large production codebase where Neo4j introduced more complexity than value.

Neo4j is a powerful tool — but in large projects, adding a separate graph database often increases:

  • infrastructure complexity
  • deployment cost
  • maintenance burden
  • cognitive load on developers

Graphite exists for cases where this cost is not justified.

It provides graph modeling without adding another system to operate.

Comparation

Feature Neo4j Graphite Custom Graph Engine
Bug Safety 🥇Very High:
Mature & tested
🥈High:
Unit tests, monitored
🥉Low-Medium:
You manage testing
Implementation 🥈High:
Setup & Cypher
🥇Low:
Embed easily
🥉Very High:
Build from scratch
Flexibility 🥈High:
Complex queries
🥉Medium:
Limited but extendable
🥇Very High:
Fully customizable
Performance 🥇High:
Optimized large data
🥈Medium:
Good for small/medium
❓Unknown:
Depends on design
Scalability 🥇High:
Cluster & sharding
🥈Medium:
Single-node & Base types
❓Unknown:
Possible but hard
Support / Community 🥇Very High:
Large & active
🥈Medium:
Docstrings only
🥉Low:
Internal only
Customizability 🥉Low:
Limited to API
🥈High:
Open source
🥇Very High:
Full control
Ease of Use 🥈Medium:
Learn Cypher
🥇High:
Quick & simple
🥉Low:
Needs study & test

Example Usage

import graphite

def example_complete_dsl_loading():
    engine = graphite.engine()

    complete_dsl = """
    # Define node types
    node Person
        name: string
        age: int

    node User from Person
        id: string
        email: string

    node Object
    node Book from Object
        title: string
        n_pages: int

    node Car from Object
        model: string
        year: int

    # Define relation types
    relation FRIEND both
        Person - Person
        since: date

    relation OWNER reverse OWNED_BY
        Person -> Object
        since: date
        purchased_at: date

    relation AUTHOR reverse AUTHORED_BY
        Person -> Book
        year: int

    # Create nodes
    User, user_1, "Joe Doe", 32, "joe4030", "joe@email.com"
    User, user_2, "Jane Smith", 28, "jane28", "jane@email.com"
    User, user_3, "Bob Wilson", 45, "bob45", "bob@email.com"
    User, user_4, "Alice Brown", 22, "alice22", "alice@email.com"

    Book, book_1, "The Great Gatsby", 180
    Book, book_2, "Python Programming", 450
    Book, book_3, "Graph Databases", 320

    Car, car_1, "Toyota Camry", 2020
    Car, car_2, "Honda Civic", 2018

    # Create relations
    user_1 -[FRIEND, 2020-05-15]- user_2
    user_1 -[FRIEND, 2019-08-22]- user_3
    user_2 -[FRIEND, 2021-01-10]- user_4

    user_1 -[OWNER, 2021-03-01, 2021-02-15]-> car_1
    user_2 -[OWNER, 2019-06-20, 2019-05-10]-> book_1
    user_3 -[OWNER, 2022-11-05, 2022-10-20]-> book_2

    user_1 -[AUTHOR, 2020]-> book_3
    user_2 -[AUTHOR, 2021]-> book_2
    """

    engine.parse(complete_dsl)

    users = engine.query.User.get()
    print([u["name"] for u in users])

    return engine

More examples are available in examples/ in the GitHub repository.

See docs/ for documentation and API reference.


MIT 2026 Mahan Khalili

Release files for graphitedb 0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for graphitedb 0.5
File Size Uploaded
graphitedb-0.5.tar.gz 39.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for graphitedb 0.5
File Interpreter ABI Platform
graphitedb-0.5-py3-none-any.whl Python 3 none any Details

Total release size: 65.0 kB

Release files / graphitedb-0.5.tar.gz

Download URL graphitedb-0.5.tar.gz
Size 39.1 kB
Tags Source
SHA-256 checksum
How to use checksums
dbd9e51006ebd83727b0eb810cbe02e7356183f1e3f4720e33c2c934d4a971f3
BLAKE2b-256 checksum
How to use checksums
cc47832bfa7aabc0c6f9241a8c369112f2435e9f723d7dd6a30b3fb581eb6615
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 16, 2026.

Transparency log

Release files / graphitedb-0.5-py3-none-any.whl

Download URL graphitedb-0.5-py3-none-any.whl
Size 25.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a7e1d8883098fe5abc1380c8399c1c1cc8bfdfde75ac5740d9cbae2896799167
BLAKE2b-256 checksum
How to use checksums
7b02e0c2d136c7d70d2c3e3c70d36fd8b160d41e34eb882478d118a492c48f19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5 This release

2 release files

0.4

2 release files

0.3

2 release files

0.2.2

2 release files

0.2

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release 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