Skip to main content
How it works

Compile, don't interpret

ConjureDB treats your client's data layer as a compiled program. A query is parsed, bound, optimized, planned and emitted as plain C# before the build ever leaves your machine — so there's no query parser, no planner and no reflection in the query code on the device. Here's each step, with nothing hidden.

The pipeline

Five stages, all at build time

Nothing on this path runs on the player's device. The output is plain C# (or a portable artifact) — there is no query parser on the hot path.

game.conjureyour data & queries
bind & typeanalysis
optimizeCascades · cost-based
planphysical plan
emit C#plain C#
The optimizer

A glass box, not a black box

A Cascades-style, cost-based optimizer makes the choices a senior engineer makes by hand — which index, which join strategy, what order, when to stop scanning, whether to eliminate a sort — but deterministically and exhaustively, using your schema, your indexes, cardinality estimates and profile data. The difference: every choice is inspectable. The plan is output you can read; the strategy names are real and finite; nothing is hidden.

explain
# the plan ConjureDB picks for GetTopScorers — inspectable
TopN (limit=count, order=score desc)
└── Scan (Player,
strategy=SortedSetScan,
index=Player_ByScore)

Ask for the plan and read what it picked — an index walk, bounded, no sort, no allocations.

Reactive data

Keep the result. Apply only the change.

Static queries are the easy half. Your shop screen isn't static — it changes whenever anything it depends on changes. Incremental view maintenance keeps a materialized result fresh by applying only the delta: add an item, you add one row; change a config field, you touch the rows that pointed at it. The cost of staying fresh scales with the size of the change, not the size of the data — the only property that fits inside a frame.

And it is honest about its limits: a query shape it cannot maintain incrementally is rejected at compile time, never silently degraded to a hidden full rescan.

No magic

If you don't trust it, read it

The generated code is plain source you can open. There is no reflection, no runtime code generation, nothing dynamic on the query path — which is exactly why it survives IL2CPP and a tight mobile frame. ConjureDB earns trust by removing mystery, not by asserting quality.