Every example, rendered as the SVG diagram and the HTML table in both layouts (flat and stacked), with its source JSON above each so you can check the render against the document (e.g. the Copa Libertadores entry shows i18n and timezone: English round names and GMT kickoff times in the JSON, Spanish and local time in the render). Light/dark follows your browser's color-scheme setting — flip it to see both themes.
Generated by examples/gallery.py — regenerate from inside
examples/ with PYTHONPATH=../src python gallery.py.
2022 FIFA World Cup — the finished Qatar knockout from the Round of 16 to the final plus third place, with national flags (world_cup_2022_host, by name) and the default symmetric layout. The strongest single example of what the library draws.
{
"tournament": "World Cup",
"season": "Qatar 2022",
"render": { "crest_shape": "flag", "dt_format": "EEEE dd MMMM" },
"rounds": [
{
"name": "Round of 16",
"matches": [
{
"id": "r16-1",
"legs": [
{ "team1": "Netherlands", "goals1": 3, "team2": "USA", "goals2": 1, "dt": "2022-12-03 12:00", "venue": "Khalifa International Stadium" }
],
"winner": 1
},
{
"id": "r16-2",
"legs": [
{ "team1": "Argentina", "goals1": 2, "team2": "Australia", "goals2": 1, "dt": "2022-12-03 12:00", "venue": "Ahmad bin Ali Stadium" }
],
"winner": 1
},
{
"id": "r16-3",
"legs": [
{ "team1": "Japan", "goals1": 1, "team2": "Croatia", "goals2": 1, "pen1": 1, "pen2": 3, "dt": "2022-12-05 12:00", "venue": "Al Janoub Stadium" }
],
"winner": 2
},
{
"id": "r16-4",
"legs": [
{ "team1": "Brazil", "goals1": 4, "team2": "South Korea", "goals2": 1, "dt": "2022-12-05 12:00", "venue": "Stadium 974" }
],
"winner": 1
},
{
"id": "r16-5",
"legs": [
{ "team1": "Morocco", "goals1": 0, "team2": "Spain", "goals2": 0, "pen1": 3, "pen2": 0, "dt": "2022-12-06 12:00", "venue": "Education City Stadium" }
],
"winner": 1
},
{
"id": "r16-6",
"legs": [
{ "team1": "Portugal", "goals1": 6, "team2": "Switzerland", "goals2": 1, "dt": "2022-12-06 12:00", "venue": "Lusail Stadium" }
],
"winner": 1
},
{
"id": "r16-7",
"legs": [
{ "team1": "England", "goals1": 3, "team2": "Senegal", "goals2": 0, "dt": "2022-12-04 12:00", "venue": "Al Bayt Stadium" }
],
"winner": 1
},
{
"id": "r16-8",
"legs": [
{ "team1": "France", "goals1": 3, "team2": "Poland", "goals2": 1, "dt": "2022-12-04 12:00", "venue": "Al Thumama Stadium" }
],
"winner": 1
}
]
},
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"winnerof1": "r16-1",
"winnerof2": "r16-2",
"legs": [
{ "team1": "Netherlands", "goals1": 2, "team2": "Argentina", "goals2": 2, "pen1": 3, "pen2": 4, "dt": "2022-12-09 12:00", "venue": "Lusail Stadium" }
],
"winner": 2
},
{
"id": "qf2",
"winnerof1": "r16-3",
"winnerof2": "r16-4",
"legs": [
{ "team1": "Croatia", "goals1": 1, "team2": "Brazil", "goals2": 1, "pen1": 4, "pen2": 2, "dt": "2022-12-09 12:00", "venue": "Education City Stadium" }
],
"winner": 1
},
{
"id": "qf3",
"winnerof1": "r16-5",
"winnerof2": "r16-6",
"legs": [
{ "team1": "Morocco", "goals1": 1, "team2": "Portugal", "goals2": 0, "dt": "2022-12-10 12:00", "venue": "Al Thumama Stadium" }
],
"winner": 1
},
{
"id": "qf4",
"winnerof1": "r16-7",
"winnerof2": "r16-8",
"legs": [
{ "team1": "England", "goals1": 1, "team2": "France", "goals2": 2, "dt": "2022-12-10 12:00", "venue": "Al Bayt Stadium" }
],
"winner": 2
}
]
},
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"winnerof1": "qf1",
"winnerof2": "qf2",
"legs": [
{ "team1": "Argentina", "goals1": 3, "team2": "Croatia", "goals2": 0, "dt": "2022-12-13 12:00", "venue": "Lusail Stadium" }
],
"winner": 1
},
{
"id": "sf2",
"winnerof1": "qf3",
"winnerof2": "qf4",
"legs": [
{ "team1": "Morocco", "goals1": 0, "team2": "France", "goals2": 2, "dt": "2022-12-14 12:00", "venue": "Al Bayt Stadium" }
],
"winner": 2
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"legs": [
{ "team1": "Argentina", "goals1": 3, "team2": "France", "goals2": 3, "pen1": 4, "pen2": 2, "dt": "2022-12-18 12:00", "venue": "Lusail Stadium" }
],
"winner": 1
}
]
},
{
"name": "Third place",
"matches": [
{
"loserof1": "sf1",
"loserof2": "sf2",
"legs": [
{ "team1": "Croatia", "goals1": 2, "team2": "Morocco", "goals2": 1, "dt": "2022-12-17 12:00", "venue": "Khalifa International Stadium" }
],
"winner": 1
}
]
}
]
}
World Cup round of 8 — an in-progress bracket: only the quarterfinals are played, so the semifinals and final fall back to 'Winner SF1/SF2' placeholders (the winnerof links drawn as connectors). Single matches, shootouts in parentheses. Base loader.
{
"tournament": "World Cup",
"season": "2026",
"render": { "crest_shape": "flag", "dt_format": "EEEE dd MMMM, HH:mm" },
"rounds": [
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"legs": [
{
"team1": "France",
"goals1": 3,
"team2": "Portugal",
"goals2": 0,
"dt": "2026-07-09 19:00",
"venue": "Gillette Stadium"
}
],
"winner": 1
},
{
"id": "qf2",
"legs": [
{
"team1": "Germany",
"goals1": 1,
"team2": "Spain",
"goals2": 2,
"dt": "2026-07-10 23:00",
"venue": "SoFi Stadium"
}
],
"winner": 2
},
{
"id": "qf3",
"legs": [
{
"team1": "Argentina",
"goals1": 0,
"team2": "Netherlands",
"goals2": 0,
"pen1": 5,
"pen2": 4,
"dt": "2026-07-11 19:00",
"venue": "Arrowhead Stadium"
}
],
"winner": 1
},
{
"id": "qf4",
"team1": "Brazil",
"team2": "England",
"dt": "2026-07-11 23:00",
"venue": "Hard Rock Stadium"
}
]
},
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"winnerof1": "qf1",
"winnerof2": "qf2",
"team1": "France",
"team2": "Spain",
"dt": "2026-07-14 23:00",
"venue": "AT&T Stadium"
},
{
"id": "sf2",
"winnerof1": "qf3",
"winnerof2": "qf4",
"team1": "Argentina",
"dt": "2026-07-15 23:00",
"venue": "Mercedes-Benz Stadium"
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"dt": "2026-07-19 19:00",
"venue": "MetLife Stadium"
}
]
}
]
}
Copa Río de la Plata — host-resolved club crests by id (copa_rio_host), rendered in Spanish: compare its dates (jueves, septiembre) to the World Cup's English ones (Thursday, July) — both use the same EEEE dd MMMM dt_format, localized by Babel.
{
"tournament": "Copa Río de la Plata",
"season": "2026",
"render": { "box_width": 210, "dt_format": "EEEE dd MMMM, HH:mm" },
"rounds": [
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"legs": [
{
"team1": "Estudiantes",
"id1": 17,
"goals1": 2,
"team2": "Athletic Club",
"id2": 90,
"goals2": 1,
"dt": "2026-09-16 22:00",
"venue": "Estadio UNO"
}
],
"winner": 1
},
{
"id": "sf2",
"legs": [
{
"team1": "Platense",
"id1": 42,
"goals1": 1,
"team2": "Internacional",
"id2": 88,
"goals2": 0,
"dt": "2026-09-17 22:00",
"venue": "Estadio Ciudad de Vicente López"
}
],
"winner": 1
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"legs": [
{
"team1": "Estudiantes",
"id1": 17,
"goals1": 1,
"pen1": 4,
"team2": "Platense",
"id2": 42,
"goals2": 1,
"pen2": 3,
"dt": "2026-10-01 22:00",
"venue": "Estadio Más Monumental"
}
],
"winner": 1
}
]
}
]
}
Copa Libertadores — refs resolved by libertadores_host, and the caller renders it with i18n (round names → Spanish via translate) and a timezone (GMT dt → America/Montevideo, −3h). Compare the source JSON to the render: the document keeps English round names and GMT kickoff times.
{
"tournament": "Copa Libertadores",
"season": "2026",
"render": { "box_width": 240 },
"rounds": [
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"legs": [{ "ref": 84021 }, { "ref": 84022 }],
"winner": 1
},
{
"id": "qf2",
"legs": [
{
"team1": "River Plate",
"goals1": 1,
"team2": "Palmeiras",
"goals2": 1,
"dt": "2026-08-12 23:30",
"venue": "Estadio Monumental"
},
{
"team1": "Palmeiras",
"goals1": 0,
"pen1": 2,
"team2": "River Plate",
"goals2": 0,
"pen2": 4,
"dt": "2026-08-19 23:30",
"venue": "Allianz Parque"
}
],
"winner": 1
},
{
"id": "qf3",
"legs": [
{
"team1": "Montevideo City Torque",
"goals1": 1,
"team2": "Atletico Mineiro",
"goals2": 0,
"dt": "2026-08-13 23:00",
"venue": "Parque Viera"
},
{
"team1": "Atletico Mineiro",
"goals1": 1,
"team2": "Montevideo City Torque",
"goals2": 1,
"dt": "2026-08-20 23:00",
"venue": "Arena MRV"
}
],
"winner": 1
},
{
"id": "qf4",
"legs": [
{
"team1": "Corinthians",
"goals1": 3,
"team2": "Internacional",
"goals2": 0,
"dt": "2026-08-12 21:00",
"venue": "Neo Química Arena"
},
{
"team1": "Internacional",
"goals1": 1,
"team2": "Corinthians",
"goals2": 1,
"dt": "2026-08-19 21:00",
"venue": "Beira-Rio"
}
],
"winner": 1
}
]
},
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"winnerof1": "qf1",
"winnerof2": "qf2",
"legs": [
{
"team1": "Flamengo",
"goals1": 0,
"team2": "River Plate",
"goals2": 0,
"dt": "2026-09-23 23:30",
"venue": "Maracanã"
},
{
"team1": "River Plate",
"goals1": 1,
"team2": "Flamengo",
"goals2": 2,
"dt": "2026-09-30 23:30",
"venue": "Estadio Monumental"
}
],
"winner": 1
},
{
"id": "sf2",
"winnerof1": "qf3",
"winnerof2": "qf4",
"legs": [
{
"team1": "Montevideo City Torque",
"goals1": 1,
"team2": "Corinthians",
"goals2": 1,
"dt": "2026-09-24 23:30",
"venue": "Parque Viera"
},
{
"team1": "Corinthians",
"goals1": 0,
"team2": "Montevideo City Torque",
"goals2": 2,
"dt": "2026-10-01 23:30",
"venue": "Neo Química Arena"
}
],
"winner": 1
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"legs": [
{
"team1": "Flamengo",
"goals1": 2,
"team2": "Montevideo City Torque",
"goals2": 1,
"dt": "2026-11-21 20:00",
"venue": "Estadio Centenario"
}
],
"winner": 1
}
]
}
]
}
FA Cup — a pending draw (absent winnerof: TBD, no connector). Rendered through facup_host in Spanish to show placeholder i18n: the undrawn semifinals become 'A definir' (tbd) and the final's links 'Ganador SF1/SF2' (winner).
{
"tournament": "FA Cup",
"season": "2025-26",
"rounds": [
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"legs": [
{ "team1": "Manchester City", "goals1": 2, "team2": "Newcastle", "goals2": 1 }
],
"winner": 1
},
{
"id": "qf2",
"legs": [
{
"team1": "Chelsea",
"goals1": 1,
"team2": "Arsenal",
"goals2": 1,
"pen1": 3,
"pen2": 4
}
],
"winner": 2
},
{
"id": "qf3",
"legs": [
{ "team1": "Liverpool", "goals1": 3, "team2": "Aston Villa", "goals2": 0 }
],
"winner": 1
},
{
"id": "qf4",
"team1": "Manchester United",
"team2": "Tottenham"
}
]
},
{
"name": "Semifinals",
"matches": [{ "id": "sf1" }, { "id": "sf2" }]
},
{
"name": "Final",
"matches": [{ "winnerof1": "sf1", "winnerof2": "sf2" }]
}
]
}
FA Cup — the same stage once drawn (plain pairings). Base loader.
{
"tournament": "FA Cup",
"season": "2025-26",
"rounds": [
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"legs": [
{ "team1": "Manchester City", "goals1": 2, "team2": "Newcastle", "goals2": 1 }
],
"winner": 1
},
{
"id": "qf2",
"legs": [
{
"team1": "Chelsea",
"goals1": 1,
"team2": "Arsenal",
"goals2": 1,
"pen1": 3,
"pen2": 4
}
],
"winner": 2
},
{
"id": "qf3",
"legs": [
{ "team1": "Liverpool", "goals1": 3, "team2": "Aston Villa", "goals2": 0 }
],
"winner": 1
},
{
"id": "qf4",
"legs": [
{ "team1": "Manchester United", "goals1": 2, "team2": "Tottenham", "goals2": 1 }
],
"winner": 1
}
]
},
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"team1": "Arsenal",
"team2": "Manchester United"
},
{
"id": "sf2",
"team1": "Manchester City",
"team2": "Liverpool"
}
]
},
{
"name": "Final",
"matches": [{ "winnerof1": "sf1", "winnerof2": "sf2" }]
}
]
}
League Cup — the FIFA-style mirrored bracket (render.layout: 'symmetric'): the two halves of the draw expand outward to left and right (connectors running inward), the semifinals meet in the centre, and the final is lifted above them with the third place dropped below. SVG-only; the HTML table is a vertical list and ignores it. Base loader.
{
"tournament": "League Cup",
"season": "2026",
"render": { "layout": "symmetric" },
"rounds": [
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"legs": [
{
"team1": "Manchester City",
"goals1": 2,
"team2": "Newcastle",
"goals2": 1,
"dt": "2026-02-24 19:45",
"venue": "Etihad Stadium"
}
],
"winner": 1
},
{
"id": "qf2",
"legs": [
{
"team1": "Arsenal",
"goals1": 0,
"team2": "Aston Villa",
"goals2": 2,
"dt": "2026-02-24 19:45",
"venue": "Emirates Stadium"
}
],
"winner": 2
},
{
"id": "qf3",
"legs": [
{
"team1": "Liverpool",
"goals1": 3,
"team2": "Tottenham",
"goals2": 1,
"dt": "2026-02-25 19:45",
"venue": "Anfield"
}
],
"winner": 1
},
{
"id": "qf4",
"legs": [
{
"team1": "Chelsea",
"goals1": 1,
"team2": "Manchester United",
"goals2": 1,
"pen1": 4,
"pen2": 2,
"dt": "2026-02-25 19:45",
"venue": "Stamford Bridge"
}
],
"winner": 1
}
]
},
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"winnerof1": "qf1",
"winnerof2": "qf2",
"team1": "Manchester City",
"team2": "Aston Villa",
"legs": [
{
"goals1": 2,
"goals2": 0,
"dt": "2026-03-04 20:00",
"venue": "Etihad Stadium"
}
],
"winner": 1
},
{
"id": "sf2",
"winnerof1": "qf3",
"winnerof2": "qf4",
"team1": "Liverpool",
"team2": "Chelsea",
"legs": [
{
"goals1": 1,
"goals2": 2,
"dt": "2026-03-05 20:00",
"venue": "Anfield"
}
],
"winner": 2
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"team1": "Manchester City",
"team2": "Chelsea",
"legs": [
{
"goals1": 1,
"goals2": 0,
"dt": "2026-03-15 16:30",
"venue": "Wembley Stadium"
}
],
"winner": 1
}
]
},
{
"name": "Third place",
"matches": [
{
"loserof1": "sf1",
"loserof2": "sf2",
"team1": "Aston Villa",
"team2": "Liverpool",
"legs": [
{
"goals1": 2,
"goals2": 1,
"dt": "2026-03-14 15:00",
"venue": "Wembley Stadium"
}
],
"winner": 1
}
]
}
]
}
2026 FIFA World Cup — the full 32-team knockout drawn symmetric, while the group stage is still on: the bracket is all seed placeholders (1E, 3ABCDF, ...) and the later rounds read 'Winner Pxx'. Real match ids, dates and venues. Base loader.
{
"tournament": "FIFA World Cup",
"season": "2026",
"render": { "layout": "symmetric", "dt_format": "dd MMM" },
"rounds": [
{
"name": "Round of 32",
"matches": [
{ "id": "p74", "team1": "1E", "team2": "3ABCDF", "dt": "2026-06-29 12:00", "venue": "Foxborough" },
{ "id": "p77", "team1": "1I", "team2": "3CDFGH", "dt": "2026-06-30 12:00", "venue": "East Rutherford" },
{ "id": "p73", "team1": "2A", "team2": "2B", "dt": "2026-06-28 12:00", "venue": "Inglewood" },
{ "id": "p75", "team1": "1F", "team2": "2C", "dt": "2026-06-29 12:00", "venue": "Monterrey" },
{ "id": "p83", "team1": "2K", "team2": "2L", "dt": "2026-07-02 12:00", "venue": "Toronto" },
{ "id": "p84", "team1": "1H", "team2": "2J", "dt": "2026-07-02 12:00", "venue": "Inglewood" },
{ "id": "p81", "team1": "1D", "team2": "3BEFIJ", "dt": "2026-07-01 12:00", "venue": "Santa Clara" },
{ "id": "p82", "team1": "1G", "team2": "3AEHIJ", "dt": "2026-07-01 12:00", "venue": "Seattle" },
{ "id": "p76", "team1": "1C", "team2": "2F", "dt": "2026-06-29 12:00", "venue": "Houston" },
{ "id": "p78", "team1": "2E", "team2": "2I", "dt": "2026-06-30 12:00", "venue": "Arlington" },
{ "id": "p79", "team1": "1A", "team2": "3CEFHI", "dt": "2026-06-30 12:00", "venue": "Mexico City" },
{ "id": "p80", "team1": "1L", "team2": "3EHIJK", "dt": "2026-07-01 12:00", "venue": "Atlanta" },
{ "id": "p86", "team1": "1J", "team2": "2H", "dt": "2026-07-03 12:00", "venue": "Miami Gardens" },
{ "id": "p88", "team1": "2D", "team2": "2G", "dt": "2026-07-03 12:00", "venue": "Arlington" },
{ "id": "p85", "team1": "1B", "team2": "3EFGIJ", "dt": "2026-07-02 12:00", "venue": "Vancouver" },
{ "id": "p87", "team1": "1K", "team2": "3DEIJL", "dt": "2026-07-03 12:00", "venue": "Kansas City" }
]
},
{
"name": "Round of 16",
"matches": [
{ "id": "p89", "winnerof1": "p74", "winnerof2": "p77", "dt": "2026-07-04 12:00", "venue": "Philadelphia" },
{ "id": "p90", "winnerof1": "p73", "winnerof2": "p75", "dt": "2026-07-04 12:00", "venue": "Houston" },
{ "id": "p93", "winnerof1": "p83", "winnerof2": "p84", "dt": "2026-07-06 12:00", "venue": "Arlington" },
{ "id": "p94", "winnerof1": "p81", "winnerof2": "p82", "dt": "2026-07-06 12:00", "venue": "Seattle" },
{ "id": "p91", "winnerof1": "p76", "winnerof2": "p78", "dt": "2026-07-05 12:00", "venue": "East Rutherford" },
{ "id": "p92", "winnerof1": "p79", "winnerof2": "p80", "dt": "2026-07-05 12:00", "venue": "Mexico City" },
{ "id": "p95", "winnerof1": "p86", "winnerof2": "p88", "dt": "2026-07-07 12:00", "venue": "Atlanta" },
{ "id": "p96", "winnerof1": "p85", "winnerof2": "p87", "dt": "2026-07-07 12:00", "venue": "Vancouver" }
]
},
{
"name": "Quarterfinals",
"matches": [
{ "id": "p97", "winnerof1": "p89", "winnerof2": "p90", "dt": "2026-07-09 12:00", "venue": "Foxborough" },
{ "id": "p98", "winnerof1": "p93", "winnerof2": "p94", "dt": "2026-07-10 12:00", "venue": "Inglewood" },
{ "id": "p99", "winnerof1": "p91", "winnerof2": "p92", "dt": "2026-07-11 12:00", "venue": "Miami Gardens" },
{ "id": "p100", "winnerof1": "p95", "winnerof2": "p96", "dt": "2026-07-11 12:00", "venue": "Kansas City" }
]
},
{
"name": "Semifinals",
"matches": [
{ "id": "p101", "winnerof1": "p97", "winnerof2": "p98", "dt": "2026-07-14 12:00", "venue": "Arlington" },
{ "id": "p102", "winnerof1": "p99", "winnerof2": "p100", "dt": "2026-07-15 12:00", "venue": "Atlanta" }
]
},
{
"name": "Final",
"matches": [
{ "winnerof1": "p101", "winnerof2": "p102", "dt": "2026-07-19 12:00", "venue": "East Rutherford" }
]
},
{
"name": "Third place",
"matches": [
{ "loserof1": "p101", "loserof2": "p102", "dt": "2026-07-18 12:00", "venue": "Miami Gardens" }
]
}
]
}
Third place — a round fed by loserof ('Loser SF1/SF2'): off the winners' tree, so it draws no connector. In this small bracket (linear layout) it sits beside the final, level with it; a larger bracket hangs it below. Base loader.
{
"tournament": "World Cup",
"season": "2026",
"render": { "dt_format": "EEEE dd MMMM, HH:mm", "layout": "linear" },
"rounds": [
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"team1": "France",
"team2": "Spain",
"dt": "2026-07-14 23:00",
"venue": "AT&T Stadium"
},
{
"id": "sf2",
"team1": "Argentina",
"team2": "Brazil",
"dt": "2026-07-15 23:00",
"venue": "Mercedes-Benz Stadium"
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"dt": "2026-07-19 19:00",
"venue": "MetLife Stadium"
}
]
},
{
"name": "Third place",
"matches": [
{
"loserof1": "sf1",
"loserof2": "sf2",
"dt": "2026-07-18 19:00",
"venue": "Hard Rock Stadium"
}
]
}
]
}
Third place, in French (third_place_host) — same stage rendered with language='fr': placeholders show both vocabularies localized (winner -> 'Vainqueur SF1', loser -> 'Perdant SF1') with the round names ('Petite finale'), and the same language drives Babel so the dates read in French ('mardi 14 juillet').
{
"tournament": "World Cup",
"season": "2026",
"render": { "dt_format": "EEEE dd MMMM, HH:mm", "layout": "linear" },
"rounds": [
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"team1": "France",
"team2": "Spain",
"dt": "2026-07-14 23:00",
"venue": "AT&T Stadium"
},
{
"id": "sf2",
"team1": "Argentina",
"team2": "Brazil",
"dt": "2026-07-15 23:00",
"venue": "Mercedes-Benz Stadium"
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"dt": "2026-07-19 19:00",
"venue": "MetLife Stadium"
}
]
},
{
"name": "Third place",
"matches": [
{
"loserof1": "sf1",
"loserof2": "sf2",
"dt": "2026-07-18 19:00",
"venue": "Hard Rock Stadium"
}
]
}
]
}
Custom styling (styled_host) — the same round of 8, themed via the get_style hook: a fixed midnight palette of CSS appended after the defaults (so it cascades over them, light or dark). Per-format — the SVG colours via fill, the table via color. Host-only: there is no JSON or CLI surface for styling.
{
"tournament": "World Cup",
"season": "2026",
"render": { "crest_shape": "flag", "dt_format": "EEEE dd MMMM, HH:mm" },
"rounds": [
{
"name": "Quarterfinals",
"matches": [
{
"id": "qf1",
"legs": [
{
"team1": "France",
"goals1": 3,
"team2": "Portugal",
"goals2": 0,
"dt": "2026-07-09 19:00",
"venue": "Gillette Stadium"
}
],
"winner": 1
},
{
"id": "qf2",
"legs": [
{
"team1": "Germany",
"goals1": 1,
"team2": "Spain",
"goals2": 2,
"dt": "2026-07-10 23:00",
"venue": "SoFi Stadium"
}
],
"winner": 2
},
{
"id": "qf3",
"legs": [
{
"team1": "Argentina",
"goals1": 0,
"team2": "Netherlands",
"goals2": 0,
"pen1": 5,
"pen2": 4,
"dt": "2026-07-11 19:00",
"venue": "Arrowhead Stadium"
}
],
"winner": 1
},
{
"id": "qf4",
"team1": "Brazil",
"team2": "England",
"dt": "2026-07-11 23:00",
"venue": "Hard Rock Stadium"
}
]
},
{
"name": "Semifinals",
"matches": [
{
"id": "sf1",
"winnerof1": "qf1",
"winnerof2": "qf2",
"team1": "France",
"team2": "Spain",
"dt": "2026-07-14 23:00",
"venue": "AT&T Stadium"
},
{
"id": "sf2",
"winnerof1": "qf3",
"winnerof2": "qf4",
"team1": "Argentina",
"dt": "2026-07-15 23:00",
"venue": "Mercedes-Benz Stadium"
}
]
},
{
"name": "Final",
"matches": [
{
"winnerof1": "sf1",
"winnerof2": "sf2",
"dt": "2026-07-19 19:00",
"venue": "MetLife Stadium"
}
]
}
]
}