Make tournament brackets from text

Tournament bracket of 12 competitors in 11 matches, 11 decided; Dodgers won.World SeriesAmerican LeagueNational LeagueWild CardDivisionChampionshipWild CardDivisionChampionshipWorld Series4Yankees25Red Sox13Guardians16Tigers2UPSET1Blue Jays34Yankees12Mariners36Tigers21Blue Jays42Mariners34Cubs25Padres13Dodgers26Reds01Brewers34Cubs22Phillies13Dodgers3UPSET1Brewers03Dodgers4UPSET1Blue Jays33Dodgers4EntryDivision WinnerWild Card
bracket World Series
rounds Wild Card, Division, Championship

tag Entry as e
  Division Winner blue
  Wild Card orange

[American League]
  seed 1 Blue Jays e: Division Winner
  seed 2 Mariners e: Division Winner
  seed 3 Guardians e: Division Winner
  seed 4 Yankees e: Wild Card
  seed 5 Red Sox e: Wild Card
  seed 6 Tigers e: Wild Card
  Tigers beats Guardians 2-1
  Yankees beats Red Sox 2-1
  Blue Jays beats Yankees 3-1
  Mariners beats Tigers 3-2
  Blue Jays beats Mariners 4-3

[National League]
  seed 1 Brewers e: Division Winner
  seed 2 Phillies e: Division Winner
  seed 3 Dodgers e: Division Winner
  seed 4 Cubs e: Wild Card
  seed 5 Padres e: Wild Card
  seed 6 Reds e: Wild Card
  Dodgers beats Reds 2-0
  Cubs beats Padres 2-1
  Brewers beats Cubs 3-2
  Dodgers beats Phillies 3-1
  Dodgers beats Brewers 4-0

Dodgers beats Blue Jays 4-3

The real 2025 postseason: two six-team leagues mirror inward from Wild Card to Championship, and the cross-league final at indent 0 (Dodgers beats Blue Jays) becomes the World Series in the center. Lower seeds toppling higher ones are auto-flagged UPSET (Tigers, then the Dodgers’ run through the 2- and 1-seeds), and the champion gets a star.

Overview

A bracket chart is a single-elimination tournament tree: winners advance up the bracket and the shape builds itself from the results. Reach for it for a game night, a fantasy league, a “best taco in town” showdown, or a full sports postseason. List a one-sided ladder for a simple pool, or split the field into two [Side] columns that mirror inward and meet at a championship.

There are two ways to author, and Diagrammo picks between them automatically:

  • Casual — just list the results. The round structure is inferred from who beat whom.
  • Seeded — declare the field with seed lines and the full bracket skeleton renders on day 0, before a single game is played, with unplayed matchups shown as dashed TBD slots.

When to use

  • bracket — competitors get eliminated and winners auto-advance up a single-elimination tree.
  • flowchart — the branches are decisions a person makes, not contestants losing and dropping out. Bracket layout rewrites any other branching semantic into a tournament claim, and it won’t render decision logic.
  • org — everyone stays and the tree is about reporting upward, not about pairs being knocked out.

Casual brackets

The body is a list of match lines. Each decided game reads left-to-right — the winner is on the left of beats:

Tournament bracket of 4 competitors in 3 matches, 3 decided; Black Pearl won.Grog CupRound 1FinalBlack Pearl5Sea Serpent3Salty Dog4Kraken2Black Pearl6Salty Dog5
bracket Grog Cup

Black Pearl beats Sea Serpent 5-3
Salty Dog beats Kraken 4-2
Black Pearl beats Salty Dog 6-5

Reuse a crew’s exact name to advance them a round — names are identifiers, so Black Pearl in the last line is the same Black Pearl that won round 1. Two round-1 matches feeding one final gives a four-crew bracket with Black Pearl crowned champion.

The trailing 5-3 is a cosmetic score — it’s printed between the boxes but never decides who advanced. If a score disagrees with the winner (Black Pearl beats Salty Dog 1-6), the winner still stands and you get a warning.

Pending matches

Use vs for a matchup that hasn’t been played yet — both boxes render with no winner emphasis:

Tournament bracket of 4 competitors in 2 matches, 1 decided; Cutlass won.Weekend LadderFinalCutlass2Flintlock0Grog HoundMarauder
bracket Weekend Ladder

Cutlass beats Flintlock 2-0
Grog Hound vs Marauder

Byes

A crew whose first appearance is a later round simply never played round 1 — they get a bye:

Tournament bracket of 3 competitors in 2 matches, 2 decided; Leviathan won.Kraken ClassicRound 1FinalTiger Shark3Anglerfish1Leviathan4Tiger Shark2
bracket Kraken Classic

Tiger Shark beats Anglerfish 3-1
Leviathan beats Tiger Shark 4-2

Leviathan is placed in round 2 against the round-1 winner, no extra syntax required.

Seeded brackets

Add seed N Name lines and the bracket switches to seeded mode: the standard single-elimination skeleton is built from the seed count and every slot renders immediately. Top seeds get a first-round bye; a six-team side pairs 3v6 / 4v5 in round 1 (the familiar postseason positions). Results fill the TBD slots as games are played.

Tournament bracket of 6 competitors in 5 matches, 3 decided.Fleet PlayoffsWild CardDivisionChampionship4Jolly Roger25Kraken03Sea Serpent26Barnacle Betty11Black Pearl34Jolly Roger12Queen Anne3Sea Serpent1Black PearlTBD
bracket Fleet Playoffs
rounds Wild Card, Division, Championship

seed 1 Black Pearl
seed 2 Queen Anne
seed 3 Sea Serpent
seed 4 Jolly Roger
seed 5 Kraken
seed 6 Barnacle Betty

Sea Serpent beats Barnacle Betty 2-1
Jolly Roger beats Kraken 2-0
Black Pearl beats Jolly Roger 3-1

rounds A, B, C names the columns from the entry round inward; leave it off for generic Round 1 … Final labels.

Two sides & a championship

Wrap each half of the draw in a [Side] header (an optional trailing color word tints that half). The two sides mirror left and right, and an indent-0 result outside any side becomes the center championship:

Tournament bracket of 4 competitors in 3 matches, 3 decided; Black Pearl won.Grand Line CupRed FleetBlue FleetSkirmishSkirmishClash1Black Pearl42Queen Anne21Flying Dutchm…42Salty Dog11Black Pearl41Flying Dutchman3
bracket Grand Line Cup
rounds Skirmish, Clash, Fleet Final

[Red Fleet] red
  seed 1 Black Pearl
  seed 2 Queen Anne
  Black Pearl beats Queen Anne 4-2

[Blue Fleet] blue
  seed 1 Flying Dutchman
  seed 2 Salty Dog
  Flying Dutchman beats Salty Dog 4-1

Black Pearl beats Flying Dutchman 4-3

The center column is labeled with the bracket title (Grand Line Cup) — the deciding game.

Color by attribute (tags)

A bracket box has two things to color, so each gets its own job: the fill shows win/loss automatically, and the outline is yours to assign. Tag competitors with the same tag grammar every other chart uses, and the outline colors by that tag — with a legend for free:

Tournament bracket of 2 competitors in 1 match, 0 decided.AL Wild CardWild CardTBDTBDEntryDivision WinnerWild Card
bracket AL Wild Card
rounds Wild Card, Division

tag Entry as e
  Division Winner blue
  Wild Card orange

seed 3 Guardians e: Division Winner
seed 6 Tigers e: Wild Card
Tigers beats Guardians 2-1

In a casual (no-seed) bracket, tag a team with a roster line — a name plus metadata, no beats/vs:

Tournament bracket of 2 competitors in 1 match, 1 decided; El Verde won.Taco NightFinalEl Verde5Doña Birria3TruckBajaBirria
bracket Taco Night

tag Truck as t
  Baja green
  Birria orange

El Verde t: Baja
Doña Birria t: Birria
El Verde beats Doña Birria 5-3

Leave the colors off a tag group to have them auto-assigned. no-legend hides the legend strip while keeping the coloring.

Commentary

Add color commentary as prose indented under a match. A leading - becomes a bullet, and **bold**, *italic*, and [links](url) render inline:

Tournament bracket of 2 competitors in 1 match, 1 decided; Blue Jays won.World SeriesFinalBlue Jays4Brewers3Game 7, 10 innings —Guerrero Jr. walk-off double.• Series MVP: Vlad Jr.
bracket World Series

Blue Jays beats Brewers 4-3
  Game 7, 10 innings — **Guerrero Jr.** walk-off double.
  - Series MVP: Vlad Jr.

Home field & seeds

Seeded brackets number each team and treat the higher seed as home (a small house glyph). Mark the host explicitly in a casual bracket with @:

Tournament bracket of 2 competitors in 1 match, 1 decided; Anchor Pub won.Neighborhood CupFinalAnchor Pub3The Growler1
bracket Neighborhood Cup

Anchor Pub beats The Growler 3-1 @ Anchor Pub

When a lower seed beats a higher one, the match is auto-flagged UPSET, and the champion gets a star.

Format

single-elim is the default. double-elim is reserved — it parses today but renders the winners’ side only with a “not yet supported” note; a losers’-bracket grammar is planned.

Options

DirectiveEffect
seededForce seeded (day-0 skeleton) mode without writing a seed line. Any seed N Name line turns it on implicitly.
rounds A, B, CName the round columns inline, from the entry round inward.
rounds (bare)Header of an indented block — one Name [color] per line — when you want to tint individual rounds.
no-roundsDrop the round header strip entirely. no-round is accepted as the same flag.
accent <color>Legacy alias for the title-line trailing color that sets the winner accent. A color on line 1 wins over it.
single-elim | double-elimBracket format. single-elim is the default; see Format.
no-legendHide the legend strip while keeping the tag coloring.
fill-tint | fill-solid | fill-outlineFill treatment — see Appearance.

The indented rounds block colors each round column:

Tournament bracket of 4 competitors in 3 matches, 3 decided; Black Pearl won.Grog CupOpening SkirmishSemifinalBlack Pearl5Sea Serpent3Salty Dog4Kraken2Black Pearl6Salty Dog5
bracket Grog Cup
rounds
  Opening Skirmish blue
  Semifinal orange
  Final red

Black Pearl beats Sea Serpent 5-3
Salty Dog beats Kraken 4-2
Black Pearl beats Salty Dog 6-5

Tips

  • Winner on the left, always. The score is decoration; the word order is the truth.
  • Reuse names exactly to advance a competitor — Black Pearl ≠ The Black Pearl.
  • Don’t hand-place byes — a competitor first seen in a later round is slotted there automatically.
  • Seed for a preview, list results for a recap. One seed line flips the whole bracket into day-0 skeleton mode.

Appearance

Bracket accepts these universal appearance directives:

DirectiveEffect
fill-tintSoft tinted fills (default).
fill-solidSaturated solid fills.
fill-outlineOutline only, no fill.
no-legendHide the legend.

The fill family is mutually exclusive — the last one written wins. Bracket has no no-title directive; the center column is labeled with the bracket title, so leave the title off line 1 if you don’t want one.

Colors come from the active palette — see Colors. Set the palette and light/dark theme at render time with --palette <name> and --theme light|dark|transparent.

Common mistakes

  • Bracket branches mean elimination, and winners auto-advance. Any other branching semantic gets rewritten by the layout into a tournament claim. Use flowchart or org for branching that is not a knockout.
  • A result naming a competitor you never seeded is silently ignored. The match simply never draws. If a round is missing, check the spelling of both names against the seed lines.
  • Seeds and results belong inside a bracket group and in round order — a result written before the competitors exist has nothing to attach to.
  • Anything that renders but looks wrong: Troubleshooting is organised by symptom.

Next