What are Minecraft color codes?
Minecraft color codes are short codes that change the color and style of text in chat, on signs, in the server list and in plugin messages. This translator converts text between the four forms you meet on a server: & codes, § codes, hex colors and MiniMessage tags. Paste your text above, pick what it is written in and what you need, and copy the result. The chat preview shows how it will look in game, and the color converter below it turns any single color into hex, RGB, its closest legacy code and every other form.
The original system is the section sign, §, followed by one character. §c makes the following text red, §l makes it bold, §r resets everything. Minecraft Java Edition reads these codes in text it gets from the server, which is why they show up in server list messages, in plugin output and in server.properties. There are 16 color codes and 6 formatting codes, and since 1.16 any hex color as well.
The different formats exist because § is awkward to type, because hex colors came much later than the codes, and because newer software moved to a tag format that is easier to read and can do more. The result is that the same red text can be written as &c, §c, &#FF5555, <red> or "color": "red", depending on where it goes.
The 16 colors and 6 formats
The color reference table in the tool lists every color with its code, MiniMessage name and hex value, and its "Convert" button loads the color into the converter. The formatting codes are:
| Code | Effect | MiniMessage |
|---|---|---|
&l | Bold | <bold> or <b> |
&o | Italic | <italic> or <i> |
&n | Underline | <underlined> or <u> |
&m | Strikethrough | <strikethrough> or <st> |
&k | Obfuscated (random changing characters) | <obfuscated> or <obf> |
&r | Reset to plain text | <reset> |
One rule catches almost everyone: in Java Edition, a color code clears the formatting before it. &l&cHello is red but not bold, because &c comes after &l and resets it. Write the color first, then the formats: &c&lHello. The translator follows the same rule, and when it writes & or § codes it repeats the formats after each color change so the result looks the way the preview does.
Bedrock Edition uses the same § codes with a few differences. It has extra colors such as §g (Minecoin gold), newer versions use §m and §n as colors instead of strikethrough and underline, and a color code does not reset formatting. This tool follows Java Edition.
& codes, § codes and hex colors
& codes
Almost every plugin lets you write & instead of § in its config files, because & is on every keyboard. The plugin swaps & for § before sending the text to players. EssentialsX, LuckPerms prefixes, chat plugins, scoreboards, holograms and Spigot's own spigot.yml messages all take & codes. When a guide says "Minecraft color codes", it usually means these.
§ codes
The § form is what the game itself reads. You need it in places where no plugin translates &: the motd line in server.properties, text in data packs, and resource pack language files. In server.properties the § should be written as \u00A7, because the file is read as Latin-1 on older versions and the character gets mangled when the file is saved in a different encoding. The MOTD generator writes that line for you, with the escapes and the line break already in place.
Hex colors
Minecraft 1.16 added full RGB colors to text. The game itself stores them in JSON text components as "color": "#FF5555". To fit hex colors into the old code system, Spigot and BungeeCord use a long form: §x followed by the six hex digits, each with its own §. The color #FF5555 becomes §x§F§F§5§5§5§5.
Plugins accept two ways of typing that in config files:
&#FF5555, the short form that most modern plugins support, including EssentialsX. This is the translator's "& codes (hex as &#RRGGBB)" output&x&F&F&5&5&5&5, the same long form as the game uses, written with&. Some older plugins and BungeeCord-based software only understand this one. That is the "& codes (hex as &x&R&R...)" output
Hex colors need a 1.16 or newer client and server software that supports them: Spigot, Paper, Purpur, or a Velocity or BungeeCord proxy. A player on an older version sees the closest of the 16 legacy colors instead. When a color is not one of the 16, the converter names the closest legacy color, which is the one to use if you need to support old versions or Vanilla text that has no hex form.
MiniMessage
MiniMessage is the text format of the Adventure library. Instead of codes it uses tags that look like HTML: <red>Hello</red> <bold>world</bold>. Paper uses it for its own messages in paper-global.yml, Velocity uses it for the MOTD in velocity.toml, and a growing number of plugins accept it next to or instead of & codes. The Paper config generator and the Velocity config builder both write MiniMessage text.
MiniMessage can do things that codes cannot:
- Gradients:
<gradient:#55FFFF:#FF55FF>Aurora Network</gradient>fades from one color to the next across the text, with as many colors as you like - Rainbow:
<rainbow>text</rainbow>cycles through the hue wheel - Hover and click:
<hover:show_text:'Click to join'>and<click:run_command:'/spawn'>add tooltips and actions - Translatable text, keybinds and fonts, which show text in the player's language or with custom resource pack fonts
Tags stay open until they are closed or reset, so <red> colors everything after it until </red>, another color or <reset>. Unlike codes, a new color does not clear bold: <bold><red>A<blue>B is bold all the way through. <!bold> turns bold off for what follows.
Converting between MiniMessage and codes
Going from codes to MiniMessage always works, since everything a code can do has a tag. The translator writes the shortest tags it can: it keeps tags open while the style only gains formats, and it inserts <reset> where a legacy color would have cleared bold or italic. Named colors become named tags such as <gold>, and other hex colors become <#RRGGBB>.
Going from MiniMessage to codes works for colors, formats, gradients and rainbows. A gradient becomes one hex code per letter, which is how gradient text has always been written with codes, and why gradient text in & form is so long. Hover, click, fonts, translatable text and the other interactive tags have no code form. The translator drops those tags, keeps the text inside them, and lists what it left out above the preview. MiniMessage treats tags it does not know as plain text, and so does the translator: <3 or <name> stays as typed.
In MiniMessage, a < that should appear as text is escaped with a backslash, \<. The translator adds the backslash when it writes MiniMessage and reads it when it parses.
Where each format works
| Place | Format |
|---|---|
server.properties motd | § codes, written as \u00A7 |
| Most plugin configs (EssentialsX, LuckPerms, chat plugins) | & codes, usually with &#RRGGBB for hex |
spigot.yml messages | & codes |
paper-global.yml messages | MiniMessage |
velocity.toml MOTD | MiniMessage |
BungeeCord and Waterfall config.yml MOTD | & codes |
/tellraw, /title, books and signs in commands | JSON text components |
| Data pack and resource pack text | JSON text components, sometimes § |
Check a plugin's documentation when in doubt. Many plugins now read both & codes and MiniMessage, and some pick the format with a config option. The spigot.yml generator and the BungeeCord config generator take & codes in their message fields.
JSON text in commands
Commands such as /tellraw do not read codes at all. They take a text component, where color and formats are properties:
/tellraw @a {"text":"Server restarting","color":"gold","bold":true}
The color converter shows the "color" value for any color: the name for the 16 legacy colors ("red", "dark_blue") and the hex value for everything else. The names are the same as the MiniMessage tag names.
Using the color converter
The converter reads a color typed in any common way: &c, §c, #FF5555, FF5555, &#FF5555, &x&F&F&5&5&5&5, rgb(255, 85, 85), 255 85 85, a name such as red or dark blue, or a MiniMessage tag such as <gold>. You can also pick a color with the color picker next to the field. It then shows the color as:
- Hex and RGB, for web tools, image editors and hex-aware plugins
- Decimal, the single number form some plugins and older item data use for dyed leather armor and potion colors
&code,&xcode and§code, the legacy code when the color is one of the 16, and the hex forms when it is not- MiniMessage tag and JSON text color
When the color is not one of the 16, the closest legacy color is shown with its code. "Closest" means nearest in RGB space, which is a good match for most colors but can pick gray for muted, dark shades.
Common mistakes
Formats before the color
&l&6Title shows plain gold text. Put the color first: &6&lTitle. In the translator's output, formats always follow the color for this reason.
§ in the server list
A MOTD that shows § or a question mark instead of colors was saved with § as raw text in the wrong encoding. Write \u00A7 in server.properties instead of the § character. The MOTD generator's output does this.
& codes where the game expects §
Text that shows &6 literally is going somewhere that does not translate &. Convert it to § codes, or to JSON if it is a command.
Hex colors on an old version
Hex codes on a server or client older than 1.16, or on software that does not translate them, show up as the closest legacy color at best and as raw &# text at worst. Use the legacy code the converter suggests for those.
Typing § in game
The chat box does not allow §; the client refuses to send it. Signs, books and anvils do not accept it either. Use a plugin that translates & for player-written text, and give only trusted groups the permission, since color codes also allow &k spam.
For chat formats, prefixes and nicknames with colors, the EssentialsX setup guide and the LuckPerms setup guide show where the codes go.