World Cup 2026 Simulator
48 teams, 104 matches. Odds, groups, bracket.
Your pocket wizard of goals.
Saved: look.
Start: press Run, then open the tabs.
All 104 matches are played. Results are fixed.
Terms: More, Glossary.
12 groups: standings and scores.
Top 2 per group plus the 8 best third places advance. R32 = share of runs reaching the Round of 32.
Round of 32 to the final. After Run, each match shows its likeliest winner.
Slots follow the public bracket. Third places use FIFA Annex C, else a checked allocator.
Each team's chance to reach each round.
Darker = higher share.
Facts, schedule, goals, fair play.
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.
"name":"Haiti". There is one match, in the list of teams."name":"Haiti Test". Keep the quote marks and the comma. Save the file.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.
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.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-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.--focus, one line in each look (search --focus:). It is not tied to the accent.html[data-theme and :root at the top of the style section.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.
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.
Extra pages.
Assumptions and inputs behind each number.
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.
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.
Self-tests.
Source quality, validation gates, rollback path, and unresolved risks for future data updates.
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.