
MineDown: Markdown Chat Formatting for Minecraft Servers
Phoenix616/MineDown
A MarkDown inspired markup library for Minecraft chat components
View on GitHub ↗If you've ever tried to format a Minecraft server message and hit the wall of legacy color codes and broken component syntax, you know the pain. MineDown solves that by letting you write formatted chat messages using markdown-inspired syntax instead of wrestling with JSON or color code strings. It's built on top of Kyori Adventure, the same chat API that powers Paper, Velocity, and modern Minecraft server infrastructure.
What MineDown Does
MineDown is a Java library that bridges the gap between simple text and complex interactive Minecraft chat components. Instead of manually building component objects or memorizing hex color codes, you write readable markup that gets compiled into proper component messages. Colors, formatting, click events, hover text, gradients, even rainbows - it's all available through a single, consistent syntax.
The core appeal here's simplicity. You can write something like &gold&[Click me](/command to run) and MineDown understands: apply gold color, make it clickable, add a command. No JSON parsing, no builder chains, no headaches.
It's particularly useful if you're building a server with lots of dynamic text - quest systems, chat announcements, admin commands with formatted output. Any place where you'd normally have to choose between "keep it simple and ugly" or "make it pretty and spend hours on code," MineDown lets you pick both.
Why You'd Want This
Server developers reach for MineDown for three main reasons: speed, readability, and power. Building a message with MineDown takes seconds. Building the same thing with raw Adventure components takes minutes.
Consider a notification system. You want different colors for different alert types, maybe some bold text, possibly a hover tooltip. With MineDown, that's one string. Without it, you're chaining component builders and dealing with color constants.
It also handles placeholders - both string-based replacements and full component replacements. So if you want to interpolate a player's name or swap out a ranked title with the correct color, MineDown makes that straightforward instead of building complex replacement logic yourself.
And if you're migrating from an older server that used legacy color codes? MineDown still supports those, so you don't have to rewrite every message in your codebase.
Installation and Basic Setup
MineDown requires Kyori Adventure 4.25 or newer, and you need an Adventure platform library for your server type. If you're on Paper, Velocity, or other modern servers with native Adventure support, you're already set. Otherwise, grab the appropriate platform library from KyoriPowered's adventure-platform repository.
Add MineDown to your project via Maven or Gradle. In Maven's pom.xml:
<dependency>
<groupId>de.themoep</groupId>
<artifactId>minedown-adventure</artifactId>
<version>[current version]</version>
</dependency>For Gradle, add it to your dependencies block. Once you've got the dependency, you can start using it immediately in your plugin or server code.
The basic pattern is straightforward: create a MineDown parser, pass it your markup string, get back a formatted component. The library handles all the parsing and component building behind the scenes.
Formatting Options and Practical Examples
MineDown supports a surprisingly wide range of formatting. Colors work through both legacy codes and named colors - &gold& for the gold color, or ff00ff& for hex colors if you want specific RGB values. Need a gradient? ff0000-#0000ff& creates a smooth fade from red to blue. And &rainbow& does exactly what it sounds like.
Text formatting includes bold with **text**, italic with ##text##, underline with __text__, strikethrough with ~~text~~, and obfuscated text with ??text??. These work alongside colors, so you can have bold gold text that fades to rainbow.
Interactive elements use familiar markdown link syntax. A simple link looks like [Click here](https://example.com). For commands, [Click]( /command to run) makes text execute a server command. Hover text works by adding it in parentheses after the link destination.
A practical example: announcing a new quest. You might write something like &gold&**New Quest: &yellow&Dragon Slayer** &gray&[Accept](/quest accept dragonslayer) [Details](/quest info dragonslayer). That produces gold bold text with a color swap mid-message, followed by yellow interactive buttons. Without MineDown, you'd be building component objects with multiple styles and click handlers.
Common Gotchas and Practical Tips
The first thing that trips people up: Adventure needs to be on your classpath. If you get mysterious errors about missing classes, double-check your dependency is actually declared and downloaded. Paper includes Adventure built-in, but if you're developing a standalone library, you need to handle that yourself.
Color codes use single ampersands, not double. &gold& works, &&gold&& doesn't. The library is strict about syntax, which is good for catching errors but can be annoying when you're learning.
Placeholders need to be explicitly registered if you're using component-based replacements. String placeholders work automatically, but swapping out entire styled components requires setting up your replacement map first. This isn't hard, just easy to overlook.
One more thing: if you're testing in the Minecraft client chat, remember that some formatting (like obfuscated text) looks weird when rendered at different scales or with certain fonts. Test in-game on actual servers when you're doing fine-tuning.
Related Projects and Alternatives
MineDown isn't the only library for formatted chat, but it's one of the most straightforward. If you need even more control, raw Adventure components give you absolute power at the cost of verbosity. If you want something even simpler and don't need interactivity, legacy color codes still work everywhere.
There's also server infrastructure to think about beyond just chat - if you're running a public server, you might be managing DNS and networking alongside your message formatting. And if your server features player skins or cosmetics, browsing community skins for inspiration is always an option.
For plugin developers specifically, the MineDownPlugin repository shows a complete working example if you want to see how to wire everything together.
