Feature Profiles¶
Motivation¶
Grafeo aims to be a universal graph database: property graphs, RDF, analytics, AI memory, browser, production server. But no single user needs all of that. Feature profiles let every user get exactly what they need, with zero overhead from what they don't.
There are two layers:
- Layer 1: Profiles, named groups consistent across the entire ecosystem. This is what most users interact with.
- Layer 2: Atoms, individual feature flags for power users who want precise control. Profiles are composed from these.
Profiles¶
Since 0.5.35, profiles are named after what you are building, not where it runs. They are defined in the grafeo facade crate and the binding crates.
| Profile | Persona | What it enables |
|---|---|---|
lpg | Graph App Developer | Labeled property graph model, GQL, Cypher, Gremlin, SQL/PGQ, storage, regex |
rdf | Knowledge Engineer | RDF triple store, GQL, SPARQL, GraphQL, SHACL validation, storage (with the LPG store it needs), regex |
analytics | Data Scientist | Graph algorithms, vector, text and hybrid search, JSON Lines and Parquet import |
ai | AI Memory / Agent Developer | Vector, text and hybrid search, change data capture |
edge | Frontend / Edge Developer | LPG model, GQL, lightweight regex (minimal, WASM-friendly) |
enterprise | Platform Operator | Metrics, tracing, async storage; grafeo-server adds auth, TLS, sync, replication and transports |
Composition Rules¶
- Model profiles (
lpg,rdf): pick one or both. These are the foundation. - Capability profiles (
analytics,ai,enterprise): stack on top of a model profile. - Constrained profile (
edge): minimal by default. Add atoms such asalgosif you accept the size increase.
Examples:
# AI memory developer
grafeo = { version = "0.6", default-features = false, features = ["lpg", "ai"] }
# Semantic data scientist
grafeo = { version = "0.6", default-features = false, features = ["rdf", "analytics"] }
# Browser app
grafeo = { version = "0.6", default-features = false, features = ["edge"] }
# Power user: just Cypher and vector search with persistence
grafeo = { version = "0.6", default-features = false, features = ["cypher", "vector-index", "wal"] }
# Full production stack (grafeo-server)
# grafeo-server = { features = ["lpg", "rdf", "ai", "enterprise"] }
Profile Definitions¶
As defined in the grafeo facade crate:
LPG¶
All labeled property graph query languages plus persistence. The default choice for application developers working with nodes, edges, labels and properties.
RDF¶
RDF triple store with SPARQL, GraphQL, SHACL validation and persistence, for knowledge engineers working with ontologies and linked data. Every build has the LPG store, which sessions, persistence and recovery need (#544: a build with the triple store but without it lost its triples on reopen). Add the ring-index atom for compact RDF indexing (it pulls in succinct-indexes).
Note: in the lower-level crates (
grafeo-core,grafeo-adapters,grafeo-engine),rdfis a deprecated alias for thetriple-storeatom only. The profile above applies to the facade and binding crates.
Analytics¶
analytics = ["algos", "vector-index", "text-index", "hybrid-search", "jsonl-import", "parquet-import"]
25+ graph algorithms (PageRank, Louvain, SSSP, Dijkstra, BFS/DFS, centrality, community detection, MST, flow, isomorphism, clustering), search indexes and bulk import. Combine with lpg or rdf depending on the dataset.
AI¶
Structured memory for LLMs, agents and RAG pipelines: vector and text retrieval plus change feeds. Point-in-time queries need no feature: a database keeps its history for the retention window it is configured with (Config::with_history_retention).
Note:
embed(in-process ONNX embedding generation, about 17 MB) is deliberately not part of this profile. Most AI memory use cases bring embeddings through an API. Opt in explicitly withfeatures = ["ai", "embed"].
Edge¶
Minimal profile for browsers, mobile and other constrained environments, with the smallest possible binary.
Enterprise¶
Production operations. In the engine this enables observability and the async storage calls (async-storage, deprecated since 0.6.1 and removed in 0.7.0: from 0.7.0 enterprise is metrics and tracing, and async callers run wal_checkpoint() with tokio::task::spawn_blocking). On grafeo-server, enterprise additionally enables authentication, TLS, sync, replication, the push changefeed and all transports (HTTP, GWP, Bolt, Studio), which exist only in the server workspace.
Deprecated Profile Names¶
Deprecated, removed in 0.7.0
The deployment-based names embedded, browser, server and full still work as aliases, but they are deprecated and will be removed in 0.7.0 (#468). Use the persona profiles in new projects.
| Deprecated name | Use instead | Notes |
|---|---|---|
embedded | lpg + ai + algos + parallel + arrow-export | Currently still the default of the facade and the Python, Node.js and C bindings. lpg adds Cypher, Gremlin, SQL/PGQ and the rest of storage |
browser | edge | Currently still the default of the WASM binding |
server | lpg + rdf + ai + algos + parallel + arrow-export + async-storage + tracing | enterprise without metrics; no bulk import |
full | same as server | In the facade, full is an alias of server. The bindings' full is all languages, ai, algos and the RDF triple store |
The binding defaults move to persona names before the aliases are removed, so depending on grafeo without features keeps working.
Ecosystem Matrix¶
The profile names are consistent across every project. The table below shows which profiles are available in each project, either as configurable feature flags or as the project's inherent profile alignment.
Core Engine¶
| Project | LPG | RDF | Analytics | AI | Edge | Enterprise | Notes |
|---|---|---|---|---|---|---|---|
| grafeo (engine) | flag | flag | flag | flag | flag | flag | Engine-level enterprise is observability and async storage |
| grafeo-server | flag | flag | flag | flag | n/a | flag | Server enterprise adds auth, TLS, sync, replication, transports |
| grafeo-cli | flag | flag | flag | flag | n/a | n/a | Interactive REPL and CLI tooling |
Language Bindings¶
| Project | LPG | RDF | Analytics | AI | Edge | Enterprise | Notes |
|---|---|---|---|---|---|---|---|
| Python (grafeo-py) | flag | flag | flag | flag | flag | n/a | Default: embedded (deprecated alias) |
| Node.js (grafeo-node) | flag | flag | flag | flag | flag | n/a | Default: embedded (deprecated alias) |
| WASM (grafeo-wasm) | flag | flag | flag | flag | flag (default) | n/a | Default: browser (deprecated alias for edge) |
| C (grafeo-c) | flag | flag | flag | flag | flag | n/a | Bridge for C#, Dart, Go. Default: embedded (deprecated alias) |
| C# | via C | via C | via C | via C | via C | n/a | Feature selection at C build time |
| Dart | via C | via C | via C | via C | via C | n/a | Feature selection at C build time |
| Go | via C | via C | via C | via C | via C | n/a | Feature selection at C build time |
The bindings use the same profile names, with a few differences from the facade:
- C (and C#, Dart, Go):
rdfhas no SHACL validation. - WASM:
lpgandrdfhave no storage,rdfhas no SHACL and uses the lightweight regex engine,aihas no change data capture, andanalyticsisaiplusalgos(no bulk import).
AI / Agent Ecosystem¶
| Project | LPG | RDF | Analytics | AI | Edge | Enterprise | Notes |
|---|---|---|---|---|---|---|---|
| grafeo-memory | inherent | - | - | inherent | - | - | AI memory layer |
| grafeo-langchain | inherent | - | - | inherent | - | - | LangChain integration |
| grafeo-llamaindex | inherent | - | - | inherent | - | - | LlamaIndex integration |
| grafeo-mcp | inherent | - | - | inherent | - | - | MCP server for AI agents |
Web / Visualization¶
| Project | LPG | RDF | Analytics | AI | Edge | Enterprise | Notes |
|---|---|---|---|---|---|---|---|
| grafeo-web | - | - | - | - | inherent | - | WASM in browser |
| playground | - | - | - | - | inherent | - | Interactive graph playground |
| anywidget-graph | inherent | - | - | - | - | - | Notebook graph visualization |
| anywidget-vector | - | - | - | inherent | - | - | Notebook vector visualization |
Protocol Libraries¶
| Project | LPG | RDF | Analytics | AI | Edge | Enterprise | Notes |
|---|---|---|---|---|---|---|---|
| boltr | - | - | - | - | - | inherent | Bolt v5 protocol |
| gwp | - | - | - | - | - | inherent | GQL Wire Protocol (gRPC) |
Accelerators and Tooling¶
| Project | LPG | RDF | Analytics | AI | Edge | Enterprise | Notes |
|---|---|---|---|---|---|---|---|
| grafeo-cuda | - | - | inherent | - | - | - | GPU-accelerated algorithms |
| graph-bench | all | all | all | all | - | - | Benchmark suite |
Legend¶
- flag: Profile is available as a configurable feature flag. User opts in.
- inherent: The project is inherently aligned with this profile. No flag needed.
- via C: Feature selection happens at C binding compile time, propagates to higher-level bindings.
- n/a: Profile does not apply to this project.
- -: Not applicable or not supported.
Atom Reference¶
The individual feature flags (Layer 2) that profiles are composed from. "(standalone)" means the atom is not part of any persona profile and is enabled on its own; some of those are part of the deprecated embedded default, as noted.
Query Languages¶
| Atom | Profile | Description | Status |
|---|---|---|---|
gql | LPG, RDF, Edge | ISO/IEC GQL standard | Implemented |
cypher | LPG | openCypher 9.0 | Implemented |
sparql | RDF | W3C SPARQL 1.1 | Implemented |
gremlin | LPG | Apache TinkerPop | Implemented |
graphql | RDF | GraphQL over RDF | Implemented |
sql-pgq | LPG | SQL:2023 GRAPH_TABLE | Implemented |
Storage¶
| Atom | Profile | Description | Status |
|---|---|---|---|
storage | LPG, RDF | Umbrella: WAL + grafeo-file + spill + mmap | Implemented |
wal | (storage) | Write-ahead log persistence | Implemented |
grafeo-file | (storage) | Single-file .grafeo format | Implemented |
spill | (storage) | Out-of-core disk spilling | Implemented |
mmap | (storage) | Memory-mapped file storage | Implemented |
async-storage | Enterprise | Async checkpoint and snapshot calls (tokio) that wrap the sync ones, deprecated since 0.6.1: call wal_checkpoint() from tokio::task::spawn_blocking; removed in 0.7.0 | Deprecated |
compact-store | (standalone) | Enables nothing since 0.6.0: every build that opens files reads databases compacted by 0.5.44 or older; removed in 0.7.0 | Deprecated |
Graph Model¶
| Atom | Profile | Description | Status |
|---|---|---|---|
triple-store | RDF | RDF triple store with 6-way indexing | Implemented |
shacl | RDF | SHACL validation (core and SPARQL-based constraints) | Implemented |
ring-index | (standalone) | Space-efficient RDF index (pulls in succinct-indexes) | Implemented |
succinct-indexes | (pulled in by ring-index) | Rank/select bitvectors, Elias-Fano, wavelet trees | Implemented |
owl-schema | RDF (server only) | OWL schema loading | Server only |
rdfs-schema | RDF (server only) | RDFS schema support | Server only |
Search and AI¶
| Atom | Profile | Description | Status |
|---|---|---|---|
vector-index | Analytics, AI | HNSW approximate nearest neighbor | Implemented |
text-index | Analytics, AI | BM25 inverted index | Implemented |
hybrid-search | Analytics, AI | Combined vector + text search | Implemented |
embed | (standalone) | ONNX embedding generation (~17 MB overhead) | Implemented |
algos | Analytics | 25+ graph algorithms | Implemented |
Temporal and Change Tracking¶
| Atom | Profile | Description | Status |
|---|---|---|---|
temporal | (standalone) | Deprecated since 0.6.0, enables nothing: history is a per-database setting (Config::with_history_retention); removed in 0.7.0 | Deprecated |
cdc | AI | Change data capture with history API | Implemented |
Import and Export¶
| Atom | Profile | Description | Status |
|---|---|---|---|
jsonl-import | Analytics | JSON Lines file import | Implemented |
parquet-import | Analytics | Apache Parquet import | Implemented |
arrow-export | (standalone); in embedded (not in C or WASM) | Arrow IPC export for DuckDB, Polars, pandas | Implemented |
Execution¶
| Atom | Profile | Description | Status |
|---|---|---|---|
parallel | (standalone); in embedded | Multi-core batch vector search and graph algorithms (rayon); a query runs on one thread | Implemented |
tiered-storage | (standalone) | Deprecated since 0.6.0, enables nothing (the store it shaped is gone); removed in 0.7.0 | Deprecated |
Operations¶
| Atom | Profile | Description | Status |
|---|---|---|---|
metrics | Enterprise | Lock-free query and transaction metrics, Prometheus export | Implemented |
tracing | Enterprise | Tracing spans | Implemented |
auth | Enterprise (server) | Authentication provider | Server only |
tls | Enterprise (server) | TLS/HTTPS encryption | Server only |
sync | Enterprise (server) | Pull-based changefeed for offline-first | Server only |
push-changefeed | Enterprise (server) | Push-based SSE/WebSocket changefeed | Server only |
replication | Enterprise (server) | Primary-replica replication | Server only |
Transports (grafeo-server only)¶
| Atom | Profile | Description | Status |
|---|---|---|---|
http | Enterprise | HTTP/REST + OpenAPI + WebSocket | Server only |
gwp | Enterprise | GQL Wire Protocol (gRPC) | Server only |
bolt | Enterprise | Bolt v5 (Neo4j driver compat) | Server only |
studio | Enterprise | Embedded web UI | Server only |
Regex¶
| Atom | Profile | Description | Status |
|---|---|---|---|
regex | LPG, RDF | Full regex engine | Implemented |
regex-lite | Edge | Lightweight regex for WASM | Implemented |