Make tournament brackets from text
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-3The 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
seedlines 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:
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:
Byes
A crew whose first appearance is a later round simply never played round 1 — they get a bye:
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.
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:
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:
In a casual (no-seed) bracket, tag a team with a roster line — a name plus metadata, no beats/vs:
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:
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 @:
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
| Directive | Effect |
|---|---|
seeded | Force seeded (day-0 skeleton) mode without writing a seed line. Any seed N Name line turns it on implicitly. |
rounds A, B, C | Name 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-rounds | Drop 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-elim | Bracket format. single-elim is the default; see Format. |
no-legend | Hide the legend strip while keeping the tag coloring. |
fill-tint | fill-solid | fill-outline | Fill treatment — see Appearance. |
The indented rounds block colors each round column:
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
seedline flips the whole bracket into day-0 skeleton mode.
Appearance
Bracket accepts these universal appearance directives:
| Directive | Effect |
|---|---|
fill-tint | Soft tinted fills (default). |
fill-solid | Saturated solid fills. |
fill-outline | Outline only, no fill. |
no-legend | Hide 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
flowchartororgfor 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
- Related:
flowchart·org - Then: Colors & palettes