Real-time graph intelligence for
fraud and risk decisions
Purpose-built in-memory graph engine for the decision path — sub-millisecond velocity, novelty, and risk propagation, with Cypher, Bolt, and streaming ingest so you can score every event against full relationship context.
Not another general-purpose
graph database
Every design decision optimizes for one thing: answering relationship and velocity questions on the fraud and risk decision path — with deterministic sub-millisecond latency on a single node. openCypher subset, Bolt for compatible drivers, 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 for cards, devices, merchants, IPs, and accounts.
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 · GetNeighborCountopenCypher Subset
Write graph queries in a focused openCypher subset — MATCH, CREATE, and CALL procedures for the decision path. Not full Neo4j Cypher. Run via POST /cypher or the visual Cypher Editor in the admin UI.
Bolt for Compatible Drivers
JetGraph speaks Bolt on port 7687 so Neo4j-compatible drivers can connect. Use them for the supported openCypher subset — not as a drop-in replacement for every Neo4j query or procedure.
Port 7687 · supported Cypher subsetWhy not Neo4j for this path?
Neo4j is an excellent general-purpose graph database. JetGraph is built for a different job: sub-millisecond fraud and risk signals on every event.
Decision latency, not traversal flexibility
Velocity rings, novelty checks, and neighbor risk are pre-computed for O(1) reads. You get deterministic sub-ms answers on a single node — not multi-hop Cypher traversals under load.
Ingest + score on the hot path
Streaming BatchMutate (~35k events/sec) and Feature APIs are designed for authorize-time scoring. General-purpose graph DBs optimize for richer queries and analytic workloads, not this write-then-score loop.
Risk primitives built in
Flag a node and exposure propagates to neighbors automatically. Novelty and velocity are first-class — not something you rebuild with custom procedures, batch jobs, or an external feature store.
Query 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 node. Every number reflects real API calls on the critical decision path — not a distributed cluster benchmark.
| 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
single-node decision latency
JetGraph stores everything in memory on one machine — optimized for read-heavy, latency-sensitive fraud and risk 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 on a single node. Drop in a Docker Compose file. Mount a data volume for snapshots. Optional warm standby for failover — not a distributed query cluster.
Built for fraud and risk —
useful wherever relationships and time matter
Core primitives — velocity, novelty, propagation, cardinality — are optimized for authorize-time risk scoring, and transfer to adjacent real-time decision workloads.
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.
Engine + analytics in one compose
The Docker demo ships more than the core engine — segment evaluation, pattern mining, and an Admin UI so you can explore fraud signals without writing glue code first.
Signals, Schema & Graph Explorer
Visual admin for schema design, Cypher Editor, Graph Explorer, and Analytics — Signals, Segmentation, Pattern Monitor, and anomaly views over the live graph.
Real-Time Segmentation
Evaluate entity membership against configurable graph signals as events stream in. Update segment rules live — no engine restart required.
Pattern Mining
Mine merchant and sequence patterns (e.g. NEXT_MERCHANT) from live edges. Surface recurring fraud paths in Pattern Monitor without custom batch jobs.
From zero to first
fraud 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 — cards, merchants, devices, IPs, and more.
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
openCypher subset — any language
Bolt Drivers
Compatible Neo4j drivers (subset)
Up and running in 3 minutes
Try JetGraph locally with Docker — no build required. The demo compose starts the engine, segment-evaluator, pattern-miner, and Admin UI. Connect via openCypher HTTP, Bolt (port 7687, supported subset), or the visual analytics UI.
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. If you changed the UI host port in the compose file, open http://localhost:<your-port> instead of http://localhost.
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 (compatible drivers)
JetGraph listens on port 7687 with Bolt. Neo4j-compatible drivers work for the supported openCypher subset — no credentials required in demo mode. Full Neo4j Cypher is not guaranteed.
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
Cypher Editor, Schema, Graph Explorer, plus Analytics — Signals, Segmentation, and Pattern Monitor.
Ready to add real-time fraud graph intelligence?
Get JetGraph running in minutes with Docker — single-node engine, analytics services, and Admin UI for the decision path.