Genetics engine
OmniBurrow works out each rabbit's genotype from the records you already keep: its variety, its parents, its ancestors, and the kits it has produced. It then uses those genotypes to predict what a pairing is likely to throw and how closely related the pair is. It models 13 colour loci, and it is deliberately honest about uncertainty: where the evidence only supports a probability, you get a probability rather than a confident-looking guess.
Both apps show the same results. Genotypes are worked out on the server and synced to your phone; predicting a pairing and COI run on the phone itself, so they work at the cages with no signal, using the genotypes the phone already has.
The loci it models
The first five loci are the well-established major colour genes. The rest follow classical or breeder models that describe inheritance well but cannot predict every detail of how a coat looks. The list order is the conventional dominance order; where expression is more complicated than "dominant hides recessive", the last column says how.
| Locus | Alleles / conventional dominance order | Inheritance and expression |
|---|---|---|
| A: agouti | A › at › a | Complete dominance. A is agouti, at tan pattern, a self. Other loci can hide the pattern without changing the A genotype. |
| B: black/brown | B › b | Complete dominance; chocolate is recessive. B/B and B/b are black-based, b/b chocolate-based. |
| C: colour series | C › c^chd › c^chl › c^h › c | A dominance series, with incomplete dominance around sable: the second allele matters. On a black self, c^chl/c^chl is seal, while c^chl/c or c^chl/c^h is sable. Varieties such as Seal are matched on the exact pair. |
| D: dilution | D › d | Complete dominance; dilution is recessive. d/d turns black to blue and chocolate to lilac. |
| E: extension | E^s › E › e^j › e | The common four-allele model. Expression depends on the pair, so not every combination behaves as simple dominance. |
| En: English spotting | En, en | Incomplete dominance. en/en is solid, En/en broken, En/En Charlie (lightly marked). How much white a broken shows varies and is not predicted. |
| Du: Dutch | Du, du | Simplified classical model. du/du is Dutch-patterned; Du/du is treated as a carrier, though some show small white markings. Exact markings are not predicted. |
| Si: silvering | Si › si | Traditional recessive model. si/si is silvered; how much silvering shows varies with breed and age and is not predicted. |
| W: wideband | W › w | Classical recessive model. w/w is wideband. A red coat alone does not prove w/w; rufus intensity is a separate matter. |
| P: lutino | P › p | Recessive under the conventional breeder model. p/p is lutino (pink-eyed dilute), P/p a carrier. The final colour still depends on other loci. |
| V: Vienna | V, v | Blue-eyed white with variable carrier expression. OmniBurrow writes the Vienna allele as V: V/V is blue-eyed white, V/v a carrier that may or may not show Vienna marks, v/v non-Vienna. Other genes, such as REW, can hide it. |
| Dw: dwarf | Dw, dw | Incomplete dominance for size; two copies are lethal. OmniBurrow writes the dwarf allele as Dw: Dw/dw is a true dwarf, Dw/Dw the non-viable peanut, dw/dw normal size (false dwarf). |
| Mf: max factor | Mf, mf | A reported breeder model, not a molecularly confirmed gene. OmniBurrow writes the max-factor allele as Mf: two copies are affected, one copy is an unaffected carrier. Affected kits often have developmental problems; OmniBurrow warns about them rather than calling them lethal. |
Scientific papers often write the Vienna and dwarf mutations in lower case, with the normal allele in capitals, the reverse of the symbols above. The genetics are the same; only the letters differ. Your records keep the notation they were entered with.
Two rules follow from the table. Appearance is not genotype: an unmarked Vienna carrier is still
V/v, and a heavily marked broken is not automatically En/En, so OmniBurrow does not force those
genotypes from how a rabbit looks. And two dwarfs are the one pairing it flags as lethal: a
quarter of their kits are expected to be peanuts, and the prediction says so.
What it infers, and from what
The engine never assumes a genotype from breed alone. It builds each locus up from evidence:
- Your recorded variety tells it a lot. A REW is
c/c; a self black isa/a. Those are certainties, not guesses. - Parents constrain what a rabbit can carry, since each contributes one allele.
- Ancestors contribute recessive reveals, weighted by distance (below).
- Offspring work backwards: a kit showing a recessive proves both parents carried it. This is why genotypes sharpen as you record more litters.
- Manual overrides win outright. If you have test-bred an animal and know what it is, set it and the engine stops second-guessing you.
Distance is weighted, and it matters
A recessive appearing in a distant ancestor does not make a rabbit a carrier. The engine scores by generation, halving at each step:
| Where the recessive appeared | What the engine concludes |
|---|---|
| Parent is homozygous recessive | Certain carrier: a b/b parent must pass b |
| Grandparent | 50% chance of carrying |
| Great-grandparent | 25% chance of carrying |
It stops at three generations. That halving is the entire point: treating a great-grandparent's reveal as a guaranteed carrier produces predictions that look confident and are wrong. Here the probability rides alongside the locus instead of overwriting it, and feeds prediction as a probability.
A worked example
Here is the whole loop on one locus, with made-up rabbits:
- A buck is recorded as Castor (a chestnut agouti Rex). Castor needs at least one
A, so his A locus showsAwith the second allele unknown, so Castor could beA/A,A/at, orA/a. - A litter from him is recorded, and one kit is a self black. Self is
a/a, so that kit got anafrom each parent. - The buck's A locus resolves to
A/a, marked exact, with the litter listed as the evidence. Nobody had to test-breed him on purpose; the record did it. - Pair him with a self black doe (
a/a) and the A locus predicts 50% agouti, 50% self. That is the Punnett square you would draw by hand. If the pair match on their other loci, the variety list reads chestnut agouti 50%, self black 50%.
If the kit had been agouti instead, nothing would change: an agouti kit is consistent with every possibility, so the buck stays unresolved rather than being guessed at.
Predicting a pairing
Pick a doe and a buck, and you get two things.
Per-locus odds. For each locus the engine builds the gamete distribution each parent can
contribute and combines them. Where both parents are fully resolved this is exactly the Punnett
square you would draw by hand. A/a × a/a gives 50% agouti, 50% self, and the engine returns
precisely that.
Ranked variety predictions. It scores the varieties in your breed's catalog, ranks them, and returns the top 12 with likelihoods on a 0–100 scale. Anything below 2% is dropped so the list stays readable instead of trailing into near-impossible combinations.
Where a parent's locus is unresolved, a known allele contributes at 50%, a carrier hint contributes at its own weight, and a locus with no evidence contributes nothing. The consequence is deliberate: recessive predictions come out below 100% when the evidence is genuinely incomplete. A pairing that could throw REW shows honest odds rather than a certainty you cannot bank on.
Masked genotypes still count. If a rabbit's visible colour hides what it carries underneath, and a litter later reveals it, prediction reads the underlying genotype, not just the coat you can see.
Coefficient of inbreeding
COI is calculated by Wright's path method, including the standard correction for an inbred common ancestor:
FX = Σ (½)n₁+n₂+1 × (1 + FA)
It walks up to 10 generations, and reports both the depth it actually reached and how many ancestors were missing, so you can tell whether a low number means "genuinely unrelated" or "not enough pedigree yet".
The canonical pairings land where they should, and each is pinned by a test:
| Pairing | COI |
|---|---|
| Unrelated | 0% |
| Parent × offspring | 25% |
| Full siblings | 25% |
| Half siblings | 12.5% |
| First cousins | 6.25% |
A 0% COI on a rabbit with two recorded generations means "no shared ancestor in what OmniBurrow knows". It is not proof the pair is unrelated. Add or import more ancestry and the number becomes more meaningful. The reported depth and missing-ancestor count tell you how far to trust it.
What a prediction can and cannot tell you
A prediction tells you the odds for a pairing given what your records prove, and how much of that is certain versus inferred. It is a probability, not a promise about any one litter.
It cannot know:
- Anything you have not recorded. No variety, no parents, no litters means no evidence. The engine says it does not know rather than inventing a genotype.
- Traits outside those 13 loci. Body type, fur density, ear carriage, temperament: none of it is modelled. Genetics here means colour genetics plus dwarfing and max factor.
- How strongly a pattern shows. The amount of white on a broken or Dutch, or of silvering, varies and is not predicted. Only the genotype behind it is.
- Whether your recorded variety is correct. Enter a rabbit as the wrong variety and every inference downstream inherits the error.
When the numbers are recomputed
Inferred genotypes are stored so screens load quickly, and recomputed when their inputs change, such as when you edit a rabbit, record a litter that reveals something, or refresh herd genetics from Tools. Correct an old record and the affected genotypes update on their own. The recalculation happens on the server, so a litter recorded with no signal updates its parents once it has synced.