The graph engine built for
real-time decisions at any scale
JetGraph is a purpose-built in-memory graph engine with native Cypher query language support, Bolt protocol compatibility for Neo4j drivers, and high-throughput streaming data ingestion — delivering sub-millisecond velocity counts, relationship signals, and risk propagation across any domain.
Not another general-purpose
graph database
Every design decision optimizes for one thing: answering relationship and velocity questions in real time, with deterministic latency, regardless of your domain. With Cypher, Bolt, and streaming ingestion built in.
O(1) Velocity at Query Time
Velocity windows are pre-computed as ring counters — 1min, 5min, 1hr, 24hr. No aggregation at query time. Get exact event counts for any entity in any window with a single DashMap lookup.
0.05ms · GetVelocityCountAutomatic Risk Propagation
Flag one node as high-risk and every directly connected entity instantly reflects its exposure score. No batch jobs, no manual propagation — one call and the entire neighborhood is updated in microseconds.
Propagates in microsecondsNovelty Detection Built-In
Know instantly if two entities have ever been connected before — before the event is recorded. Structural relationship tracking gives you "first-time" signals across any domain: users, devices, products, or locations.
O(1) · CompactEdge storeRust Performance, Zero GC Pauses
Written entirely in Rust. No garbage collector means no unpredictable latency spikes under load. Memory layout is optimized: strings are dictionary-encoded, booleans are bit-packed, integers are compact.
Deterministic sub-ms latencyStreaming Data Ingestion
High-throughput streaming pipeline built on bidirectional gRPC — eliminating per-event TCP round-trip overhead. Push 35,000+ events per second from a single stream with full backpressure, acknowledgement, and zero data loss.
~35k ops/sec · single streamHyperLogLog Cardinality at Scale
Count unique neighbors — "how many distinct users bought this product?", "how many hosts touched this IP?" — with HyperLogLog in O(1). No full traversal. Works at millions of connections.
0.06ms · GetNeighborCountCypher Query Language
Write graph queries in Cypher — the same expressive, human-readable language used by Neo4j. Create nodes, match patterns, and call built-in procedures directly via POST /cypher or the visual Cypher Editor in the admin UI.
Bolt Protocol Support
JetGraph speaks the Bolt binary protocol on port 7687 — meaning any Neo4j-compatible driver (official or community) connects without modification. Drop in your existing driver, point it at JetGraph, and start querying.
Port 7687 · Neo4j-driver compatibleQuery first. Enrich. Then insert.
JetGraph is designed around a precise three-phase pattern that gives you accurate, consistent signals every time — without reading your own writes.
Query Historical State
Before the event is recorded, query the graph for every signal you need. The graph reflects only committed history — giving you a clean, consistent baseline.
Enrich & Decide
Combine graph signals into a composite score. Apply your own weights and business logic. JetGraph supplies the primitives — your application controls the model and the outcome.
Insert & Propagate
Record every event — including rejected or low-confidence ones. Flag nodes that breach your thresholds and propagation updates all connected entities automatically.
Flag one node.
The graph learns.
When any node is flagged as high-risk or compromised, JetGraph instantly propagates its exposure score to every directly connected entity — users, IPs, products, devices — without any additional queries.
Direct risk score
The node you flag carries a direct risk score and reason — queryable in a single O(1) DashMap read from any part of your application.
Neighbor exposure
All connected nodes get their max_neighbor_risk_score and flagged_neighbor_count updated automatically.
Clean false-positive recovery
Unflag a node and exposure on all neighbors is decremented atomically. No stale scores, no manual cleanup.
Numbers that matter at decision time
Measured on a single machine. Every number reflects real API calls on the critical query path.
| GetNodeContextTwo DashMap lookups, O(1) | 0.05 ms |
| GetVelocityCountPre-computed ring, O(1) | 0.05 ms |
| GetNeighborCount (HLL)HyperLogLog estimate, O(1) | 0.06 ms |
| GetNeighbors (1 neighbor)Hot-layer + cold CSR merge | 0.5 ms |
| GetNeighbors (100 neighbors)Scales with degree | 0.9 ms |
| QueryEdgeWindow (1hr, ~12 edges)Binary search + property lookup | < 0.5 ms |
Ingestion Throughput
BatchMutate streaming — bidirectional gRPC eliminates per-event round-trip overhead.
| 1 minute window | O(1) lookup |
| 5 minute window | O(1) lookup |
| 1 hour window | O(1) lookup |
| 24 hour window | O(1) lookup |
Designed for
in-process speed
JetGraph stores everything in memory with a layout optimized for read-heavy, latency-sensitive workloads. No serialization on the critical path. No disk I/O during queries.
Compact edge store
Edges are stored one record per unique src–dst pair with time-to-live support. No write amplification, no compaction pauses.
Memory-efficient encoding
Strings are dictionary-encoded, booleans are bit-packed, timestamps stored as 64-bit epoch microseconds. The graph fits more data in less RAM.
Snapshot persistence
The engine snapshots its full state to disk on a configurable interval. Recovery loads the latest snapshot — no WAL replay, fast restart.
Docker-native deployment
Single binary. Drop in a Docker Compose file. Mount a data volume for snapshots. No cluster to manage for most workloads.
Any domain where relationships
and time matter
JetGraph's primitives — velocity, novelty, propagation, cardinality — apply wherever graph structure carries signal and latency is non-negotiable.
Real-Time Risk Scoring
Score every event against full historical context: velocity, novelty, spend patterns, and neighbor risk exposure — all in one sub-millisecond decision path. Plug into any authorization or review flow.
Personalization & Collaborative Filtering
Model user–item interactions as a live graph. Query which items a user's closest neighbors have engaged with, detect novelty ("never seen this product before"), and serve personalized signals in under a millisecond.
Threat Detection & Lateral Movement
Map relationships between hosts, IPs, users, and services. Flag a compromised endpoint and propagation immediately exposes all connected assets. Detect lateral movement patterns before they escalate.
Anomalous Login & Session Detection
Track the full history of which IPs, devices, and locations each identity has used. Surface anomalous sessions the instant a new device or geography appears, before any downstream action is taken.
Entity Relationship & Anomaly Analytics
Model suppliers, components, logistics nodes, and certifications as a live graph. Detect unusual relationship patterns, compute supplier exposure when a node goes high-risk, and track velocity of supply events in any window.
Entity Resolution & Graph Enrichment
Build a live knowledge graph of entities and their relationships across heterogeneous data sources. Use HyperLogLog cardinality to detect entity clusters, and Cypher queries to traverse and enrich in real time.
From zero to first
graph signal in minutes
The jetgraph-client Rust crate gives you a typed, ergonomic API over gRPC. No proto files to copy, no build.rs to write.
Add the client crate
Add jetgraph-client to your Cargo.toml and connect in seconds.
Register your schema
Declare node types, edge types, velocity windows, and property schemas once at startup — for any domain.
Query → Enrich → Insert
Follow the three-phase pattern on every event. Collect graph signals, apply your logic, record the outcome.
Rust Client
Native crate with typed API
Python Client
Protobuf gRPC bindings
Cypher HTTP API
POST /cypher — any language
Neo4j Drivers (Bolt)
Official & community drivers
Up and running in 3 minutes
Try JetGraph locally with Docker — no build, no config required. Connect via Cypher HTTP API, Bolt protocol (port 7687), or the visual admin UI. The demo image ships with full support for all three.
Start the stack
Save the file below as docker-compose.yml, then run docker compose up -d. Both images are pulled automatically from Docker Hub.
Verify the engine is ready
Once both containers are up, check the health endpoint. You should see a JSON response with "ready":true.
Load sample data with one click
Open the Admin UI at http://localhost, go to Schema in the left nav, and click Apply Schema & Load Sample Data. This provisions the Credit Card Fraud schema and seeds a representative dataset so every query in Analytics returns results — no manual Cypher required. Prefer to bring your own schema? Skip this step and use the manual flow in Step 05.
Connect via Bolt (Neo4j drivers)
JetGraph listens on port 7687 with the Bolt binary protocol. Any Neo4j-compatible driver works out of the box — no credentials required in demo mode.
Or — register your own schema & run Cypher queries
If you skipped Step 03, declare your schema manually before writing data. Run these calls via the Cypher HTTP API — or paste them directly into the Cypher Editor in the UI.
Explore visually in the Admin UI
Use the Cypher Editor, Schema Designer, and Graph Explorer — no CLI required.
Ready to add real-time graph intelligence?
Get JetGraph running in minutes with Docker. Works across any domain — fraud, recommendations, security, supply chain, and more.