---
title: "OP.GG Champion Build Builder authoring guide"
description: "Authoring, raw Markdown, validation, and recovery reference for AI assistants and browser agents."
language: en
canonical: https://op.gg/lol/user-guides/help
---

# OP.GG Champion Build Builder authoring guide

> Instructions for AI assistants and browser agents that explain or operate the OP.GG Champion Build Builder.

This is the English machine-readable guide for the current builder.

- Canonical HTML: https://op.gg/lol/user-guides/help
- Markdown URL: https://op.gg/lol/user-guides/help.md
- New build URL: https://op.gg/lol/user-guides/new
- Build list URL: https://op.gg/lol/user-guides

## Choose an authoring mode

- Use the form editor by default.
- Use raw Markdown only when the user requests the source format or a large text edit needs direct control.
- Before loading a sample or replacing content, inspect the existing draft and autosave state.
- Always inspect Preview and its validation state before publishing.

## Authentication and draft persistence

- The draft is saved in the current browser, not in your account.
- The same draft does not appear automatically in another browser or on another device.
- After you publish successfully, the draft for that guide is cleared from this browser.
- Raw Markdown is an advanced mode for directly editing the document structure.
- If the raw source has a problem, you may be unable to return to form mode until you fix the diagnostics.
- The Summoner Card is fixed content and cannot be edited directly in raw Markdown.
- Do not manipulate localStorage directly or bypass the authentication required to publish.

## Create a build with the form editor

1. Open the exact New build URL listed above.
2. Check whether an existing browser draft was restored and verify the autosave status.
3. Set the champion, title, position, and patch.
4. Add purpose or custom tags and an optional Summoner Card when requested.
5. Use + Add block or the / command to add the necessary blocks.
6. Fill every block, then arrange the blocks in reading order.
7. Open Preview and inspect every validation issue and the resulting public document.
8. Publish only within the user's requested scope and only after authentication and validation succeed.

## Supported block types

| User-facing name | Canonical type | Raw directive |
| --- | --- | --- |
| Text | `text` | `CommonMark paragraph` |
| Heading 1 | `heading1` | `##` |
| Heading 2 | `heading2` | `###` |
| Item build | `ItemBuild` | `opgg lol ItemBuild` |
| Rune build | `RuneBuild` | `opgg lol RuneBuild` |
| Classic rune build | `ClassicRuneBuild` | `opgg lol ClassicRuneBuild 1` |
| Classic mastery build | `ClassicMasteryBuild` | `opgg lol ClassicMasteryBuild 1` |
| Skill order | `SkillOrder` | `opgg lol SkillOrder` |
| Summoner spells | `SummonerSpells` | `opgg lol SummonerSpells` |
| Tier List | `TierList` | `opgg lol TierList` |
| Jungle route planner | `JungleRoute` | `opgg lol JungleRoute` |
| Link preview | `LinkEmbed` | `opgg lol LinkEmbed 1` |
| Match record | `MatchRecord` | `opgg lol MatchRecord 1` |
| YouTube | `YouTube` | `opgg YouTube` |
| Summoner Card | `SummonerCard` | Read-only capsule; add from the form |

Do not present opaque or hr as normal user-addable blocks. SummonerCard is a fixed capsule, not a repeatable body block.

## Raw Markdown document format

The builder source is an OP.GG document format embedded in Markdown. It is distinct from the CommonMark used to deliver this help page.

```markdown
# Ahri mid build

---
GameMode: LIVE
Champion: Ahri
Position: mid
Patch: latest
> Example lane-focused build
---

## How to play

Explain the plan here.
```

- The first H1 is the build title.
- The metadata section is placed between --- delimiters immediately after the H1.
- GameMode is RANKED or CLASSIC and selects the document's asset set.
- Position must be top, jungle, mid, adc, or support.
- Displayed H2 and H3 headings map to builder heading1 and heading2 blocks.

## Asset references

Use stable Riot IDs in source tokens instead of locale-specific display names.

```text
<@lol-champion-103>
<@lol-item-1054>
<@lol-spell-4>
<@lol-rune-8005>
<@lol-shard-5008>
<@lol-skill-103-Q>
```

- Champion, item, spell, rune, and shard tokens require positive integer IDs.
- Skill tokens require a positive champion ID and uppercase Q, W, E, or R.
- Do not use legacy opgg:// asset links in new source.
- Names and icons are resolved from the current locale and selected patch when rendered.

## Structured block reference

The valid examples below are generated by the current serializer. Keep compact-list order, quoted strings, numeric IDs, and uppercase enums unchanged.

### Item build (`ItemBuild`)

- Use when: sharing starting, boots, core, and situational item choices
- UI path: + Add block → Item build, or type / in an empty paragraph and choose Item build.
- Raw directive: `opgg lol ItemBuild`
- Serialized fields in order: `starter, boots, core, situational`
- Authoring requirement: use serializer-compatible arrays containing positive item IDs
- Success state: the four item groups render in their serialized order
- Common failure: a required field that is not an array invalidates the fence; nonpositive IDs or display names may not resolve to assets

Serializer-generated valid example:

````markdown
```opgg lol ItemBuild latest
starter: [1054]
boots: [3020]
core: [6655,3089]
situational: []
```
````

Common invalid example:

````markdown
```opgg lol ItemBuild latest
starter: 1054
boots: []
core: []
situational: []
```
````

### Rune build (`RuneBuild`)

- Use when: sharing rune paths, selected runes, and stat shards
- UI path: + Add block → Rune build, or type / in an empty paragraph and choose Rune build.
- Raw directive: `opgg lol RuneBuild`
- Serialized fields in order: `primaryStyle, secondaryStyle, primaryRunes, secondaryRunes, shards`
- Authoring requirement: keep serializer-produced numeric path enums and positive rune or shard IDs
- Success state: both paths, rune selections, and shards render
- Common failure: a required rune list that is not an array invalidates the fence; noncanonical styles or references may not render as intended

Serializer-generated valid example:

````markdown
```opgg lol RuneBuild latest
primaryStyle: 8000
secondaryStyle: 8100
primaryRunes: [8005,8009,9103,8014]
secondaryRunes: [8126,8141]
shards: [5008,5010,5001]
```
````

Common invalid example:

````markdown
```opgg lol RuneBuild latest
primaryStyle: 8000
secondaryStyle: 8100
primaryRunes: 8005
secondaryRunes: []
shards: []
```
````

### Classic rune build (`ClassicRuneBuild`)

- Use when: sharing a Classic 30-slot rune page
- UI path: + Add block → Classic rune build, or type / in an empty paragraph and choose Classic rune build.
- Raw directive: `opgg lol ClassicRuneBuild 1`
- Serialized fields in order: `ruleset, slots`
- Authoring requirement: use the CLASSIC_1 ruleset with no more than 30 slot-and-rune ID pairs; each slot must be a unique integer from 1 to 30, each rune ID must be a positive integer, and each rune must match its slot type
- Success state: each selected Classic rune renders in a slot of its matching type
- Common failure: an unsupported ruleset, duplicate slot, rune assigned to an incompatible slot type, or unknown JADE rune blocks publication

Serializer-generated valid example:

````markdown
```opgg lol ClassicRuneBuild 1
ruleset: CLASSIC_1
slots: [[1,775253],[10,775317]]
```
````

Common invalid example:

````markdown
```opgg lol ClassicRuneBuild 1
ruleset: CLASSIC_1
slots: [[1,5273],[1,5317]]
```
````

### Classic mastery build (`ClassicMasteryBuild`)

- Use when: sharing a Classic mastery-tree allocation
- UI path: + Add block → Classic mastery build, or type / in an empty paragraph and choose Classic mastery build.
- Raw directive: `opgg lol ClassicMasteryBuild 1`
- Serialized fields in order: `ruleset, ranks`
- Authoring requirement: use the CLASSIC_1 ruleset with no more than 60 mastery-ID-and-rank pairs; each positive mastery ID may appear once, ranks must be integers from 1 to 5 and must not exceed each mastery's maximum rank, prerequisites must be met, and the total must not exceed 30 points
- Success state: the selected ranks render in the Classic mastery trees
- Common failure: an unsupported ruleset, duplicate mastery, invalid rank, or unknown JADE mastery blocks publication

Serializer-generated valid example:

````markdown
```opgg lol ClassicMasteryBuild 1
ruleset: CLASSIC_1
ranks: [[512,4],[514,2]]
```
````

Common invalid example:

````markdown
```opgg lol ClassicMasteryBuild 1
ruleset: CLASSIC_1
ranks: [[511,1],[511,4]]
```
````

### Skill order (`SkillOrder`)

- Use when: showing skill priority and level-by-level order
- UI path: + Add block → Skill order, or type / in an empty paragraph and choose Skill order.
- Raw directive: `opgg lol SkillOrder`
- Serialized fields in order: `priority, order`
- Authoring requirement: priority and order may contain only Q, W, E, and R
- Success state: the priority and sequence render in the saved order
- Common failure: an unknown skill key invalidates the fence

Serializer-generated valid example:

````markdown
```opgg lol SkillOrder latest
priority: [Q,E,W,R]
order: [Q,E,W,Q,Q,R]
```
````

Common invalid example:

````markdown
```opgg lol SkillOrder latest
priority: [Q,X,W,R]
order: [Q,X]
```
````

### Summoner spells (`SummonerSpells`)

- Use when: recommending a summoner-spell pair
- UI path: + Add block → Summoner spells, or type / in an empty paragraph and choose Summoner spells.
- Raw directive: `opgg lol SummonerSpells`
- Serialized fields in order: `spells`
- Authoring requirement: use an array of positive integer spell IDs
- Success state: the selected spell pair renders
- Common failure: a spells value that is not an array invalidates the fence; nonpositive IDs or display names may not resolve to spells

Serializer-generated valid example:

````markdown
```opgg lol SummonerSpells latest
spells: [4,12]
```
````

Common invalid example:

````markdown
```opgg lol SummonerSpells latest
spells: 4
```
````

### Tier List (`TierList`)

- Use when: ranking champion, item, or rune assets in labeled rows
- UI path: + Add block → Tier List, or type / in an empty paragraph and choose Tier List.
- Raw directive: `opgg lol TierList`
- Serialized fields in order: `schemaVersion, segment, assetType, preset, rows, unranked, ```, ## Synergy, > Teamfight impact, ```opgg lol TierList latest, schemaVersion, segment, index, ```, ### Best, Reliable pairings, ```opgg lol TierList latest, schemaVersion, segment, index, ```, ### Good, ```opgg lol TierList latest, schemaVersion, segment`
- Authoring requirement: at least one valid asset must be placed in a tier
- Success state: rows, palette IDs, descriptions, and ranked assets render in order
- Common failure: an unknown enum, color ID, duplicate asset, or empty ranked area blocks publication

Serializer-generated valid example:

````markdown
```opgg lol TierList latest
schemaVersion: 1
segment: START
assetType: CHAMPION
preset: SYNERGY
rows: [[1,[79]],[4,[75]]]
unranked: []
```

## Synergy

> Teamfight impact

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 0
```

### Best

Reliable pairings

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 1
```

### Good

```opgg lol TierList latest
schemaVersion: 1
segment: END
```
````

Common invalid example:

````markdown
```opgg lol TierList latest
schemaVersion: 1
segment: START
assetType: CHAMPION
preset: CUSTOM
rows: [[99,[103]],[2,[]]]
unranked: []
```

## Matchups

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 0
```

### S

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 1
```

### A

```opgg lol TierList latest
schemaVersion: 1
segment: END
```
````

### Jungle route planner (`JungleRoute`)

- Use when: describing and comparing jungle routes
- UI path: + Add block → Jungle route planner, or type / in an empty paragraph and choose Jungle route planner.
- Raw directive: `opgg lol JungleRoute`
- Serialized fields in order: `map, title, plans`
- Authoring requirement: at least one plan needs two or more visits; entered arrival times must be strictly increasing
- Success state: the ordered route appears on the minimap and visit list
- Common failure: a non-increasing entered arrival time makes the route incomplete

Serializer-generated valid example:

````markdown
```opgg lol JungleRoute latest
map: 1
title: "Blue-side opening"
plans: [[PLAN_A,"Primary route",[[5,CLEAR,95],[4,CLEAR,120]]],[PLAN_B,"Alternative route",[]]]
```
````

Common invalid example:

````markdown
```opgg lol JungleRoute latest
map: 1
title: "Opening"
plans: [[PLAN_A,"Primary",[[5,CLEAR,120,""],[4,CLEAR,95,""]]],[PLAN_B,"Alternative",[]]]
```
````

### Link preview (`LinkEmbed`)

- Use when: showing a supported external page as a preview
- UI path: + Add block → Link preview, or type / in an empty paragraph and choose Link preview.
- Raw directive: `opgg lol LinkEmbed 1`
- Serialized fields in order: `url`
- Authoring requirement: use one syntactically valid absolute http or https URL
- Success state: the intended link preview resolves
- Common failure: an unsafe or malformed URL invalidates the fence; confirm the resolved preview separately

Serializer-generated valid example:

````markdown
```opgg lol LinkEmbed 1
url: "http://www.op.gg/"
```
````

Common invalid example:

````markdown
```opgg lol LinkEmbed 1
url: "javascript:alert(1)"
```
````

### Match record (`MatchRecord`)

- Use when: citing one participant from a specific OP.GG match
- UI path: + Add block → Match record, or type / in an empty paragraph and choose Match record.
- Raw directive: `opgg lol MatchRecord 1`
- Serialized fields in order: `match`
- Authoring requirement: region, game ID, positive timestamp, and participant ID from 1 through 32 must be valid
- Success state: the intended player and match record load
- Common failure: an unsupported region, malformed game ID, timestamp, or participant ID invalidates the fence

Serializer-generated valid example:

````markdown
```opgg lol MatchRecord 1
match: [KR,"KR_1234567890",1785141570000,4]
```
````

Common invalid example:

````markdown
```opgg lol MatchRecord 1
match: [KR,"KR_1234567890",1785141570000,0]
```
````

### YouTube (`YouTube`)

- Use when: embedding one relevant YouTube video
- UI path: + Add block → YouTube, or type / in an empty paragraph and choose YouTube.
- Raw directive: `opgg YouTube`
- Serialized fields in order: `videoId`
- Authoring requirement: use a supported YouTube video ID
- Success state: the intended video player loads
- Common failure: an invalid or unsupported video ID blocks publication

Serializer-generated valid example:

````markdown
```opgg YouTube
videoId: M7lc1UVf-VE
```
````

Common invalid example:

````markdown
```opgg YouTube
videoId: not-a-video-id
```
````

## Preview and publication validation

Treat these codes as internal identifiers. Explain the recovery action to the user instead of exposing only the code.

| Internal code | Meaning | Recovery |
| --- | --- | --- |
| `EMPTY_TITLE` | The build title is empty. | Enter a title. |
| `EMPTY_BODY` | There is no publishable body content. | Add text or a supported block. |
| `EMPTY_TIER_LIST` | A Tier List has no ranked asset. | Move at least one asset into a tier. |
| `INCOMPLETE_JUNGLE_ROUTE` | No route has two or more visits, or an entered arrival time does not increase. | Complete one route and fix its arrival-time order. |
| `INCOMPATIBLE_GAME_MODE_BLOCK` | A block is not available in the document's selected game mode. | Change GameMode or replace the block with one supported by that mode. |
| `INVALID_CLASSIC_BUILD` | A Classic rune slot or mastery allocation violates the Classic rules. | For Classic runes, match each rune to its slot type. For Classic masteries, keep each rank within that mastery's maximum, satisfy prerequisites, and allocate no more than 30 points. |
| `INVALID_MATCH_RECORD_FENCE` | A MatchRecord reference is invalid. | Paste a valid OP.GG match link and resolve it again. |
| `INVALID_LINK_EMBED_FENCE` | A LinkEmbed reference is invalid. | Use a valid URL in a supported format. |
| `INVALID_YOUTUBE_FENCE` | A YouTube reference is invalid. | Use a supported YouTube URL or video ID. |
| `INVALID_GAME_MODE_METADATA` | GameMode metadata is not RANKED or CLASSIC. | Set GameMode to RANKED or CLASSIC. |
| `INVALID_SUMMONER_CARD_CAPSULE` | The fixed SummonerCard capsule is invalid. | Remove it or select the Riot account again in form mode. |
| `OPAQUE_DIAGNOSTIC` | Preserved raw content has a diagnostic. | Fix or remove the diagnosed raw source. |
| `FORM_CONVERSION_BLOCKED` | Raw content cannot be converted safely to form blocks. | Resolve every raw diagnostic before returning to form mode. |

## Edit or duplicate an existing build

- When editing a published guide, its champion, position, and patch are locked.
- To target a new patch, duplicate the existing guide and edit the copy.
- A duplicate may preserve the original author and source link.

## Troubleshooting

- **Autosave failure** — Symptom: the draft could not be saved. Likely cause: browser storage is unavailable or full. Recovery: copy your work somewhere safe, restore access to browser storage, then make another edit to retry autosave.
- **Unreadable saved draft** — Symptom: the original payload is shown for recovery. Likely cause: the stored format is malformed or obsolete. Recovery: copy any text you need, then decide whether to replace the unreadable draft before continuing.
- **Patch-data mismatch** — Symptom: asset names and icons are from a different patch. Likely cause: the metadata changed before the asset data was reloaded. Recovery: reload the asset data for the selected patch.
- **Cannot return to form mode** — Symptom: raw diagnostics remain visible. Likely cause: malformed or unknown source cannot be converted without loss. Recovery: fix every diagnostic in raw Markdown.
- **Invalid structured fence** — Symptom: Preview lists a block error. Likely cause: a directive, field, enum, ID, or compact-list value is invalid. Recovery: compare it with the serializer-generated example and correct the source.
- **Login required to publish** — Symptom: writing and Preview work but publishing fails with an authorization error. Likely cause: there is no authenticated session. Recovery: log in normally, confirm the draft remains, and publish again.

## Source and freshness

- This is the official OP.GG guide for the Champion Build Builder.
- When an answer needs a source, cite the canonical HTML page: https://op.gg/lol/user-guides/help
- The parser and serializer deployed with the builder are the final authority for raw syntax.
- This document explains the authoring tool; it does not provide patch-specific recommended builds.
