All Resources

R-53

Technology

Why We Kept Cypher Around

If TQL is better for LLMs and SQL is better for analysts, why ship a third query language? Because the world has a decade of Cypher queries already written, and breaking them helps no one.

PAR2 Labs

August 29, 2026

2 min

Why We Kept Cypher Around

The cleanest design decision for Tessera would have been: one query language, the new one. Ship TQL, embrace the future, let the past catch up. We didn't do that, and the reason is boringly pragmatic.

01

The audience

A non-trivial fraction of teams evaluating Tessera have a Cypher codebase. Some of it is graph-database-portable. Some of it is locked to a specific vendor's extensions. None of it wants to be rewritten to evaluate a new database.

Asking “would you rewrite 600 lines of Cypher to try our engine for a week” is the fastest way to lose an evaluation. Tessera supports the common, widely used subset of Cypher, so most existing queries run as written and teams that know Cypher are productive on day one.

02

What the translator does and doesn't do

Does: MATCH patterns, WHERE clauses, RETURN, ORDER BY, LIMIT, SKIP, basic aggregations (count, sum, avg), variable-length paths, OPTIONAL MATCH.

Doesn't: APOC procedures, vendor-specific spatial functions, stored procedures, custom user-defined functions. These map to TQL extensions you'd write yourself if you needed them.

The translator's job is to be honest about what translates.

03

The deeper point

We picked the boundaries deliberately. Cypher patterns that map cleanly to hyperedge traversals are supported. Patterns that assume property-graph binary edges in ways that hyperedges don't model are surfaced as errors at parse time, not as silently-wrong results. The translator's job is to be honest about what translates.

We're not pretending Tessera is Neo4j. We're saying: if you've been writing Cypher, most of your work transfers. That's enough for an evaluation. The teams that move will rewrite the parts that don't.

04

One concrete example

cypher

MATCH (a:Person)-[:KNOWS]->(b:Person)
WHERE a.age > 25
RETURN a.name, b.name
ORDER BY a.name
LIMIT 10

Runs unchanged. The translator emits a TQL plan that walks the KNOWS hyperedges from Person nodes filtered by age, returns the named properties, applies the ORDER and LIMIT. No surprises.

05

What we didn't do

We deliberately didn't try to be a Cypher superset. That path leads to a long tail of edge-case bugs and a maintenance burden that scales with every Neo4j release. The subset that translates cleanly was the line we drew. Past that line, write TQL.

Key Takeaways

01

Asking a team to rewrite its Cypher just to evaluate a new database is the fastest way to lose the evaluation.

02

Tessera supports the common subset of Cypher, so most existing queries run as written.

03

APOC, vendor spatial functions, stored procedures and custom functions are out, and unsupported patterns fail at parse time rather than silently.

04

It is deliberately not a Cypher superset; past the subset that translates cleanly, write TQL.


PAR2 Labs · Technology

Work With Us

Have a problem worth solving?