Deepslate Studios
SlateChat

MineDown & MiniMessage Formatting

The [Text](arguments) and <tag> syntax players type in chat, and channel formats are written in.


Every SlateChat config file — channel formats, /chatcolor messages, all of it — accepts two formatting syntaxes at the same time: MineDown ([Text](args)) and MiniMessage (<tag>text</tag>). They're independent — use whichever fits, or mix both in the same string. Players can also type either directly in chat with chat.colored. Legacy &/§ codes and raw hex (#RRGGBB) work everywhere too — see the colors reference. If ItemsAdder is installed, its :name: font images (emoji, rank badges, custom icons) are resolved too — see ItemsAdder Compatibility below.

Building a channels.yml format?

This page covers everyday chat syntax. Shadow color, transition, pride, and raw MiniMessage tags like keybind/insert/NBT live on their own page — see Advanced Formatting.

MiniMessage

MiniMessage is Adventure's tag-based format, and what channel format: strings in channels.yml are written in by default.

Colors

<red>Red text</red>
<gold>Gold text</gold>
<#FF5733>Custom hex color</#FF5733>

Named colors match the standard 16 Minecraft colors — see the colors reference for the full list.

Formatting

<bold>Bold</bold>
<italic>Italic</italic>
<underlined>Underlined</underlined>
<strikethrough>Strikethrough</strikethrough>
<obfuscated>Obfuscated</obfuscated>

Closing tags are optional if the rest of the string should stay formatted, but recommended for clarity.

<reset> needs chat.colored, unlike the tags above

It can't be closed (there's no </reset> — it's a bare <reset>), and because a channel's own format and your message end up parsed as one single string, a <reset> in your message would wipe out the channel's own established color too, not just formatting — the same thing chat.colored already exists to prevent. Without the permission, <reset> is stripped rather than left to reach the parser, so the channel's color falls through normally instead of resetting to Minecraft's plain default. With the permission, it works as documented by Adventure.

Gradients & rainbow

<gradient:#FF0000:#0000FF>Gradient text</gradient>
<rainbow>Rainbow text</rainbow>

Click & hover events

<click:run_command:/spawn>Click to teleport</click>
<click:open_url:https://example.com>Visit our site</click>
<hover:show_text:'Hover message'>Hover over me</hover>

Events combine, hover wrapping click:

<hover:show_text:'Go to spawn'><click:run_command:/spawn><green>Click here</green></click></hover>

Placeholders

PlaceholderAPI resolves before MiniMessage parsing, so placeholders sit safely inside or around tags:

<yellow>%luckperms_prefix% <player></yellow>

Requires chat.colored

Color-family tags (color/named colors/HEX, gradient, rainbow) typed by a player are stripped without chat.colored — both MineDown args (e.g. via /chatcolor) and raw MiniMessage tags typed straight into chat. MiniMessage baked directly into channels.yml is config, not player input, so it always renders.

MineDown

Basic format

[Display Text](arguments)
  • Display Text — what shows up in chat
  • arguments — colors, formatting, links, hover text, space separated

Automatic hover

Using a link or command always shows a hover — by default it's just the link/command itself, so players know what they're about to click before they click it.

Written asShowsHover shows
[Click here](/kill)Click here/kill (automatic)
[Visit](https://example.com)Visithttps://example.com (automatic)

Custom hover needs a permission

Adding your own hover text ([Click here](/kill Execute the kill command)) only works for players with chat.hover.bypass. Without it, the custom text is ignored and the automatic link/command hover is shown instead.

Bare URLs are auto-linked too

You don't need the [Text](url) syntax just to make a link clickable — typing a plain https://example.com straight into chat auto-links it (same hover-shows-the-URL behavior as above). Use the MineDown syntax instead when you want custom display text rather than the raw URL as the link's own label. Not gated by any permission, same as [Text](url) links.

Examples

[Visit our website](https://example.com)

Shows "Visit our website", opens the site on click, hovers the URL automatically.

Clickable command

[Click here](/help)

Shows "Click here", runs /help on click, hovers /help automatically.

Command with custom hover (needs chat.hover.bypass)

[View rules](/rules Click to see server rules)

With the permission, hovering shows "Click to see server rules." Without it, the automatic /rules hover is shown instead — the custom text is dropped silently, not an error.

[Information](Hover for more details)

Any argument that isn't a link or command just becomes hover text. No permission needed if there's no link attached.

Colors

[Colored text](red)
[Hex color text](#FF5733)

Requires chat.colored

Solid colors, gradients and rainbow are silently ignored for players without chat.colored — the text just falls back to whatever color already surrounds it. Links, hover and plain formatting (bold, italic, underlined, strikethrough, obfuscated) still work regardless.

Formatting

[Bold text](bold)
[Italic text](italic)
[Underlined text](underlined)
[Strikethrough text](strikethrough)
[Obfuscated text](obfuscated)

Prefix any of these with ! to force it off instead — [Text](!bold) — handy inside Combinations if a placeholder ahead of it might already be bold.

Combinations

Arguments stack, space separated:

[Admin](red bold)
[Click here](green underlined /warp spawn Teleport to spawn)
[Website](aqua https://example.com Visit our website!)

Gradients

[Colored text](#FF0000-#0000FF)

Rainbow

[Rainbow](rainbow)
[Slow rainbow](rainbow:50)

Escaping

Prefix the [ with a backslash to show the raw syntax instead of triggering it — handy when explaining the format to someone instead of using it:

\[Click here](/kill)

This prints [Click here](/kill) as literal, non-clickable text.

Processing order

  1. The first argument starting with / or http(s):// becomes the link or command
  2. Anything after that becomes hover text
  3. Colors and formatting apply to the display text
  4. With no link at all, every unrecognized argument becomes hover text

Hover text is resolved outside of the click action, which is resolved outside of formatting, which is outside of color — in that order.

Common mistake

[/kill](Click here)

This is backwards — it displays the literal text "/kill" and "Click here" never becomes clickable. The link/command always goes in the parentheses:

[Click here](/kill)

In chat

Players can type MineDown directly:

Hello [everyone](yellow bold)! [Click here](/warp spawn Go to spawn)

"Hello" renders as normal text, "everyone" comes out yellow and bold, and "Click here" becomes clickable — running /warp spawn with a "Go to spawn" hover.

ItemsAdder Compatibility

If ItemsAdder is installed and enabled, SlateChat automatically resolves its :name: font-image shorthand — emoji, rank/prefix badges, custom icons, anything registered as a font image — no extra setup beyond having ItemsAdder installed (toggle: itemsadder in config.yml, on by default).

:smile:

Works when a player types it in chat, when it's baked directly into a channel's format: string (e.g. as a prefix icon), and even through a resolved placeholder — like a LuckPerms rank prefix (%luckperms_prefix%) set to a font image in LuckPerms' own config. Each font image's own permission (if set in ItemsAdder's config) is respected — without it, a player just sees the literal :name: text.

Independent from MineDown/MiniMessage

This is resolved through ItemsAdder's own API, separately from MineDown/MiniMessage — mix it freely with either syntax in the same message.

Next steps

On this page