You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Shadow color, transition, and pride MiniMessage tags (chat.colored-gated, shadow color also has a MineDown shortcut: [Text](shadow:#hex)).
Keybind, insertion, font, translatable (lang/lang_or), player head, and sprite MiniMessage tags, gated behind a new chat.cosmetic permission. Note: <head>/<sprite> require Paper 1.21.10+ (Adventure 4.25.0) — on older servers the tag is silently unrecognized regardless of permission.
Entity selector, scoreboard, and NBT MiniMessage tags, gated behind a new chat.advanced permission (OP-only by default — these can expose live server state). Resolved against the message sender via Paper's PaperComponents.resolveWithContext (needs Paper 1.21.4+; older servers fall back to showing the raw pattern, e.g. @e[limit=5], instead of resolved names).
debug config option — logs the fully processed message string plus the raw component JSON for every chat message. Off by default, noisy; only meant for troubleshooting.
console_format_colors config option — renders console/log output with real ANSI colors (via Paper's ComponentLogger) instead of plain text.
Fixed
Players without chat.colored could bypass the color restriction entirely by typing raw MiniMessage tags (<red>, <gradient:...>, etc.) directly instead of MineDown syntax — only legacy &/hex codes were being stripped. Now the whole color-tag family is stripped consistently, MineDown args and raw tags alike.
<gradient:#hex:#hex>, <transition:#hex:#hex>, and <shadow:#hex> (raw-typed, MineDown-generated, or baked into channels.yml) were silently broken — hex-to-MiniMessage conversion ran indiscriminately over the whole string and rewrote hex color arguments into nested <#hex> tags, which MiniMessage can't parse as a color, so the tag fell back to literal text. Hex conversion now skips content already inside a tag.
<!shadow> (the disable-shadow alias) wasn't covered by the chat.colored gate — the regex only accounted for </tag> closing syntax, not <!tag>.
<selector>/<score>/<nbt> reached the client unresolved (showing the raw pattern, e.g. @e[limit=5], instead of resolved names) because nothing ever supplied Paper the sender context these components need to render server-side — see Added above.
Console log only ever stripped legacy & codes, leaving raw MiniMessage tags (<selector:...>, <yellow>, etc.) visible as literal text; now properly deserialized and rendered as plain text (or ANSI colors with console_format_colors), with hover/click content naturally excluded either way.
GitLab releases shipped with no real patch notes (just a bare "SlateChat x.y.z" description) — the CI pipeline now pulls the matching version section from this changelog instead.
Changed
Docs reorganized by audience: docs/formatting.md now covers only everyday chat syntax, docs/formatting-advanced.md covers admin/config-only tags, and docs/permissions.md is now the single canonical permission table (previously duplicated across the README and two other docs).