Parent A
Parent B
Breeding tip
The spread is |A - B| + 0.3 x range, so breeding two very different horses widens the outcome and makes a top foal possible. Two already-great horses give a high, narrow result. Keep the best foals and breed them back.
Foal outlook
Likely a B-tier foal, 73 / 100 on average
About a 0.2% chance a single foal beats the better parent in all three stats. Breed repeatedly and keep the best.
Parents: 24.0 HP and 28.0 HP. Best parent is 28.0 HP.
Parents: 3.47 blk and 4.43 blk. Best parent is 4.43 blk.
Parents: 10.96 b/s and 12.23 b/s. Best parent is 12.23 b/s.
How this is computed
Each bar runs 60,000 rolls of the exact offspring formula from AbstractHorse.createOffspringAttribute: the foal value is the parents' midpoint plus a spread of (|A - B| + 0.3 x range) times a roll of (three random values averaged, minus 0.5), reflected back if it lands outside the legal range. Best and worst are the highest and lowest foals seen across the run; the histogram shows where most foals land. The three stats roll independently.
Breed two horses with a golden carrot or golden apple and the foal gets each of its three stats rolled separately. For each stat the game starts at the parents' midpoint, then shifts it by a spread of (difference between the parents plus 0.3 of the stat's full range) times a random factor from -0.5 to +0.5. Most foals land near the middle, a lucky few beat both parents, and some come out worse.
A horse has three hidden stats: health, jump strength and movement speed. A freshly tamed wild horse rolls each one randomly inside the ranges below, so most wild horses are average. Breeding is how you push a line toward the maximum, because the foal inherits from its parents instead of rolling from scratch.
| Stat | Attribute | Range | In game | Wild roll |
|---|---|---|---|---|
| Health | max_health | 15 to 30 | 7.5 to 15 hearts | 15 + nextInt(8) + nextInt(9) |
| Jump strength | jump_strength | 0.4 to 1.0 | about 1.2 to 5.3 blocks high | 0.4 + 3 x (nextDouble x 0.2) |
| Speed | movement_speed | 0.1125 to 0.3375 | about 4.74 to 14.23 blocks/sec | (0.45 + 3 x (nextDouble x 0.3)) x 0.25 |
The Breeding Predictor above runs the real offspring formula tens of thousands of times for your chosen parents and shows the likely, best and worst foal for each stat, plus the chance of beating the better parent. The Stat Decoder grades a single horse so you know whether it is worth keeping as breeding stock.
For each stat the game runs this calculation, taken straight from the horse's code. Let A and B be the two parents' values for the stat, clamped into the legal range, and let min and max be the ends of that range:
The roll is three random numbers averaged and shifted, so it clusters around 0 and rarely reaches its -0.5 or +0.5 extremes. That is why a foal almost always lands near the midpoint of its parents, and why the dramatic best-case foal is uncommon. The spread grows with how different the parents are, so two very different horses produce a wider range of foals (more chance of a great one, more chance of a poor one) while two similar horses produce a narrow, predictable result.
All three stats use this same formula independently, with their own ranges. There is no shared luck between them, so a foal can roll a great jump and a poor speed in the same birth.
Because the foal centers on the parents' midpoint, the fastest way to a top horse is to keep raising the midpoint. Tame and test a batch of wild horses, keep the best few for each stat, and breed your two best together. Raise several foals, keep any that beat the parents, and breed those back in. Each generation the midpoint creeps up and the ceiling gets easier to reach.
The 0.3 of range baked into every spread guarantees there is always some chance to exceed both parents, even when they are identical, so a line never fully stalls. It just slows down as you approach the maximum, which is why the last few points of speed or jump take the most foals to find.
Donkeys and mules follow the same system, and a horse bred with a donkey produces a mule that inherits stats the same way. Skeleton and zombie horses cannot be bred.
Each of a foal's three stats (health, jump strength and speed) is rolled separately. The game takes the two parents' values, finds their midpoint, then adds a spread of the difference between the parents plus 0.3 of the full stat range, multiplied by a random factor. That random factor is three random numbers averaged and shifted to range from -0.5 to +0.5, so most foals land near the parents' midpoint and extreme foals are rare. If the result falls outside the legal range it is reflected back inside.
Health ranges from 15 to 30 (7.5 to 15 hearts). Jump strength ranges from 0.4 to 1.0, which is roughly 1.2 to 5.3 blocks of jump height. Movement speed ranges from 0.1125 to 0.3375 internally, which is about 4.74 to 14.23 blocks per second. A perfect horse has all three at maximum, but that is extremely rare from a single wild horse.
Not a real one. People say there is a hidden third parent because the formula adds a fresh random roll on top of the two parents' midpoint. That random component is what lets a foal exceed both parents, but it is just randomness, not a third horse. Feeding a golden carrot or golden apple to two horses is all that is involved.
Tame a lot of horses, check their speed, and keep the fastest few. Breed your two fastest horses together: the foal's likely speed is their midpoint, with a chance to exceed both. Keep any foal that beats its parents and breed it back into the line. Because the spread grows with the difference between parents, pairing a very fast horse with a slow one occasionally produces a top foal, but pairing two fast horses gives a reliably high result.
Yes. The random factor ranges from -0.5 to +0.5, so a foal can land below both parents' midpoint, sometimes below the weaker parent. That is why breeders raise several foals per generation and only keep the ones that improve on the parents. The calculator's worst-case column shows how low a single stat can realistically go for your pairing.
Health shows as hearts, but jump strength and speed are hidden. Run /data get entity @e[type=horse,limit=1,sort=nearest] attributes to read the jump_strength and movement_speed base values, then enter them in the Stat Decoder tab. Without commands you can only estimate by testing how high the horse jumps and how fast it runs.
Spawn a horse with exact stats to test a build, or browse more Minecraft tools: