How Is a Geomancy Chart Actually Calculated?

No lookup table anywhere — just XOR, four times over.

Bokki Editorial

The short answer

Geomancy (ʿilm al-raml, "the science of the sand") reads sixteen figures, each a stack of four rows that are either active (a single dot) or passive (a pair of dots). Bokki's engine, chart(), never looks a figure up from a situation — it builds one. Four Mothers are cast first; their rows are transposed into four Daughters; four Nieces come from adding Mothers and Daughters in pairs; two Witnesses come from adding Nieces in pairs; and the Judge, the chart's final answer, comes from adding the two Witnesses. Every one of those additions is the same operation, row by row: two actives make a passive, two passives make a passive, one of each makes an active — which is exactly the XOR bitwise operator, run four times per addition. We ran a classical worked example from our own reference notes through the live engine and it reproduced the textbook chain exactly, Judge and all.

Sixteen figures, four bits each

A figure is nothing more than four yes/no answers — Fire, Air, Water, Earth, each row active or passive — so there are exactly 2⁴ = 16 possible figures, from Populus (all four passive) to Via (all four active). Bokki's FIGURE_NAME table names all sixteen; figureRows() reads any figure back out as its four 1s and 0s. Casting a figure from a seed is deterministic: Bokki hashes the seed string and runs it through a seeded pseudo-random generator to fill four bits, the same construction our runes and Ogham tools already use for their own draws — no Date.now(), no Math.random() inside the chart itself.

Worked example — four Mothers to one Judge

Start from four given Mothers: Carcer, Albus, Puer, Coniunctio. Written as rows (Fire, Air, Water, Earth; active=1, passive=0): Carcer is 1,0,0,1; Albus is 0,0,1,0; Puer is 1,1,0,1; Coniunctio is 0,1,1,0. Transpose those four rows into four Daughters — Daughter 1 reads across the Fire row of all four Mothers, Daughter 2 across Air, and so on — giving Amissio, Fortuna Major, Acquisitio, and Amissio again. Add the Mothers in pairs (Mother 1 + Mother 2, Mother 3 + Mother 4) and the Daughters the same way to get four Nieces: Puella, Puella, Carcer, Via. Add the Nieces in pairs to get two Witnesses, Populus and Coniunctio, and add those two Witnesses to reach the Judge: Coniunctio again — the figure the chart actually answers with. Its four rows, 0,1,1,0, sum to two active dots, an even number — the classical checksum a hand-cast chart uses to catch a mis-drawn figure, and one this chain satisfies automatically, because XOR-ing an even number of active bits from the Mothers keeps that parity all the way down.

Four Mothers become one Judge — pure binary addition, no lookup tableThe codex worked example, reproduced by the engine. Four Mothers — Carcer, Albus, Puer, Coniunctio — are cast first. Their four rows (Fire, Air, Water, Earth) are transposed into four Daughters. Nieces come from row-wise addition of Mothers and Daughters in pairs (odd+odd=even, odd+even=odd, even+even=even — exactly XOR). Two Witnesses come from adding nieces in pairs, and the Judge comes from adding the two Witnesses. The Judge lands on Coniunctio, and its four rows always sum to an even number of active dots — the classical checksum that catches a mis-cast figure.Mothers (cast)CarcerAlbusPuerConiunctioDaughters (transpose)AmissioFortuna MajorAcquisitioAmissioNieces (row-add pairs)PuellaPuellaCarcerViaWitnessesPopulusConiunctioJudgeConiunctio● active · ●● passivechecksum: the Judge's four rows always sum to an even number of ● (active)

The same chain, run by the live tool

/geomancy seeds its chart the same way our runes and Ogham pages do: chart(`raml:${today}:${focus}`), where focus is whatever a person typed, or nothing. Asking with no focus on 23 August 2026, the engine casts Caput Draconis, Caput Draconis, Acquisitio and Fortuna Minor as Mothers, and after the same chain above, the Judge lands on Acquisitio — "gain", read warmly, never as a promise. Ask the exact same question twice and the chart is identical down to every row, because the seed never changes; type a single word into the focus field and the Mothers — and everything downstream — come out completely different. Nothing here is picked to make a good story; it's just what four bits of hashing and four rounds of XOR produce.

What we don't calculate

Bokki draws twelve of the sixteen figures — the four Mothers, four Daughters and four Nieces — but does not place them into the twelve classical astrological houses that traditional geomancy uses to answer specific questions (career, health, and so on); our engine stops at the symbolic Judge and Witnesses. We do not compute a Reconciler as a separate on-screen figure, even though chart() returns one internally (Judge + Mother 1) — it isn't shown because we haven't verified its traditional interpretation against a source we trust. We also do not offer the sand-table's original method of physically counting dots; our seed replaces that step, and the seed is the whole of the randomness — nothing about a person's chart, birth date, or identity feeds into it. And we never treat the Judge as a forecast: the figure names a pattern to sit with, not an event that will happen (D-003).

Closing note — twelve figures cast, one XOR, one Judge

In short: a geomancy chart never looks anything up. Four Mothers are cast from a seed, transposed into four Daughters, added in pairs into four Nieces, added again into two Witnesses, and added a last time into the Judge — five stages, the same row-wise XOR at every stage. Run the classical worked example (Mothers Carcer, Albus, Puer, Coniunctio) through the live engine and it reproduces the textbook chain exactly, ending on Judge Coniunctio with an even two active rows, the built-in checksum. Run the actual product seed for today with no typed focus and the same chain lands on a different, equally real Judge, Acquisitio — because the only input that ever changes the chart is the seed string itself, and changing one word in it changes everything downstream. We draw twelve of the sixteen figures and stop there on purpose: no astrological houses, no separate Reconciler figure on screen, and no reading of the Judge as anything more than a pattern worth sitting with.

← Get my reading

Read next

Cast your own geomancy chart →
How an Ogham draw is calculated — the same seed-then-derive shape
What is the I Ching? — another binary derivation, six lines instead of four dots

Questions people actually ask

Does Bokki pick a geomancy figure from a table, based on your question?

No. chart() builds every figure through binary addition, starting from four Mothers cast from a seed — nothing is looked up by topic or by question.

How many possible figures are there, and why sixteen?

Sixteen. A figure is four rows, each either active or passive, and 2 to the 4th power is 16 — from Populus (all four passive) to Via (all four active).

What operation turns Mothers into Daughters, Nieces, Witnesses and the Judge?

Daughters come from transposing the Mothers' rows. Every step after that — Nieces, Witnesses, and the Judge — is the same row-wise addition: two actives make a passive, two passives make a passive, one of each makes an active, which is exactly the XOR operation.

Does asking the same question twice give a different chart?

No — the same seed always gives byte-identical results. Only changing the date or the typed focus word changes the Mothers, and everything after them.

Can Bokki's geomancy chart predict what will happen?

No. The Judge names a pattern to sit with, read warmly and without ranking — Bokki never presents it as a forecast or an event that will happen.