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 as | Shows | Hover shows |
|---|---|---|
[Click here](/kill) | Click here | /kill (automatic) |
[Visit](https://example.com) | Visit | https://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
Clickable link
[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.
Hover only, no link
[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
- The first argument starting with
/orhttp(s)://becomes the link or command - Anything after that becomes hover text
- Colors and formatting apply to the display text
- 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.
