TETRA

A graph data system
that runs anywhere.

We didn’t improve the graph database. We reinvented it. Sub-millisecond queries. No specialized hardware. Tiny RAM footprint.

Launch Demo →
2D/3D
Visualization
30+
Algorithms
6
Node shapes
100%
Cypher TCK

TETRA on bare metal — no container, no JVM, just the binary

25µs
Edge count
27µs
Entity lookup
34µs
1-hop traversal
69µs
Shortest path

Visualization

Query. Analyze. Visualize. Innovate.

To give you maximum data utility, we built a 2D/3D graph viewer right in. Click a node, follow the connections, see what’s actually there.

Layouts

Force-directed, spherical, and radial — switch on the fly

2D overhead or full 3D orbit

Node Shapes

Six distinct platonic solids. Each node type gets its own shape and color automatically.

Explore

Click to focus — see N hops deep

Fly to any node in the graph

Pin and inspect multiple nodes at once

Performance

78 queries. Same hardware. No excuses.

Recommendations dataset — 28,863 nodes, 166,261 edges. Both containerized on Apple M4 Pro, 16GB. Native binary shown for reference.

61
Tetra wins
17
Neo4j wins
25µs
Fastest bare metal
5%
Tie buffer
TETRA container
Neo4j container
Both containerized · Apple M4 Pro · 16 GB · CPU only · Bar shows container head-to-head
TETRA, 62% faster
Count all nodes
Bare metal: 61µs
TETRA 200µs532µs Neo4j
TETRA, 56% faster
Count all edges
Bare metal: 62µs
TETRA 233µs534µs Neo4j
TETRA, 56% faster
Count Movie
Bare metal: 53µs
TETRA 217µs494µs Neo4j
TETRA, 45% faster
Count Person
Bare metal: 50µs
TETRA 171µs310µs Neo4j
TETRA, 59% faster
Count Genre
Bare metal: 47µs
TETRA 169µs411µs Neo4j
TETRA, 61% faster
Count User
Bare metal: 34µs
TETRA 144µs372µs Neo4j
TETRA, 61% faster
Count ACTED_IN
Bare metal: 29µs
TETRA 141µs358µs Neo4j
TETRA, 62% faster
Count RATED
Bare metal: 27µs
TETRA 135µs351µs Neo4j
TETRA, 41% faster
Count DIRECTED
Bare metal: 26µs
TETRA 174µs293µs Neo4j
TETRA, 49% faster
Count IN_GENRE
Bare metal: 25µs
TETRA 158µs307µs Neo4j
TETRA, 72% faster
Lookup Matrix
Bare metal: 28µs
TETRA 156µs558µs Neo4j
TETRA, 55% faster
Lookup Keanu
Bare metal: 27µs
TETRA 163µs359µs Neo4j
TETRA, 54% faster
Lookup Toy Story
Bare metal: 27µs
TETRA 180µs393µs Neo4j
TETRA, 49% faster
Actors in Matrix
Bare metal: 34µs
TETRA 189µs371µs Neo4j
TETRA, 43% faster
Movies by Keanu
Bare metal: 92µs
TETRA 271µs475µs Neo4j
TETRA, 44% faster
Genres of Toy Story
Bare metal: 36µs
TETRA 164µs293µs Neo4j
TETRA, 38% faster
Directors of Matrix
Bare metal: 32µs
TETRA 160µs259µs Neo4j
TETRA, 48% faster
Movies by Spielberg
Bare metal: 86µs
TETRA 272µs528µs Neo4j
TETRA, 73% faster
Users rated Matrix
Bare metal: 35µs
TETRA 143µs530µs Neo4j
TETRA, 22% faster
Co-actors of Keanu
Bare metal: 372µs
TETRA 741µs950µs Neo4j
Neo4j, 16% faster
Directors of Keanu movies
Bare metal: 279µs
TETRA 1.0ms835µs Neo4j
Neo4j, 5% faster
Genres Keanu acts in
Bare metal: 277µs
TETRA 687µs651µs Neo4j
Neo4j, 13% faster
Actors same genre as Matrix
Bare metal: 514µs
TETRA 1.1ms952µs Neo4j
Neo4j, 17% faster
Users rated Keanu movies
Bare metal: 399µs
TETRA 1.0ms831µs Neo4j
TETRA, 47% faster
3-hop actor chain
Bare metal: 464µs
TETRA 850µs1.6ms Neo4j
Neo4j, 44% faster
Actor-movie-genre-movie
Bare metal: 372µs
TETRA 1.0ms561µs Neo4j
Neo4j, 75% faster
User-movie-actor-movie
Bare metal: 599µs
TETRA 1.6ms397µs Neo4j
TETRA, 39% faster
Movies per genre
Bare metal: 3.8ms
TETRA 5.1ms8.3ms Neo4j
TETRA, 97% faster
Top rated movies
Bare metal: 1.5ms
TETRA 2.1ms60.6ms Neo4j
TETRA, 68% faster
Prolific actors
Bare metal: 6.8ms
TETRA 7.5ms23.4ms Neo4j
TETRA, 37% faster
Prolific directors
Bare metal: 5.4ms
TETRA 6.0ms9.5ms Neo4j
TETRA, 96% faster
Avg ratings per genre
Bare metal: 2.9ms
TETRA 3.4ms84.3ms Neo4j
TETRA, 92% faster
Genre popularity
Bare metal: 3.0ms
TETRA 3.2ms40.1ms Neo4j
TETRA, 24% faster
Forward WITH + filter
Bare metal: 333µs
TETRA 400µs528µs Neo4j
Neo4j, 91% faster
Forward WITH + DISTINCT
Bare metal: 4.4ms
TETRA 4.8ms438µs Neo4j
TETRA, 43% faster
WITH agg + filter
Bare metal: 4.9ms
TETRA 5.8ms10.2ms Neo4j
Neo4j, 94% faster
WITH stage barrier
Bare metal: 7.9ms
TETRA 8.8ms509µs Neo4j
TETRA, 14% faster
Director's other movies
Bare metal: 230µs
TETRA 378µs439µs Neo4j
Neo4j, 28% faster
Collab filter
Bare metal: 642µs
TETRA 840µs608µs Neo4j
TETRA, 38% faster
MATCH+MATCH shared var
Bare metal: 269µs
TETRA 327µs531µs Neo4j
TETRA, 45% faster
MATCH+MATCH chain
Bare metal: 213µs
TETRA 277µs500µs Neo4j
Neo4j, 91% faster
Return both endpoints
Bare metal: 4.4ms
TETRA 4.7ms427µs Neo4j
Neo4j, 99% faster
Return all 3 vars
Bare metal: 35.3ms
TETRA 35.6ms453µs Neo4j
Neo4j, 36% faster
Edge type() in RETURN
Bare metal: 2.5ms
TETRA 2.2ms1.4ms Neo4j
TETRA, 68% faster
Whole node + prop
Bare metal: 234µs
TETRA 306µs955µs Neo4j
TETRA, 43% faster
3-match chain
Bare metal: 279µs
TETRA 453µs798µs Neo4j
TETRA, 45% faster
Multi-pattern shared
Bare metal: 198µs
TETRA 290µs525µs Neo4j
TETRA, 73% faster
shortestPath
Bare metal: 69µs
TETRA 197µs730µs Neo4j
TETRA, 66% faster
OPTIONAL MATCH basic
Bare metal: 55µs
TETRA 165µs492µs Neo4j
TETRA, 32% faster
OPTIONAL MATCH chain
Bare metal: 417µs
TETRA 519µs768µs Neo4j
TETRA, 33% faster
OPTIONAL null emit
Bare metal: 58µs
TETRA 195µs289µs Neo4j
TETRA, 56% faster
Named path return
Bare metal: 288µs
TETRA 408µs930µs Neo4j
Neo4j, 8% faster
Edge var type()
Bare metal: 393µs
TETRA 486µs447µs Neo4j
TETRA, 27% faster
Edge var props
Bare metal: 181µs
TETRA 313µs429µs Neo4j
TETRA, 55% faster
RETURN *
Bare metal: 299µs
TETRA 368µs824µs Neo4j
TETRA, 58% faster
Cartesian 2-node
Bare metal: 56µs
TETRA 214µs513µs Neo4j
Neo4j, 50% faster
EXISTS in WHERE
Bare metal: 2.5ms
TETRA 2.8ms1.4ms Neo4j
TETRA, 66% faster
OR in WHERE
Bare metal: 228µs
TETRA 279µs813µs Neo4j
TETRA, 72% faster
Count + group + order
Bare metal: 7.0ms
TETRA 7.6ms26.8ms Neo4j
Neo4j, 6% faster
4-hop actor chain
Bare metal: 956µs
TETRA 855µs805µs Neo4j
TETRA, 54% faster
Kevin Bacon 2-degree
Bare metal: 1.0ms
TETRA 639µs1.4ms Neo4j
TETRA, 22% faster
Kevin Bacon 3-degree
Bare metal: 1.3ms
TETRA 931µs1.2ms Neo4j
TETRA, 14% faster
Kevin Bacon 4-degree
Bare metal: 1.5ms
TETRA 1.2ms1.4ms Neo4j
TETRA, 72% faster
VLP 1..4 from Keanu
Bare metal: 194µs
TETRA 285µs1.0ms Neo4j
TETRA, 74% faster
VLP 1..6 Kevin Bacon
Bare metal: 1.0ms
TETRA 653µs2.5ms Neo4j
TETRA, 92% faster
Full genre cross-agg
Bare metal: 3.1ms
TETRA 3.6ms45.8ms Neo4j
TETRA, 57% faster
Content-based recs
Bare metal: 613µs
TETRA 781µs1.8ms Neo4j
TETRA, 100% faster
Collab filter recs
Bare metal: 2.5ms
TETRA 2.9ms825.1ms Neo4j
TETRA, 57% faster
Similar users
Bare metal: 235µs
TETRA 395µs913µs Neo4j
TETRA, 69% faster
Actor filmography
Bare metal: 317µs
TETRA 277µs905µs Neo4j
TETRA, 20% faster
Movie detail page
Bare metal: 2.5ms
TETRA 2.0ms2.5ms Neo4j
Neo4j, 47% faster
Genre browse
Bare metal: 3.1ms
TETRA 3.2ms1.7ms Neo4j
TETRA, 35% faster
Search by title prefix
Bare metal: 337µs
TETRA 379µs579µs Neo4j
TETRA, 62% faster
Mutual connections
Bare metal: 67µs
TETRA 163µs431µs Neo4j
TETRA, 23% faster
Friend-of-friend
Bare metal: 509µs
TETRA 640µs826µs Neo4j
Neo4j, 89% faster
Yearly movie count
Bare metal: 34.6ms
TETRA 37.6ms4.3ms Neo4j
TETRA, 96% faster
Top genres by avg rating
Bare metal: 2.9ms
TETRA 3.3ms73.4ms Neo4j
TETRA, 84% faster
Most connected actors
Bare metal: 13.1ms
TETRA 13.9ms88.1ms Neo4j
graph LR
  N((n)):::any -->|count| R[count]:::result

Counts & Lookups

Count all nodes

TETRA, 62% faster
TETRA bare metal: 61µs
TETRA container: 200µs
Neo4j container: 532µs
MATCH (n) RETURN count(n)
graph LR
  A((a)):::any -->|r| B((b)):::any
  B -->|count| R[count]:::result

Counts & Lookups

Count all edges

TETRA, 56% faster
TETRA bare metal: 62µs
TETRA container: 233µs
Neo4j container: 534µs
MATCH ()-[r]->() RETURN count(r)
graph LR
  M[Movie]:::movie -->|count| R[count]:::result

Counts & Lookups

Count Movie

TETRA, 56% faster
TETRA bare metal: 53µs
TETRA container: 217µs
Neo4j container: 494µs
MATCH (n:Movie) RETURN count(n)
graph LR
  P[Person]:::person -->|count| R[count]:::result

Counts & Lookups

Count Person

TETRA, 45% faster
TETRA bare metal: 50µs
TETRA container: 171µs
Neo4j container: 310µs
MATCH (n:Person) RETURN count(n)
graph LR
  G[Genre]:::genre -->|count| R[count]:::result

Counts & Lookups

Count Genre

TETRA, 59% faster
TETRA bare metal: 47µs
TETRA container: 169µs
Neo4j container: 411µs
MATCH (n:Genre) RETURN count(n)
graph LR
  U[User]:::user -->|count| R[count]:::result

Counts & Lookups

Count User

TETRA, 61% faster
TETRA bare metal: 34µs
TETRA container: 144µs
Neo4j container: 372µs
MATCH (n:User) RETURN count(n)
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  M -->|count| R[count]:::result

Counts & Lookups

Count ACTED_IN

TETRA, 61% faster
TETRA bare metal: 29µs
TETRA container: 141µs
Neo4j container: 358µs
MATCH ()-[r:ACTED_IN]->() RETURN count(r)
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  M -->|count| R[count]:::result

Counts & Lookups

Count RATED

TETRA, 62% faster
TETRA bare metal: 27µs
TETRA container: 135µs
Neo4j container: 351µs
MATCH ()-[r:RATED]->() RETURN count(r)
graph LR
  P[Person]:::person -->|DIRECTED| M[Movie]:::movie
  M -->|count| R[count]:::result

Counts & Lookups

Count DIRECTED

TETRA, 41% faster
TETRA bare metal: 26µs
TETRA container: 174µs
Neo4j container: 293µs
MATCH ()-[r:DIRECTED]->() RETURN count(r)
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  G -->|count| R[count]:::result

Counts & Lookups

Count IN_GENRE

TETRA, 49% faster
TETRA bare metal: 25µs
TETRA container: 158µs
Neo4j container: 307µs
MATCH ()-[r:IN_GENRE]->() RETURN count(r)
graph LR
  M[The Matrix]:::movie

Counts & Lookups

Lookup Matrix

TETRA, 72% faster
TETRA bare metal: 28µs
TETRA container: 156µs
Neo4j container: 558µs
MATCH (m:Movie {title:'The Matrix'}) RETURN m
graph LR
  P[Keanu]:::person

Counts & Lookups

Lookup Keanu

TETRA, 55% faster
TETRA bare metal: 27µs
TETRA container: 163µs
Neo4j container: 359µs
MATCH (p:Person {name:'Keanu Reeves'}) RETURN p
graph LR
  M[Toy Story]:::movie

Counts & Lookups

Lookup Toy Story

TETRA, 54% faster
TETRA bare metal: 27µs
TETRA container: 180µs
Neo4j container: 393µs
MATCH (m:Movie {title:'Toy Story'}) RETURN m
graph RL
  A[Actor]:::person -->|ACTED_IN| M[The Matrix]:::movie

Single-Hop Traversals

Actors in Matrix

TETRA, 49% faster
TETRA bare metal: 34µs
TETRA container: 189µs
Neo4j container: 371µs
MATCH (m:Movie {title:'The Matrix'})<-[:ACTED_IN]-(a) RETURN a.name
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie

Single-Hop Traversals

Movies by Keanu

TETRA, 43% faster
TETRA bare metal: 92µs
TETRA container: 271µs
Neo4j container: 475µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m) RETURN m.title
graph LR
  M[Toy Story]:::movie -->|IN_GENRE| G[Genre]:::genre

Single-Hop Traversals

Genres of Toy Story

TETRA, 44% faster
TETRA bare metal: 36µs
TETRA container: 164µs
Neo4j container: 293µs
MATCH (m:Movie {title:'Toy Story'})-[:IN_GENRE]->(g) RETURN g.name
graph RL
  D[Director]:::person -->|DIRECTED| M[The Matrix]:::movie

Single-Hop Traversals

Directors of Matrix

TETRA, 38% faster
TETRA bare metal: 32µs
TETRA container: 160µs
Neo4j container: 259µs
MATCH (m:Movie {title:'The Matrix'})<-[:DIRECTED]-(d) RETURN d.name
graph LR
  P[Spielberg]:::person -->|DIRECTED| M[Movie]:::movie

Single-Hop Traversals

Movies by Spielberg

TETRA, 48% faster
TETRA bare metal: 86µs
TETRA container: 272µs
Neo4j container: 528µs
MATCH (p:Person {name:'Spielberg'})-[:DIRECTED]->(m) RETURN m.title
graph RL
  U[User]:::user -->|RATED| M[The Matrix]:::movie

Single-Hop Traversals

Users rated Matrix

TETRA, 73% faster
TETRA bare metal: 35µs
TETRA container: 143µs
Neo4j container: 530µs
MATCH (u:User)-[:RATED]->(m:Movie {title:'The Matrix'}) RETURN count(u)
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  O[Other]:::person -->|ACTED_IN| M

Two-Hop Patterns

Co-actors of Keanu

TETRA, 22% faster
TETRA bare metal: 372µs
TETRA container: 741µs
Neo4j container: 950µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(other) RETURN DISTINCT other.name LIMIT 50
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  D[Director]:::person -->|DIRECTED| M

Two-Hop Patterns

Directors of Keanu movies

Neo4j, 16% faster
TETRA bare metal: 279µs
TETRA container: 1.0ms
Neo4j container: 835µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) RETURN d.name
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Two-Hop Patterns

Genres Keanu acts in

Neo4j, 5% faster
TETRA bare metal: 277µs
TETRA container: 687µs
Neo4j container: 651µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m)-[:IN_GENRE]->(g) RETURN DISTINCT g.name
graph LR
  M[Matrix]:::movie -->|IN_GENRE| G[Genre]:::genre
  O[Other]:::movie -->|IN_GENRE| G

Two-Hop Patterns

Actors same genre as Matrix

Neo4j, 13% faster
TETRA bare metal: 514µs
TETRA container: 1.1ms
Neo4j container: 952µs
MATCH (m:Movie {title:'The Matrix'})-[:IN_GENRE]->(g)<-[:IN_GENRE]-(other) RETURN other.title LIMIT 50
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  U[User]:::user -->|RATED| M

Two-Hop Patterns

Users rated Keanu movies

Neo4j, 17% faster
TETRA bare metal: 399µs
TETRA container: 1.0ms
Neo4j container: 831µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m)<-[:RATED]-(u) RETURN count(DISTINCT u)
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  O[Other]:::person -->|ACTED_IN| M
  O -->|ACTED_IN| M2[Movie2]:::movie

Three-Hop Chains

3-hop actor chain

TETRA, 47% faster
TETRA bare metal: 464µs
TETRA container: 850µs
Neo4j container: 1.6ms
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(o)-[:ACTED_IN]->(m2) RETURN DISTINCT m2.title LIMIT 50
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  M2[Movie2]:::movie -->|IN_GENRE| G

Three-Hop Chains

Actor-movie-genre-movie

Neo4j, 44% faster
TETRA bare metal: 372µs
TETRA container: 1.0ms
Neo4j container: 561µs
MATCH (p)-[:ACTED_IN]->(m)-[:IN_GENRE]->(g)<-[:IN_GENRE]-(m2) RETURN DISTINCT m2.title LIMIT 30
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  A[Actor]:::person -->|ACTED_IN| M
  A -->|ACTED_IN| M2[Movie2]:::movie

Three-Hop Chains

User-movie-actor-movie

Neo4j, 75% faster
TETRA bare metal: 599µs
TETRA container: 1.6ms
Neo4j container: 397µs
MATCH (u:User)-[:RATED]->(m)<-[:ACTED_IN]-(a)-[:ACTED_IN]->(m2) RETURN DISTINCT m2.title LIMIT 30
graph RL
  M1[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  M2[Movie]:::movie -->|IN_GENRE| G
  M3[Movie]:::movie -->|IN_GENRE| G
  G -->|count| R[result]:::result

Aggregations

Movies per genre

TETRA, 39% faster
TETRA bare metal: 3.8ms
TETRA container: 5.1ms
Neo4j container: 8.3ms
MATCH (g:Genre)<-[:IN_GENRE]-(m) WITH g, count(m) AS c RETURN g.name, c ORDER BY c DESC LIMIT 10
graph RL
  U1[User]:::user -->|RATED| M[Movie]:::movie
  U2[User]:::user -->|RATED| M
  M -->|avg| R[result]:::result

Aggregations

Top rated movies

TETRA, 97% faster
TETRA bare metal: 1.5ms
TETRA container: 2.1ms
Neo4j container: 60.6ms
MATCH (m:Movie)<-[r:RATED]-(u) WITH m, avg(r.rating) AS avg RETURN m.title, avg ORDER BY avg DESC LIMIT 10
graph LR
  P[Person]:::person -->|ACTED_IN| M1[Movie]:::movie
  P -->|ACTED_IN| M2[Movie]:::movie
  P -->|count+filter| R[result]:::result

Aggregations

Prolific actors

TETRA, 68% faster
TETRA bare metal: 6.8ms
TETRA container: 7.5ms
Neo4j container: 23.4ms
MATCH (p:Person)-[:ACTED_IN]->(m) WITH p, count(m) AS c WHERE c>10 RETURN p.name, c ORDER BY c DESC LIMIT 10
graph LR
  P[Person]:::person -->|DIRECTED| M1[Movie]:::movie
  P -->|DIRECTED| M2[Movie]:::movie
  P -->|count| R[result]:::result

Aggregations

Prolific directors

TETRA, 37% faster
TETRA bare metal: 5.4ms
TETRA container: 6.0ms
Neo4j container: 9.5ms
MATCH (p:Person)-[:DIRECTED]->(m) WITH p, count(m) AS c RETURN p.name, c ORDER BY c DESC LIMIT 10
graph RL
  U[User]:::user -->|RATED| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  G -->|avg| R[result]:::result

Aggregations

Avg ratings per genre

TETRA, 96% faster
TETRA bare metal: 2.9ms
TETRA container: 3.4ms
Neo4j container: 84.3ms
MATCH (g:Genre)<-[:IN_GENRE]-(m)<-[r:RATED]-(u) RETURN g.name, avg(r.rating) ORDER BY avg DESC
graph RL
  U[User]:::user -->|RATED| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  G -->|count| R[result]:::result

Aggregations

Genre popularity

TETRA, 92% faster
TETRA bare metal: 3.0ms
TETRA container: 3.2ms
Neo4j container: 40.1ms
MATCH (g:Genre)<-[:IN_GENRE]-(m)<-[r:RATED]-(u) RETURN g.name, count(r) ORDER BY count DESC
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie -->|WHERE year>2000| R[result]:::result

WITH Pipeline

Forward WITH + filter

TETRA, 24% faster
TETRA bare metal: 333µs
TETRA container: 400µs
Neo4j container: 528µs
MATCH (p:Person)-[:ACTED_IN]->(m) WITH p, m WHERE m.year > 2000 RETURN p.name, m.title LIMIT 20
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie -->|DISTINCT| R[result]:::result

WITH Pipeline

Forward WITH + DISTINCT

Neo4j, 91% faster
TETRA bare metal: 4.4ms
TETRA container: 4.8ms
Neo4j container: 438µs
MATCH (p)-[:ACTED_IN]->(m) WITH DISTINCT m RETURN m.title LIMIT 20
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  P -->|count+WHERE| R[result]:::result

WITH Pipeline

WITH agg + filter

TETRA, 43% faster
TETRA bare metal: 4.9ms
TETRA container: 5.8ms
Neo4j container: 10.2ms
MATCH (p)-[:ACTED_IN]->(m) WITH p, count(m) AS c WHERE c>5 RETURN p.name, c LIMIT 10
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  P -->|WITH barrier| P2[Person]:::person -->|DIRECTED| M2[Movie2]:::movie

WITH Pipeline

WITH stage barrier

Neo4j, 94% faster
TETRA bare metal: 7.9ms
TETRA container: 8.8ms
Neo4j container: 509µs
MATCH (p)-[:ACTED_IN]->(m) WITH p, count(m) AS c ORDER BY c DESC LIMIT 20 MATCH (p)-[:DIRECTED]->(m2) RETURN p.name, m2.title
graph LR
  M[Matrix]:::movie
  D[Director]:::person -->|DIRECTED| M
  D -->|DIRECTED| O[Other]:::movie

WITH Pipeline

Director's other movies

TETRA, 14% faster
TETRA bare metal: 230µs
TETRA container: 378µs
Neo4j container: 439µs
MATCH (m:Movie {title:'The Matrix'})<-[:DIRECTED]-(d)-[:DIRECTED]->(other) RETURN other.title
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M
  O -->|shared>3| R[result]:::result

WITH Pipeline

Collab filter

Neo4j, 28% faster
TETRA bare metal: 642µs
TETRA container: 840µs
Neo4j container: 608µs
MATCH (u:User)-[:RATED]->(m)<-[:RATED]-(other) WITH other, count(m) AS shared WHERE shared>3 RETURN other LIMIT 10
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Multi-MATCH

MATCH+MATCH shared var

TETRA, 38% faster
TETRA bare metal: 269µs
TETRA container: 327µs
Neo4j container: 531µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m) MATCH (m)-[:IN_GENRE]->(g) RETURN m.title, g.name
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  D[Director]:::person -->|DIRECTED| M

Multi-MATCH

MATCH+MATCH chain

TETRA, 45% faster
TETRA bare metal: 213µs
TETRA container: 277µs
Neo4j container: 500µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m) MATCH (m)<-[:DIRECTED]-(d) RETURN m.title, d.name
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  P -->|return| R1[p]:::result
  M -->|return| R2[m]:::result

Multi-MATCH

Return both endpoints

Neo4j, 91% faster
TETRA bare metal: 4.4ms
TETRA container: 4.7ms
Neo4j container: 427µs
MATCH (p)-[:ACTED_IN]->(m) RETURN p, m LIMIT 30
graph LR
  P[Person]:::person -->|r:ACTED_IN| M[Movie]:::movie
  style P fill:#4e79a7
  style M fill:#f28e2b

Multi-MATCH

Return all 3 vars

Neo4j, 99% faster
TETRA bare metal: 35.3ms
TETRA container: 35.6ms
Neo4j container: 453µs
MATCH (p)-[r:ACTED_IN]->(m) RETURN p, r, m LIMIT 20
graph LR
  P[Keanu]:::person -->|type?| M[target]:::any

Multi-MATCH

Edge type() in RETURN

Neo4j, 36% faster
TETRA bare metal: 2.5ms
TETRA container: 2.2ms
Neo4j container: 1.4ms
MATCH (p:Person {name:'Keanu'})-[r]->(m) RETURN type(r), m.title
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie

Multi-MATCH

Whole node + prop

TETRA, 68% faster
TETRA bare metal: 234µs
TETRA container: 306µs
Neo4j container: 955µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m) RETURN p, m.title
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  M -->|IN_GENRE| G[Genre]:::genre
  D[Director]:::person -->|DIRECTED| M

Multi-MATCH

3-match chain

TETRA, 43% faster
TETRA bare metal: 279µs
TETRA container: 453µs
Neo4j container: 798µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m) MATCH (m)-[:IN_GENRE]->(g) MATCH (m)<-[:DIRECTED]-(d) RETURN m.title, g.name, d.name LIMIT 15
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Multi-MATCH

Multi-pattern shared

TETRA, 45% faster
TETRA bare metal: 198µs
TETRA container: 290µs
Neo4j container: 525µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m), (m)-[:IN_GENRE]->(g) RETURN m.title, collect(g.name)
graph LR
  A[Keanu]:::person -.->|shortest| B[Tom Hanks]:::person

Exotic Patterns

shortestPath

TETRA, 73% faster
TETRA bare metal: 69µs
TETRA container: 197µs
Neo4j container: 730µs
MATCH p=shortestPath((a:Person {name:'Keanu'})-[*]-(b:Person {name:'Tom Hanks'})) RETURN p
graph RL
  D[Director?]:::person -.->|DIRECTED| M[Matrix]:::movie

Exotic Patterns

OPTIONAL MATCH basic

TETRA, 66% faster
TETRA bare metal: 55µs
TETRA container: 165µs
Neo4j container: 492µs
MATCH (m:Movie {title:'The Matrix'}) OPTIONAL MATCH (m)<-[:DIRECTED]-(d) RETURN m.title, d.name
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  D[Director?]:::person -.->|DIRECTED| M

Exotic Patterns

OPTIONAL MATCH chain

TETRA, 32% faster
TETRA bare metal: 417µs
TETRA container: 519µs
Neo4j container: 768µs
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN]->(m) OPTIONAL MATCH (m)<-[:DIRECTED]-(d) RETURN m.title, d.name LIMIT 30
graph LR
  M[Matrix]:::movie -.->|SEQUEL?| S[null]:::any

Exotic Patterns

OPTIONAL null emit

TETRA, 33% faster
TETRA bare metal: 58µs
TETRA container: 195µs
Neo4j container: 289µs
MATCH (m:Movie {title:'The Matrix'}) OPTIONAL MATCH (m)-[:SEQUEL]->(s) RETURN m.title, s.title
graph LR
  P[Keanu]:::person ==>|path p| M[Movie]:::movie

Exotic Patterns

Named path return

TETRA, 56% faster
TETRA bare metal: 288µs
TETRA container: 408µs
Neo4j container: 930µs
MATCH p=(a:Person {name:'Keanu'})-[:ACTED_IN]->(m) RETURN p
graph LR
  P[Keanu]:::person -->|r: ???| N[target]:::any

Exotic Patterns

Edge var type()

Neo4j, 8% faster
TETRA bare metal: 393µs
TETRA container: 486µs
Neo4j container: 447µs
MATCH (p:Person {name:'Keanu'})-[r]->(n) RETURN type(r), labels(n)
graph LR
  U[User]:::user -->|RATED r.rating>4| M[Movie]:::movie

Exotic Patterns

Edge var props

TETRA, 27% faster
TETRA bare metal: 181µs
TETRA container: 313µs
Neo4j container: 429µs
MATCH (u:User)-[r:RATED]->(m:Movie) WHERE r.rating > 4 RETURN m.title, r.rating LIMIT 20
graph LR
  P[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  P -.-> R[*]:::result
  M -.-> R

Exotic Patterns

RETURN *

TETRA, 55% faster
TETRA bare metal: 299µs
TETRA container: 368µs
Neo4j container: 824µs
MATCH (p:Person {name:'Keanu'})-[r:ACTED_IN]->(m) RETURN * LIMIT 38
graph LR
  A[Keanu]:::person
  B[Matrix]:::movie

Exotic Patterns

Cartesian 2-node

TETRA, 58% faster
TETRA bare metal: 56µs
TETRA container: 214µs
Neo4j container: 513µs
MATCH (a:Person {name:'Keanu'}), (b:Movie {title:'The Matrix'}) RETURN a, b
graph LR
  P[Person]:::person -->|EXISTS DIRECTED?| M[Movie]:::movie

Exotic Patterns

EXISTS in WHERE

Neo4j, 50% faster
TETRA bare metal: 2.5ms
TETRA container: 2.8ms
Neo4j container: 1.4ms
MATCH (p:Person) WHERE EXISTS {(p)-[:DIRECTED]->()} RETURN p.name LIMIT 20
graph LR
  M[Movie
year=1999 OR 2003]:::movie

Exotic Patterns

OR in WHERE

TETRA, 66% faster
TETRA bare metal: 228µs
TETRA container: 279µs
Neo4j container: 813µs
MATCH (m:Movie) WHERE m.year=1999 OR m.year=2003 RETURN m.title LIMIT 20
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  G -->|count DISTINCT| R[result]:::result

Exotic Patterns

Count + group + order

TETRA, 72% faster
TETRA bare metal: 7.0ms
TETRA container: 7.6ms
Neo4j container: 26.8ms
MATCH (p:Person)-[:ACTED_IN]->(m)-[:IN_GENRE]->(g) WITH g, count(DISTINCT p) AS c RETURN g.name, c ORDER BY c DESC LIMIT 10
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  O[Other]:::person -->|ACTED_IN| M
  O -->|ACTED_IN| M2[Movie2]:::movie
  O2[Other2]:::person -->|ACTED_IN| M2

Variable-Length Paths

4-hop actor chain

Neo4j, 6% faster
TETRA bare metal: 956µs
TETRA container: 855µs
Neo4j container: 805µs
MATCH (p)-[:ACTED_IN]->(m)<-[:ACTED_IN]-(o)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(o2) RETURN DISTINCT o2.name LIMIT 50
graph LR
  KB[Kevin Bacon]:::person -.->|*1..2| O[Person]:::person

Variable-Length Paths

Kevin Bacon 2-degree

TETRA, 54% faster
TETRA bare metal: 1.0ms
TETRA container: 639µs
Neo4j container: 1.4ms
MATCH (kb:Person {name:'Kevin Bacon'})-[:ACTED_IN*1..2]-(other:Person) RETURN count(DISTINCT other)
graph LR
  KB[Kevin Bacon]:::person -.->|*1..3| O[Person]:::person

Variable-Length Paths

Kevin Bacon 3-degree

TETRA, 22% faster
TETRA bare metal: 1.3ms
TETRA container: 931µs
Neo4j container: 1.2ms
MATCH (kb:Person {name:'Kevin Bacon'})-[:ACTED_IN*1..3]-(other:Person) RETURN count(DISTINCT other)
graph LR
  KB[Kevin Bacon]:::person -.->|*1..4| O[Person]:::person

Variable-Length Paths

Kevin Bacon 4-degree

TETRA, 14% faster
TETRA bare metal: 1.5ms
TETRA container: 1.2ms
Neo4j container: 1.4ms
MATCH (kb:Person {name:'Kevin Bacon'})-[:ACTED_IN*1..4]-(other:Person) RETURN count(DISTINCT other)
graph LR
  P[Keanu]:::person -.->|*1..4| O[Person]:::person

Variable-Length Paths

VLP 1..4 from Keanu

TETRA, 72% faster
TETRA bare metal: 194µs
TETRA container: 285µs
Neo4j container: 1.0ms
MATCH (p:Person {name:'Keanu'})-[:ACTED_IN*1..4]-(other:Person) RETURN DISTINCT other.name LIMIT 33
graph LR
  KB[Kevin Bacon]:::person -.->|*1..6| O[Person]:::person

Variable-Length Paths

VLP 1..6 Kevin Bacon

TETRA, 74% faster
TETRA bare metal: 1.0ms
TETRA container: 653µs
Neo4j container: 2.5ms
MATCH (kb:Person {name:'Kevin Bacon'})-[:ACTED_IN*1..6]-(other:Person) RETURN DISTINCT other.name LIMIT 100
graph RL
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  G -->|count DISTINCT| R[result]:::result

Variable-Length Paths

Full genre cross-agg

TETRA, 92% faster
TETRA bare metal: 3.1ms
TETRA container: 3.6ms
Neo4j container: 45.8ms
MATCH (g:Genre)<-[:IN_GENRE]-(m)<-[:ACTED_IN]-(p) WITH g, count(DISTINCT p) AS c RETURN g.name, c ORDER BY c DESC
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  R[Rec!]:::movie -->|IN_GENRE| G

Real App Queries

Content-based recs

TETRA, 57% faster
TETRA bare metal: 613µs
TETRA container: 781µs
Neo4j container: 1.8ms
MATCH (u:User {userId:'1'})-[:RATED]->(m)-[:IN_GENRE]->(g)<-[:IN_GENRE]-(rec) WHERE NOT (u)-[:RATED]->(rec) RETURN rec.title LIMIT 20
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M
  O -->|RATED| R[Rec!]:::movie

Real App Queries

Collab filter recs

TETRA, 100% faster
TETRA bare metal: 2.5ms
TETRA container: 2.9ms
Neo4j container: 825.1ms
MATCH (u:User {userId:'1'})-[r:RATED]->(m)<-[:RATED]-(other)-[r2:RATED]->(rec) WHERE r.rating>3.5 AND r2.rating>3.5 RETURN rec.title, count(other) AS score ORDER BY score DESC LIMIT 20
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M

Real App Queries

Similar users

TETRA, 57% faster
TETRA bare metal: 235µs
TETRA container: 395µs
Neo4j container: 913µs
MATCH (u:User {userId:'1'})-[:RATED]->(m)<-[:RATED]-(other) RETURN other.userId, count(m) LIMIT 20
graph LR
  P[Tom Hanks]:::person -->|ACTED_IN| M[Movie]:::movie

Real App Queries

Actor filmography

TETRA, 69% faster
TETRA bare metal: 317µs
TETRA container: 277µs
Neo4j container: 905µs
MATCH (p:Person {name:'Tom Hanks'})-[:ACTED_IN]->(m) RETURN m.title, m.year ORDER BY m.year DESC
graph RL
  A1[Actor]:::person -->|ACTED_IN| M[Matrix]:::movie
  A2[Actor]:::person -->|ACTED_IN| M
  A3[Actor]:::person -->|ACTED_IN| M

Real App Queries

Movie detail page

TETRA, 20% faster
TETRA bare metal: 2.5ms
TETRA container: 2.0ms
Neo4j container: 2.5ms
MATCH (m:Movie {title:'The Matrix'})<-[:ACTED_IN]-(a) RETURN m, collect(a.name)
graph RL
  M1[Movie]:::movie -->|IN_GENRE| G[Action]:::genre
  M2[Movie]:::movie -->|IN_GENRE| G

Real App Queries

Genre browse

Neo4j, 47% faster
TETRA bare metal: 3.1ms
TETRA container: 3.2ms
Neo4j container: 1.7ms
MATCH (g:Genre {name:'Action'})<-[:IN_GENRE]-(m) RETURN m.title, m.year ORDER BY m.year DESC LIMIT 50
graph LR
  M[Movie
title STARTS WITH]:::movie

Real App Queries

Search by title prefix

TETRA, 35% faster
TETRA bare metal: 337µs
TETRA container: 379µs
Neo4j container: 579µs
MATCH (m:Movie) WHERE m.title STARTS WITH 'The' RETURN m.title LIMIT 30
graph LR
  A[Keanu]:::person -->|ACTED_IN| M[Movie]:::movie
  B[Laurence]:::person -->|ACTED_IN| M

Real App Queries

Mutual connections

TETRA, 62% faster
TETRA bare metal: 67µs
TETRA container: 163µs
Neo4j container: 431µs
MATCH (a:Person {name:'Keanu'})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(b:Person {name:'Laurence'}) RETURN m.title
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M
  O -->|RATED| R[Rec]:::movie

Real App Queries

Friend-of-friend

TETRA, 23% faster
TETRA bare metal: 509µs
TETRA container: 640µs
Neo4j container: 826µs
MATCH (u:User {userId:'1'})-[:RATED]->(m)<-[:RATED]-(other)-[:RATED]->(rec) RETURN DISTINCT rec.title LIMIT 30
graph LR
  M[Movie]:::movie -->|group by year| R[year, count]:::result

Real App Queries

Yearly movie count

Neo4j, 89% faster
TETRA bare metal: 34.6ms
TETRA container: 37.6ms
Neo4j container: 4.3ms
MATCH (m:Movie) RETURN m.year, count(m) ORDER BY m.year
graph RL
  U[User]:::user -->|RATED| M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre
  G -->|avg rating| R[result]:::result

Real App Queries

Top genres by avg rating

TETRA, 96% faster
TETRA bare metal: 2.9ms
TETRA container: 3.3ms
Neo4j container: 73.4ms
MATCH (g:Genre)<-[:IN_GENRE]-(m)<-[r:RATED]-(u) RETURN g.name, avg(r.rating) ORDER BY avg DESC LIMIT 10
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  O[Other]:::person -->|ACTED_IN| M
  P -->|count DISTINCT| R[result]:::result

Real App Queries

Most connected actors

TETRA, 84% faster
TETRA bare metal: 13.1ms
TETRA container: 13.9ms
Neo4j container: 88.1ms
MATCH (p:Person)-[:ACTED_IN]->(m)<-[:ACTED_IN]-(other) WITH p, count(DISTINCT other) AS c RETURN p.name, c ORDER BY c DESC LIMIT 10

Algorithms

Ask questions. Get answers on the graph.

Who’s the most connected? Where are the clusters? What’s the shortest path? Run it, see it.

Centrality 8 algorithms
Degree, betweenness, closeness, PageRank, HITS, eigenvector, clustering coefficient, eccentricity
Community 2 algorithms
Label propagation, connected components — color-coded clusters you can expand and focus
Path 4 algorithms
Shortest path, ego network, articulation points, triangle enumeration
Structure 2 algorithms
K-core decomposition, connected components — find the densest subgraphs
Metric 3 algorithms
Network density, triangle count, graph diameter — whole-graph scalar measures
Diffusion 3 algorithms
Influence spread, anomaly detection, structural fingerprinting

Standards Compliance

No lock-in. Real Cypher.

TETRA passes all 1,611 scenarios in the openCypher TCK. So does Neo4j. Your queries work on both. Move when you want to.

Same language. Faster results.

1,611/1,611
TETRA
1,611/1,611
Neo4j

Methodology

platform: Apple M4 Pro · 16 GB RAM · macOS · CPU only

environment: Both databases containerized, identical conditions

dataset: Recommendations — 28,863 nodes, 166,261 edges

queries: 18 Cypher queries across 4 categories

metric: p50 median latency in microseconds — lower is better

throughput: Mixed workload, queries per second — higher is better

cypher_tck: 1,611 / 1,611 scenarios (100%)

Demo the TETRA viewer for FREE in your browser.

Explore the recommendations dataset in 3D. 2,330 nodes. 3,506 edges. Running entirely in your browser.

Launch Demo →

Introductory Pricing

$10,864
Configuration
$299/mo
Includes operational support
Get TETRA →

Questions? Schedule a call or reach out.

We use cookies to understand how you use our site and improve your experience. Privacy Policy