Make tournament brackets from text

World SeriesAmerican LeagueNational LeagueWild CardDivisionChampionshipWild CardDivisionChampionshipWorld Series4Yankees25Red Sox13Guardians16Tigers2UPSET1Blue Jays34Yankees12Mariners36Tigers21Blue Jays42Mariners34Cubs25Padres13Dodgers26Reds01Brewers34Cubs22Phillies13Dodgers3UPSET1Brewers03Dodgers4UPSET1Blue Jays33Dodgers4EntryDivision WinnerWild Card
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:

Grog CupRound 1FinalBlack Pearl5Sea Serpent3Salty Dog4Kraken2Black Pearl6Salty Dog5
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:

Weekend LadderFinalCutlass2Flintlock0Grog HoundMarauder
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:

Kraken ClassicRound 1FinalTiger Shark3Anglerfish1Leviathan4Tiger Shark2
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.

Fleet PlayoffsWild CardDivisionChampionship4Jolly Roger25Kraken03Sea Serpent26Barnacle Betty11Black Pearl34Jolly Roger12Queen Anne3Sea Serpent1Black PearlTBD
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:

Grand Line CupRed FleetBlue FleetSkirmishSkirmishClash1Black Pearl42Queen Anne21Flying Dutchman42Salty Dog11Black Pearl41Flying Dutchman3
Grand Line CupRed FleetBlue FleetSkirmishSkirmishClash1Black Pearl42Queen Anne21Flying Dutchman42Salty 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:

AL Wild CardWild CardTBDTBDEntryDivision WinnerWild Card
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:

Taco NightFinalEl Verde5Doña Birria3TruckBajaBirria
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:

World SeriesFinalBlue Jays4Brewers3Game 7, 10 innings — GuerreroJr. walk-off double.• Series MVP: Vlad Jr.
World SeriesFinalBlue Jays4Brewers3Game 7, 10 innings — GuerreroJr. 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 @:

Neighborhood CupFinalAnchor Pub3The Growler1
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:

Grog CupOpening SkirmishSemifinalBlack Pearl5Sea Serpent3Salty Dog4Kraken2Black Pearl6Salty Dog5
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 PearlThe 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