Geode Overview
Geode is an enterprise-ready graph database that brings standards-based graph query capabilities with production-grade features, ACID guarantees, and high performance. Built from the ground up in Zig for memory safety and efficiency, Geode follows the ISO/IEC 39075:2024 100% GQL compliance and is designed for modern cloud-native deployments.
What is Geode?
Geode is a native graph database that stores and queries connected data using the property graph model. Unlike relational databases that use tables and expensive JOINs, Geode stores relationships as first-class primitives, enabling efficient multi-hop traversals and pattern matching queries that power social networks, recommendation engines, fraud detection systems, and knowledge graphs.
Key Differentiators
Standards-Based: ISO/IEC 39075:2024 compliance, ensuring no vendor lock-in and future-proof query language.
Production-Ready: 97.4% test coverage (1644/1688 tests), 100% GQL compliance (see conformance profile), rigorous governance with 1,735 CANARY markers tracking 2,190+ requirements.
Enterprise Features: Row-level security, audit logging, distributed transactions, savepoints, prepared statements, connection pooling.
High Performance: QUIC transport (HTTP/3 protocol), parallel query execution, native graph storage with index-free adjacency.
Modern Architecture: Memory-safe Zig implementation, QUIC + TLS 1.3 security, Protobuf wire protocol, polyglot client libraries.
Architecture
High-Level Design
┌───────────────────────────────────────────────────────────┐
│ Client Layer │
│ ┌─────────┐ ┌─────────┐ ┌──────┐ ┌──────┐ │
│ │ Go │ │ Python │ │ Rust │ │ Zig │ + more │
│ └────┬────┘ └────┬────┘ └───┬──┘ └───┬──┘ │
└───────┼───────────┼───────────┼─────────┼───────────────┘
│ │ │ │
└───────────┴───────────┴─────────┘
│
QUIC + TLS 1.3 (Port 3141)
│
┌───────────────────▼───────────────────────────────────────┐
│ Geode Server │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Protocol Layer (JSON Line Protocol) │ │
│ └────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌────────────────────▼───────────────────────────────┐ │
│ │ Query Engine │ │
│ │ ┌──────────┐ ┌────────┐ ┌─────────────┐ │ │
│ │ │ Parser │→ │Optimizer│→ │ Executor │ │ │
│ │ │ (GQL) │ │ │ │ (Parallel) │ │ │
│ │ └──────────┘ └────────┘ └─────────────┘ │ │
│ └────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌────────────────────▼───────────────────────────────┐ │
│ │ Storage Engine │ │
│ │ ┌──────────────┐ ┌──────────┐ ┌─────────────┐ │ │
│ │ │ Graph Store │ │ Indexes │ │ WAL │ │ │
│ │ │ (Native) │ │ │ │ (Durable) │ │ │
│ │ └──────────────┘ └──────────┘ └─────────────┘ │ │
│ │ ┌──────────────┐ ┌──────────┐ │ │
│ │ │ Transaction │ │ RLS │ │ │
│ │ │ Manager │ │ Engine │ │ │
│ │ └──────────────┘ └──────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
Core Components
Protocol Layer:
- QUIC transport for low-latency, encrypted communication
- Protobuf wire protocol for language-independent messaging
- TLS 1.3 for security by default
- Connection pooling and multiplexing
Query Engine:
- GQL parser implementing ISO/IEC 39075:2024
- Cost-based query optimizer
- Parallel execution engine (multi-core support)
- Prepared statement caching
Storage Engine:
- Native graph storage with adjacency lists
- Index-free adjacency for O(1) traversals
- B-tree indexes for property lookups
- Write-ahead log (WAL) for durability
- Row-level security (RLS) enforcement
- Transaction management (ACID)
Core Features
Graph Query Language (GQL)
Geode follows the ISO/IEC 39075:2024 100% GQL compliance:
-- Pattern matching
MATCH (p:Person)-[:KNOWS*2..4]->(friend)
WHERE p.city = 'San Francisco'
RETURN friend.name, friend.city;
-- Aggregations
MATCH (u:User)-[:PURCHASED]->(p:Product)
RETURN p.category, count(u) AS buyers, sum(p.price) AS revenue
GROUP BY p.category
ORDER BY revenue DESC;
-- Temporal queries
MATCH (e:Event)
WHERE e.timestamp >= CURRENT_TIMESTAMP - DURATION 'P7D'
RETURN e.name, e.timestamp;
ACID Transactions
Full transaction support with distributed ACID guarantees:
BEGIN TRANSACTION;
-- Multiple operations
INSERT (order:Order {id: 'o123', total: 299.99});
MATCH (customer:Customer {id: 'c456'})
INSERT (customer)-[:PLACED]->(order);
-- Savepoints for partial rollback
SAVEPOINT sp1;
-- Risky operation
INSERT (payment:Payment {amount: 299.99});
-- Rollback to savepoint if needed
ROLLBACK TO SAVEPOINT sp1;
COMMIT;
Row-Level Security (RLS)
Fine-grained access control at the node and relationship level:
-- Define security policy
CREATE POLICY user_data_isolation ON User
USING (id = current_user_id());
CREATE POLICY confidential_relationships ON MANAGES
USING (current_user_role IN ['admin', 'manager']);
-- Automatically enforced on all queries
MATCH (u:User) RETURN u.name; -- Only returns accessible users
High-Performance Indexing
Multiple index types for different query patterns:
-- B-tree indexes for equality and range queries
CREATE INDEX user_email ON User(email);
CREATE INDEX order_date ON Order(date);
-- Composite indexes
CREATE INDEX product_category_price ON Product(category, price);
-- Full-text search indexes
CREATE FULLTEXT INDEX product_search ON Product(name, description);
-- Use full-text search
MATCH (p:Product)
WHERE fulltext_search(p, 'wireless headphones bluetooth')
RETURN p.name, p.price;
Temporal Data Support
Native temporal types and operations:
-- Temporal data types
INSERT (event:Event {
name: 'Conference',
start: TIMESTAMP '2024-06-15 09:00:00-07:00',
duration: DURATION 'PT8H',
scheduled_date: DATE '2024-06-15'
});
-- Temporal queries
MATCH (e:Event)
WHERE e.start >= CURRENT_TIMESTAMP
AND e.start <= CURRENT_TIMESTAMP + DURATION 'P30D'
RETURN e.name, e.start
ORDER BY e.start;
-- Time-series aggregations
MATCH (sale:Sale)
WHERE sale.timestamp >= DATE '2024-01-01'
RETURN
date_trunc('month', sale.timestamp) AS month,
count(*) AS sale_count,
sum(sale.amount) AS revenue
GROUP BY month
ORDER BY month;
Use Cases
Social Networks
Model users, connections, posts, likes, and recommendations:
-- Friend suggestions (friends of friends)
MATCH (me:User {id: $user_id})-[:FRIEND]->(f1)-[:FRIEND]->(f2)
WHERE f2 <> me
AND NOT EXISTS { MATCH (me)-[:FRIEND]->(f2) }
RETURN f2.name, count(f1) AS mutual_friends
ORDER BY mutual_friends DESC
LIMIT 10;
-- News feed generation
MATCH (me:User {id: $user_id})-[:FOLLOWS]->(author)-[:POSTED]->(post:Post)
WHERE post.created >= CURRENT_TIMESTAMP - DURATION 'P7D'
RETURN post, author.name
ORDER BY post.created DESC
LIMIT 50;
Recommendation Engines
Collaborative filtering and content-based recommendations:
-- Product recommendations (collaborative filtering)
MATCH (me:User {id: $user_id})-[:PURCHASED]->(p:Product)<-[:PURCHASED]-(similar:User)
MATCH (similar)-[:PURCHASED]->(rec:Product)
WHERE NOT EXISTS { MATCH (me)-[:PURCHASED]->(rec) }
RETURN rec.name, count(similar) AS recommendation_score
ORDER BY recommendation_score DESC
LIMIT 20;
-- Similar products (content-based)
MATCH (p:Product {id: $product_id})-[:IN_CATEGORY]->(cat:Category)<-[:IN_CATEGORY]-(similar:Product)
WHERE similar <> p
AND abs(similar.price - p.price) < 50
RETURN similar.name, similar.price, similar.rating
ORDER BY similar.rating DESC;
Fraud Detection
Pattern matching for suspicious behavior:
-- Circular transaction patterns (money laundering)
MATCH path = (a:Account)-[:TRANSFER*3..5]->(a)
WHERE all(r IN relationships(path) WHERE r.amount > 10000)
AND all(r IN relationships(path) WHERE r.timestamp >= CURRENT_DATE - DURATION 'P7D')
RETURN path,
reduce(sum = 0, r IN relationships(path) | sum + r.amount) AS total_amount
ORDER BY total_amount DESC;
-- Velocity checks (rapid transfers)
MATCH (a:Account)-[t:TRANSFER]->(b:Account)
WHERE t.timestamp >= CURRENT_TIMESTAMP - DURATION 'PT1H'
WITH a, count(t) AS transfer_count, sum(t.amount) AS total_amount
WHERE transfer_count > 10 OR total_amount > 100000
RETURN a.id, transfer_count, total_amount
ORDER BY total_amount DESC;
Knowledge Graphs
Semantic networks and relationship discovery:
-- Entity relationships
MATCH (entity:Entity {name: 'Albert Einstein'})
-[r1:RELATED_TO]->(related)
-[r2:RELATED_TO]->(further)
RETURN
entity.name,
type(r1) AS relationship1,
related.name,
type(r2) AS relationship2,
further.name
LIMIT 100;
-- Concept hierarchies
MATCH path = (specific:Concept)-[:IS_A*]->(general:Concept {name: 'Science'})
RETURN specific.name, length(path) AS distance_from_science
ORDER BY distance_from_science;
Infrastructure Management
Network dependencies and impact analysis:
-- Service dependency tree
MATCH path = (service:Service {name: 'web-api'})-[:DEPENDS_ON*]->(dependency)
RETURN path, length(path) AS depth
ORDER BY depth;
-- Impact analysis (what breaks if this fails?)
MATCH (failed:Server {id: 'srv-42'})<-[:DEPENDS_ON*]-(affected)
RETURN affected.name, affected.criticality, affected.users_affected
ORDER BY affected.criticality DESC;
Performance Characteristics
Query Performance
Traversals: O(1) per hop regardless of graph size (index-free adjacency) Lookups: O(log n) with indexes, O(n) without Aggregations: Parallelized across CPU cores Joins: Unnecessary (relationships are native)
Benchmarks
Query Types:
- Short paths (1-2 hops)
- Multi-hop paths with filters
- Large aggregations
- Batched bulk writes
Scalability
Distributed Deployment: Up to 32 shards with automatic coordination Concurrent Connections: Connection pooling supported Properties: Wide property sets supported (storage dependent)
Deployment Options
Standalone Server
Single-instance deployment for development and small production workloads:
# Start server
./geode serve --listen 0.0.0.0:3141 --data /var/lib/geode
# Configure
./geode serve --config /etc/geode/geode.conf
Docker Container
Containerized deployment for cloud environments:
# Pull image
docker pull geodedb/geode:latest
# Run container
docker run -d \
-p 3141:3141 \
-v /data/geode:/var/lib/geode \
--name geode-server \
geodedb/geode:latest
Kubernetes
Cloud-native orchestration:
apiVersion: apps/v1
kind: Deployment
metadata:
name: geode
spec:
replicas: 3
selector:
matchLabels:
app: geode
template:
metadata:
labels:
app: geode
spec:
containers:
- name: geode
image: geodedb/geode:latest
ports:
- containerPort: 3141
volumeMounts:
- name: data
mountPath: /var/lib/geode
High Availability
Multi-instance deployment with replication (enterprise feature):
- Master-replica replication
- Automatic failover
- Read replicas for scaling queries
- Distributed transactions
Client Libraries
Supported Languages
Go: geodedb.com/geode
- database/sql driver interface
- Connection pooling
- Prepared statements
- Full type safety
Python: geode-client (PyPI)
- Async/await with asyncio
- Connection pooling
- Type hints
- RLS policy management
Rust: geode-client (crates.io)
- Tokio-based async
- Zero-cost abstractions
- Type-safe builders
- Connection pooling
Zig: Native client library
- QUIC implementation included
- Memory-safe
- Zero dependencies
- Example code included
Example: Go Client
package main
import (
"context"
"fmt"
"log"
_ "geodedb.com/geode"
"database/sql"
)
func main() {
db, err := sql.Open("geode", "quic://localhost:3141")
if err != nil {
log.Fatal(err)
}
defer db.Close()
rows, err := db.QueryContext(context.Background(),
"MATCH (p:Person) WHERE p.age > $age RETURN p.name, p.city",
sql.Named("age", 30))
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var name, city string
rows.Scan(&name, &city)
fmt.Printf("%s from %s\n", name, city)
}
}
Monitoring and Operations
Metrics
Geode exposes operational metrics:
- Query latency (p50, p95, p99)
- Throughput (queries/second)
- Connection count
- Transaction rate
- Storage usage
- Index hit rates
Logging
Structured logging with configurable levels:
2024-06-15T10:30:45Z [INFO] Query executed: duration=15ms
2024-06-15T10:30:46Z [WARN] Slow query detected: duration=2.5s query="MATCH..."
2024-06-15T10:30:47Z [ERROR] Transaction rollback: reason="constraint violation"
Backup and Restore
# Create backup
./geode backup --output /backups/geode-2024-06-15.tar.gz
# Restore from backup
./geode restore --input /backups/geode-2024-06-15.tar.gz
Security Features
Authentication
- Username/password authentication
- API key authentication
- Integration with external auth providers (LDAP, OAuth)
Authorization
- Row-level security (RLS) policies
- Role-based access control (RBAC)
- Fine-grained permissions per node/relationship type
Encryption
- TLS 1.3 for all client connections (mandatory)
- Encrypted storage at rest (optional)
- Encrypted backups
Audit Logging
All data modifications logged with:
- User identity
- Timestamp
- Query executed
- Affected nodes/relationships
Comparison with Other Databases
vs. Neo4j
| Feature | Geode | Neo4j |
|---|---|---|
| Query Language | GQL (ISO standard) | Cypher (proprietary) |
| ACID | Full distributed ACID | Full ACID (single instance) |
| RLS | Native | Plugin/application-level |
| Licensing | Apache 2.0 (open-source) | Dual (GPL/commercial) |
| Transport | QUIC (HTTP/3) | Bolt protocol |
vs. Amazon Neptune
| Feature | Geode | Amazon Neptune |
|---|---|---|
| Query Language | GQL | Gremlin, SPARQL |
| Deployment | Any cloud or on-premise | AWS only |
| Cost | Open-source | Pay per instance-hour |
| Standards | ISO GQL | Apache TinkerPop, W3C |
vs. Relational (PostgreSQL)
| Feature | Geode | PostgreSQL |
|---|---|---|
| Data Model | Property graph | Tables (relational) |
| Relationships | First-class | Foreign keys + JOINs |
| Multi-hop queries | O(1) per hop | O(n^hops) |
| Schema | Flexible | Rigid |
| Use Case | Connected data | Structured tabular data |
Community and Support
Open Source
- Apache License 2.0
- Public GitLab repository
- Active issue tracker
- Community contributions welcome
Documentation
- Complete API reference
- Tutorial and guides
- Example applications
- Video tutorials
Commercial Support
- Enterprise support contracts
- Training and consulting
- Custom feature development
- SLA guarantees
Roadmap
Current (v0.1.3)
- 100% GQL compliance
- Row-level security
- Distributed transactions
- Client libraries (Go, Python, Rust, Zig)
Upcoming
- Distributed graph partitioning
- Graph algorithms library (PageRank, community detection)
- GraphQL API gateway
- Streaming query results
- Time-travel queries (temporal versioning)
Getting Started
Quick Start
# Install
curl -sSL https://geodedb.com/install.sh | sh
# Start server
geode serve
# Connect and query
geode shell
> INSERT (p:Person {name: 'Alice', age: 30});
> MATCH (p:Person) RETURN p.name, p.age;
Learn More
- Tutorial: Step-by-step GQL guide
- Documentation: Complete reference
- Examples: Sample applications
- Community: Forum and chat
Conclusion
Geode is a production-ready graph database that combines standards-based query language (ISO GQL), enterprise features (RLS, audit logging, distributed ACID), and high performance (QUIC transport, parallel execution) to power modern graph applications. Whether you’re building social networks, recommendation engines, fraud detection systems, or knowledge graphs, Geode provides the foundation for scalable, maintainable, and secure graph data management.
Explore the documentation below to dive deeper into specific features, use cases, and best practices.