Minecraft /tellraw Command: JSON Text Format, Click Events & Examples
Everything you need to use /tellraw in Minecraft 1.21 — JSON text component format, click & hover events, target selectors, and 10 copy-paste examples ready to paste into command blocks or chat.
Before I explain anything, here are five /tellraw commands you can paste right now:
/tellraw @a {"text":"Welcome to the server!","color":"gold","bold":true}
/tellraw @a [{"text":"[Rules]","color":"red","clickEvent":{"action":"open_url","value":"https://yourserver.com/rules"}},{"text":" Click to read the server rules.","color":"white"}]
/tellraw @a ["",{"text":"Your balance: ","color":"yellow"},{"score":{"name":"@p","objective":"coins"}},{"text":" coins","color":"yellow"}]
/tellraw @p {"text":"You found a secret area!","color":"aqua","italic":true,"hoverEvent":{"action":"show_text","value":"Collect all 5 to unlock the vault."}}
/tellraw @a [{"text":"[Click here]","color":"green","underlined":true,"clickEvent":{"action":"run_command","value":"/warp spawn"}},{"text":" to teleport to spawn.","color":"white"}]
If those just made sense to you — great, skip straight to the examples section. If they looked like someone dropped a keyboard on the screen, stick around.
/tellraw is the command Minecraft gives you when /say isn't enough. And /say is almost never enough once you've run a server for more than a week. You want colored text. You want clickable links. You want to show a player their own score. /say can't do any of that. /tellraw can.
I've spent more time than I'd like to admit debugging JSON text components — misplaced commas, quotes inside quotes, a stray backslash that broke a rule message I'd been writing for an hour. This guide is the reference I wished existed when I started.
By the end of this page you'll understand the full JSON text component format, know how to add clickable and hoverable text, have a table of every supported color and style, and walk away with 10 production-ready commands you can drop into your server today. If you'd rather skip the manual work entirely, the AlaCraft tellraw generator builds the JSON for you and shows a live preview as you type.
What is /tellraw
/tellraw is a Minecraft chat command that sends a raw JSON text component to one or more players. Unlike /say — which broadcasts plain text with a <Server> prefix — or /msg — which sends a private message with no formatting — /tellraw gives you full control: color, style, click behavior, hover tooltips, scoreboard values, and player name injection.
It works in three contexts:
-
Chat — type directly if you're an operator (permission level 2+)
-
Command blocks — automate messages on timer, redstone signal, or player trigger
-
Console / RCON — server-side scripting and monitoring
The command has existed since Java Edition 1.7.2 and has been extended in nearly every major release: click events in 1.8, score components in 1.9, hex colors in 1.16, and SNBT compact format in 1.21.5. On Bedrock Edition the command exists but supports a smaller feature set — more on that in the comparison table below.
JSON text component format
Every /tellraw message is a JSON text component — either a single object {...} or an array [...] of objects. The minimal working form:
/tellraw @a {"text":"Hello!","color":"gold","bold":true}
The "text" key holds the content. Every other property is optional:
| Property |
Values |
Effect |
"text" |
any string |
The content to display |
"color" |
color name or "#RRGGBB" |
Text color |
"bold" |
true / false |
Bold |
"italic" |
true / false |
Italic |
"underlined" |
true / false |
Underline |
"strikethrough" |
true / false |
Strikethrough |
"obfuscated" |
true / false |
Obfuscated (scrambled characters) |
"font" |
minecraft:default, minecraft:uniform, minecraft:alt |
Font face (Java 1.16+) |
"insertion" |
any string |
Text inserted into chat bar on shift+click |
Minecraft's /tellraw supports 16 named colors. These are different from the §-codes used in server MOTD — here you write the color name as a string:
| Color name |
§-equivalent |
Hex |
"black" |
§0 |
#000000 |
"dark_blue" |
§1 |
#0000AA |
"dark_green" |
§2 |
#00AA00 |
"dark_aqua" |
§3 |
#00AAAA |
"dark_red" |
§4 |
#AA0000 |
"dark_purple" |
§5 |
#AA00AA |
"gold" |
§6 |
#FFAA00 |
"gray" |
§7 |
#AAAAAA |
"dark_gray" |
§8 |
#555555 |
"blue" |
§9 |
#5555FF |
"green" |
§a |
#55FF55 |
"aqua" |
§b |
#55FFFF |
"red" |
§c |
#FF5555 |
"light_purple" |
§d |
#FF55FF |
"yellow" |
§e |
#FFFF55 |
"white" |
§f |
#FFFFFF |
Since Java 1.16 you can also use arbitrary hex colors: "color":"#4A90D9".
💡 Pro tip: Hex colors only work in Java 1.16+. If your server targets older versions or needs Bedrock compatibility, stick to the 16 named colors above.
To combine different colors or styles in one message, use an array. The first element is conventionally an empty string "" that acts as a formatting reset anchor:
/tellraw @a ["",{"text":"[Announcement] ","color":"red","bold":true},{"text":"Server maintenance in 30 minutes.","color":"white"}]
Target selectors
The first argument after /tellraw is the target — who receives the message:
| Selector |
Targets |
@a |
All players online |
@p |
Nearest player to the command source |
@s |
The entity executing the command |
@a[team=Red] |
All players on team Red |
@a[gamemode=survival] |
All survival-mode players |
@a[tag=vip] |
All players carrying the vip tag |
playername |
A specific player by exact username |
For broadcast server messages, @a is the right choice almost every time. For personal feedback after an action, use @s or @p.
Click events and hover events
This is where /tellraw separates itself from every other chat command. You can attach click actions and hover tooltips to any text segment independently.
clickEvent
"clickEvent":{"action":"run_command","value":"/warp spawn"}
| Action |
Effect |
Notes |
run_command |
Runs the command as the clicking player |
Player needs permission for the command |
suggest_command |
Pastes the value into the player's chat bar |
Player still presses Enter themselves |
open_url |
Opens a URL in the default browser |
Shows a safety confirmation dialog |
copy_to_clipboard |
Copies value to clipboard |
Java 1.15+ only |
change_page |
Changes page in a writable book |
Books only |
hoverEvent
"hoverEvent":{"action":"show_text","value":"This opens the spawn world."}
| Action |
Effect |
show_text |
Text tooltip appears on hover |
show_item |
Item card with NBT data |
show_entity |
Entity info (UUID, name, type) |
⚠️ Warning: run_command executes the command as the player, not as the server. Any command requiring OP-level permission will silently fail for non-OP players — no error, just nothing happens. Use suggest_command when you want the player to be able to review or cancel before execution.
Combining both events on the same text component:
/tellraw @a {"text":"[Vote for the server]","color":"green","underlined":true,"clickEvent":{"action":"open_url","value":"https://yoursite.com/vote"},"hoverEvent":{"action":"show_text","value":"Voting takes 30 seconds and earns you 3 diamonds!"}}
Java vs Bedrock — what actually works where
Before you spend an hour building a click-event message, confirm whether your server runs Java or Bedrock:
| Feature |
Java 1.20+ |
Java 1.21.5+ |
Bedrock |
| Basic colored text |
✅ |
✅ |
✅ |
| Bold / italic / underline |
✅ |
✅ |
✅ |
Hex colors ("#RRGGBB") |
✅ |
✅ |
❌ |
clickEvent (all actions) |
✅ |
✅ |
❌ |
hoverEvent (all actions) |
✅ |
✅ |
❌ |
| Score component |
✅ |
✅ |
❌ |
| Selector component |
✅ |
✅ |
❌ |
| SNBT compact format |
❌ |
✅ |
❌ |
translate component |
✅ |
✅ |
Partial |
⚠️ Warning: If you run a crossplay server with Geyser and Floodgate, design your tellraw messages for Bedrock's capabilities. Click and hover events silently do nothing on Bedrock — no error, just dead text. Bedrock players will see colored text without any interactivity.
A note on Java 1.21.5 SNBT format: Starting in 1.21.5, Minecraft accepts a compact SNBT (Stringified NBT) format. You can write {text:"Hi",color:gold} instead of {"text":"Hi","color":"gold"}. Standard JSON still works. Most online generators and tutorials haven't updated yet, so be aware when reading older documentation.
Ten ready-to-use examples
Copy these directly into a command block or your server console. Replace the placeholder values (server names, URLs, scoreboard objective names) with your own.
1. Welcome message with player name
/tellraw @a [{"text":"► ","color":"gold"},{"text":"Welcome, ","color":"yellow"},{"selector":"@p"},{"text":"! Enjoy your stay.","color":"yellow"}]
2. Clickable Discord link
/tellraw @a [{"text":"[Discord] ","color":"blue","bold":true,"underlined":true,"clickEvent":{"action":"open_url","value":"https://discord.gg/yourcode"},"hoverEvent":{"action":"show_text","value":"Join our Discord community"}},{"text":" Come chat with us!","color":"gray"}]
3. Server rules reminder
/tellraw @a ["",{"text":"─────────────────────\n","color":"dark_red"},{"text":" ⚠ Server Rules Reminder\n","color":"red","bold":true},{"text":"No griefing · No hacking · Respect all players\n","color":"white"},{"text":"─────────────────────","color":"dark_red"}]
4. Live scoreboard balance display
/tellraw @a [{"text":"Your coins: ","color":"yellow"},{"score":{"name":"@p","objective":"coins"}},{"text":" ✦","color":"gold"}]
5. Hover tooltip — hidden hint
/tellraw @p {"text":"[?] Hover for a hint","color":"aqua","italic":true,"hoverEvent":{"action":"show_text","value":"The chest is behind the third waterfall on the east side."}}
6. Shop button with command suggestion
/tellraw @a [{"text":"[Open Shop]","color":"green","bold":true,"underlined":true,"clickEvent":{"action":"suggest_command","value":"/shop"},"hoverEvent":{"action":"show_text","value":"Browse the server shop"}},{"text":" — new items added weekly!","color":"gray"}]
7. Vote reminder with external link
/tellraw @a [{"text":"[VOTE] ","color":"gold","bold":true},{"text":"Help the server grow! ","color":"yellow"},{"text":"[Vote now →]","color":"aqua","underlined":true,"clickEvent":{"action":"open_url","value":"https://minecraft-server-list.com/server/your-id/vote/"}}]
8. Staff broadcast
/tellraw @a [{"text":"[STAFF] ","color":"dark_aqua","bold":true},{"text":"An event starts in 10 minutes at ","color":"aqua"},{"text":"/warp event","color":"yellow","italic":true},{"text":". Don't miss it!","color":"aqua"}]
9. Restart warning
/tellraw @a [{"text":"⚠ ","color":"red"},{"text":"SERVER RESTART","color":"red","bold":true},{"text":" in 5 minutes. Please find a safe spot.","color":"white"}]
10. Copy server IP to clipboard
/tellraw @a [{"text":"Server IP: ","color":"gray"},{"text":"play.yourserver.net","color":"aqua","underlined":true,"clickEvent":{"action":"copy_to_clipboard","value":"play.yourserver.net"},"hoverEvent":{"action":"show_text","value":"Click to copy the IP address"}}]
💡 Pro tip: Rather than typing these by hand, use the AlaCraft tellraw command builder — compose messages visually, configure events through form fields, and copy the finished command in one click.
Six common mistakes
❌ Mistake 1: Unescaped quotes inside text strings
JSON strings use double quotes as delimiters. A quote inside your message text must be escaped with a backslash. {"text":"He said "hello""} breaks the JSON parser every time without a useful error message.
Fix: {"text":"He said \"hello\""}
❌ Mistake 2: Using click events on Bedrock
Bedrock Edition's /tellraw silently ignores clickEvent. There's no error — the text appears, the click does nothing. Many server operators discover this only after player complaints that buttons "don't work."
Fix: Test on the actual edition your server runs before announcing interactive features to players.
❌ Mistake 3: Missing the empty string reset in arrays
When using arrays, omitting the leading "" can cause formatting — especially bold and italic flags — to bleed from one component into the next unexpectedly.
Fix: Always open your arrays with an empty string: ["", {...}, {...}]
❌ Mistake 4: Typing long commands directly in chat
Chat input has a hard 256-character limit. Complex /tellraw commands routinely exceed this. Minecraft silently truncates the end of your input, breaking the JSON with no warning or error in chat.
Fix: Put long commands in a command block. Command blocks support up to 32,767 characters.
❌ Mistake 5: run_command targeting OP-level commands
If clickEvent with run_command points to a command that requires operator permission — /gamemode, /ban, /give — non-OP players clicking it will get a silent failure or a permission error. The command runs as the player, not the server.
Fix: Only bind run_command to commands your players already have permission to run. For privileged actions, use a plugin permission node or suggest_command so players can't accidentally trigger something they shouldn't.
❌ Mistake 6: Mismatched brackets or unclosed strings
Every { needs a closing }. Every [ needs a ]. Every " needs its pair. Minecraft's JSON parser is unforgiving — one missing character rejects the entire command, sometimes with a vague error and sometimes silently.
Fix: Write complex commands in VS Code with JSON syntax highlighting, or use the AlaCraft tellraw generator which validates as you type and flags errors in real time.
When to use /tellraw — decision tree
Not every situation needs the full JSON treatment. Walk through these questions:
-
Does the message need colors, formatting, or interactivity?
— No → Use /say (no JSON required, works instantly)
— Yes → Continue
-
Is it a private message to one specific player?
— Yes → /tellraw <playername> with JSON, or just /msg <playername> for plain text
— No → Continue
-
Should it appear as a large title overlay on screen?
— Yes → /title @a title {"text":"..."} (same JSON format, renders full-screen)
— No → Continue
-
Does it need click events, hover tooltips, or scoreboard values?
— Yes → /tellraw is the correct tool
— No → Consider /say with §-codes if your platform supports them (simpler syntax)
-
Will it fire automatically on a schedule or trigger?
— Yes → Put the /tellraw inside a command block on a clock circuit, or use a plugin scheduler like EssentialsX or CMI
— No → Run it manually from console or chat
-
Is this a Bedrock server or a crossplay setup?
— Yes → Limit yourself to colors and basic formatting flags, drop click and hover events entirely
Testing your /tellraw before going live
Never discover a broken JSON in front of all your players. A quick validation workflow:
-
Singleplayer creative world — fastest loop: enable cheats, paste into chat, adjust, repeat. No players affected.
-
Target yourself first — use
/tellraw @s so only you see the test output while you iterate.
-
Preview before running — the AlaCraft /tellraw generator renders a live chat preview before you copy the command, so you catch visual issues before execution.
-
Read the error message — if Minecraft rejects the command, look for: unescaped quotes, missing commas between array elements, unclosed braces or brackets.
-
Test click events in-game — generators can't simulate clicks; always verify
run_command and open_url actions fire correctly in an actual game session before enabling on a production server.
✅ Note: When testing in a command block, attach a button rather than a clock circuit. A broken /tellraw on a 20-tick repeating clock fills every player's chat with error messages. Build and test, then switch to the clock only when you're sure it works.
AlaCraft tellraw generator — what it does
If hand-writing JSON isn't your idea of a productive afternoon — it isn't mine either — the AlaCraft /tellraw generator handles the structure automatically:
-
Visual composer — add text segments, pick colors from a palette, toggle bold/italic/underline with checkboxes
-
Click & hover editor — configure
clickEvent and hoverEvent through dropdowns and text fields, no JSON knowledge required
-
Live preview — see exactly how the message will look in Minecraft's chat before copying anything
-
One-click copy — copies the full
/tellraw @a {...} command, ready to paste into a command block or console
-
Multiple targets — switch between
@a, @p, @s, or a specific player username
-
Real-time validation — the generator highlights JSON errors as you type, before you even try to use the command
No account, no registration, no installation. Open the page, build your message, copy, paste.
FAQ
Can /tellraw format text in Minecraft Bedrock Edition?
Partially. Bedrock Edition supports the 16 named colors and bold/italic/underline formatting flags. But clickEvent, hoverEvent, hex colors ("#RRGGBB"), score components, and selector components are all unsupported. For full-featured /tellraw you need Java Edition.
What is the difference between /tellraw and /say?
/say broadcasts plain, unformatted text with a <Server> or <playername> prefix — no colors, no interactivity, and no way to suppress the prefix. /tellraw sends JSON-formatted text with no prefix, full color control, click and hover support, and real-time scoreboard data injection. Use /say for quick operator-level announcements; use /tellraw for anything player-facing that needs to look polished.
How do I show a player's name in a /tellraw message?
Use the selector component: {"selector":"@p"} inserts the display name of the closest player. In an array: ["Welcome, ", {"selector":"@p"}, "!"]. The selector resolves at the moment the command fires, so it always shows the correct name.
Can I use /tellraw inside a command block?
Yes — and for long messages, a command block is essentially the only practical option. Chat input is capped at 256 characters; command blocks accept up to 32,767. Set the block to Impulse, Unconditional, Needs Redstone, and trigger it with a button or lever.
What is the character limit for /tellraw?
256 characters when typed directly into chat. 32,767 characters inside a command block. Even complex multi-segment messages with both click and hover events rarely exceed 600–800 characters, so command blocks are more than sufficient for anything real-world.
How do I display a scoreboard value in a /tellraw message?
Use the score component: {"score":{"name":"@p","objective":"coins"}}. This reads the value from the coins scoreboard objective for the targeted player at the moment the command fires. You can combine it with other text components in an array to build a complete line like "Your coins: 347 ✦".
Does /tellraw support multiple lines in one message?
Yes. Use \n inside a text string to insert a line break: {"text":"Line one\nLine two"}. On most current server versions this works reliably in chat. Test it on your specific server version before using in production, as behavior can vary with older builds or certain proxy setups.