Team strength blends FIFA ranking, a rank-seeded Elo-style prior built from embedded results, tournament pedigree, current form and an attack and defense profile. Goals follow a Poisson scoreline distribution with a bounded low-score correction. Venue, weather and host terms adjust expected goals. Coefficients are listed on the How tab.
Runs
Each run replays every unplayed match from a seed (the scenario name plus the run number), so the same scenario, run count and settings repeat exactly. Knockout ties go to extra time, then a seeded penalty model.
Group order
Article 13 of the FIFA regulations: points, then head-to-head points, goal difference and goals among the tied teams, then overall goal difference, goals scored, fair-play score and FIFA ranking. Eight best third-placed teams reach the Round of 32 and are placed using the FIFA Annex C table when available, otherwise a legal allocator checked across all 495 combinations.
Data
The embedded snapshot is dated 20 July 2026 and records all 104 matches. Played results are fixed in every run, so the odds then read 0 or 100 percent. Sources and confidence levels are on the Sources tab.
Checks
On 30 October 2026 the tiebreaker order, the third-place ranking and the Round of 32 slots were compared with the Regulations for the FIFA World Cup 26 (May 2026 edition, FWC2026_regulations_EN.pdf on digitalhub.fifa.com), Article 12.6, Article 13 and Annexe C. Verified: the order of criteria in Article 13 matches the code (head-to-head points, goal difference and goals among the tied teams, repeated among the teams still level, then overall goal difference, goals scored, conduct score and FIFA ranking; for the eight best third-placed teams: points, goal difference, goals scored, conduct score, FIFA ranking). The eight third-place slot lists in Article 12.6 and their match numbers match the data. Differences, left unchanged because the model is frozen: (1) the conduct score is a stored number per team, marked a placeholder in the data, not a count from cards (Article 13, step 2 f and third-place criterion d); (2) the code keeps one FIFA ranking per team and has no fallback to earlier editions (Article 13, steps 3 g and h), and then orders by team name, which the regulations do not provide; (3) the Annexe C table of 495 rows is not embedded: with no cached table the allocator picks a legal slot assignment that equals the Annexe C row in 17 of the 495 combinations, and when the official rows are supplied all 495 resolve exactly; the all-matches-played data shipped here is not affected. Not checked: the pairings in Articles 12.7 to 12.11, extra time and penalties (Article 14), the Live data table parser, and the source of the ratings. Also tested: editing a team rating changes the odds when matches are unplayed, and the scenario name seeds the runs.
Limits
Probabilities, not guarantees. Unofficial, not affiliated with FIFA, not a betting tool. The Checks row above lists what was and was not compared with the regulations.
Groups
12 groups: standings and scores.
Key
Top 2 per group plus the 8 best third places advance. R32 = share of runs reaching the Round of 32.
Best third-placed teams
Knockout bracket
Round of 32 to the final. After Run, each match shows its likeliest winner.
Bracket rules
Slots follow the public bracket. Third places use FIFA Annex C, else a checked allocator.
Chances table
Each team's chance to reach each round.
Darker = higher share.
Tournament snapshot
Facts, schedule, goals, fair play.
More
How to update this
This app is one file. You can change what it says, its numbers and its colours with any plain text editor (Notepad, TextEdit, VS Code). Do not use Word. Work on a copy.
Worked example: rename a team
Open a copy of this file in a text editor. Press Ctrl+F and search for "name":"Haiti". There is one match, in the list of teams.
Change the name, for example to "name":"Haiti Test". Keep the quote marks and the comma. Save the file.
Open the saved file in your browser. If you ever edited data inside the app, press Reset to the data shipped in this file (More, then Your data) so the app reads the file again.
Check: open Groups, the Chances table and a match list. The new name shows in all of them, and Health under the title says OK.
That one edit is enough. Matches, the bracket and the chances look a team up by its id (the "id":"haiti" beside the name), so a name is stored once. Never change an id.
Five names must stay as they are, because the rules look them up by name: Mexico, Canada and United States (the host boost, matched to the venue country) and Algeria and Paraguay (fair-play scores). The other 43 can be renamed freely.
Other things you can change
Numbers, ratings, results, dates, sources: all live in the content block. Search for id="fifa-content". The block starts at that line and ends at the next </script>. Also change dataVersion and date there so the footer shows the new data.
Words on screen (headings, buttons, intro text): ordinary text in the page part of the file, above the program. Search for the words you see, for example Most likely champions, and change only the words, never the < and > tags around them. Messages the app writes while it works come from the program and cannot be edited by hand.
Accent colour: one pair at the top of the style section: --accent-light (Paper) and --accent-dark (Charcoal and True Black). Pick a dark colour for the first and a light one for the second, so the text on accent buttons stays readable.
Keyboard focus outline: a separate token, --focus, one line in each look (search --focus:). It is not tied to the accent.
Other colours, text sizes, spacing: the lines that start html[data-theme and :root at the top of the style section.
Do not touch
Any script without type="application/json" (that is the program; if you change it the browser refuses to run it), the id values, the schema number and the Content-Security-Policy line at the top.
Updating the whole app
Replace the file with the new version. Your saved data stays in this browser. Older exports still import. A file saved by a newer version is refused with a message.
Glossary: words used in this app
Monte Carlo (MC)
Playing the tournament many times with seeded random scores and counting how often each result happens. A run is one such tournament.
Seed, scenario name
A name that fixes the random numbers, so the same name and settings give the same answer every time.
Poisson
A standard way to turn the goals a team is expected to score into the chance of each exact score, such as 1-0 or 2-2.
Elo
A rating that rises after wins and falls after losses. Here it starts from the FIFA ranking and the embedded results.
Annex C
The table in the FIFA regulations that says which third-placed teams meet which group winners in the Round of 32.
R32
The Round of 32, the first knockout round.
Tiebreaker
The rule that orders teams level on points in a group, such as head-to-head results and goal difference.
Brier score
How far forecast chances were from what happened. Lower is better; 0 is perfect.
Log loss
Another forecast score that punishes confident wrong calls heavily. Lower is better.
Rollback
Undoing a change and going back to the earlier setting. Here, a forecast adjustment was tried, scored worse, and was switched off.
JSON, schema, model data
JSON is a plain-text file format any text editor opens. The schema number is the version of the data layout. Model data is the teams, matches and ratings the predictions use.
Extra pages.
Assumptions and match detail.
Export, import, edit, reset.
Where the data comes from.
Self-tests.
Data quality.
Storage, export, delete.
How predictions work
Assumptions and inputs behind each number.
Source-backed availability and incentive inputs
Final group-table incentive is derived from embedded standings. Confirmed lineup, goalkeeper, suspension, and key-absence modifiers apply only when verified source metadata is embedded; otherwise they remain neutral. Current default goal penalties: key absence 0.055, suspension 0.045, goalkeeper downgrade 0.035, rotation 0.030.
Explain one match
Advanced data tools
Edit the model data as JSON (plain text), import a JSON file, or export the current data. Export JSON saves a file with the app name, version and date around the data. Reset to the data shipped in this file removes your saved copy and caches from this browser and restores the data that ships in this file. Validation repairs malformed sections and reports schema health in Diagnostics.
Diagnostics
Technical checks
Self-tests.
Data health
Source quality, validation gates, rollback path, and unresolved risks for future data updates.
Sources
Update protocol
Future data updates should edit the content block fifa-content (see More, How to update this) with current results, rankings, squads, injuries, suspensions, venues, weather, exact bracket mappings, and tactical/news modifiers. The simulator validates, repairs, tests, and reports schema health on load.
This is a probabilistic model, not an official FIFA product or betting tool.