This gist intends on clearing up some of the misinformation and drama surrounding the signed chat/reporting feature Mojang has added to Minecraft 1.19.1 as well as slowly documenting chat types a lot more in-depth.
When joining a server, clients now send an extra profile key used for verifying a message's authenticity. This key and thus the whole signing process are optional, by default servers do not force messages to be signed. Whenever the player sends a chat message and has joined with a key, the message will be signed using their own private key, which the server then verifies using the public key sent on join. Assuming signature, timestamp, and message contents line up, the message goes through.
On the other end, clients can also require all broadcasted player messages to be signed, disregarding the ones without sender verified signatures.
Since servers often want to modify chat messages with custom formatting, prefixes, and suffixes before broadcasting a message, you can modify the final message to your heart's content as long as the client agrees to it. Servers can send a chat preview while the player is currently typing their message, making them sign that formatted preview instead of the original plain text.
Here's a nice example of such a preview, where the colored component will be signed once the player presses enter to send the message:

Since commands such as /say, as well as custom commands to broadcast messages or send them to a certain group of people also result in "player messages" that you would want to have verified, text arguments in commands will also be signed by the client. With the given signature, you can then distribute the message yourself and still have it show up as a signed player message.
In the wild, you can see this being used in Vanilla's say, me, msg, teammsg, ban, banip, and kick commands.
While the message always needs to be verified by the player that sent it, player display name, team name, and surrounding format can be freely defined by the server.
One of the default chat types looks like this when serialized:
{
"name":"minecraft:team_msg_command",
"id":5,
"element":{
"chat":{
"decoration":{
"translation_key":"chat.type.team.text",
"style":{
},
"parameters":[
"team_name",
"sender",
"content"
]
}
},
"narration":{
"priority":"chat",
"decoration":{
"translation_key":"chat.type.text.narrate",
"style":{
},
"parameters":[
"sender",
"content"
]
}
}
}
},The decoration format for the chat display here resolves as %s <%s> %s, then using the 3 parameters team_name, sender, and content. Even though the decoration element only takes a translatable argument, you can simply enter a plain string as the key that will be displayed; you can try this out by using the following command: /tellraw @s {"translate":"Hello [%s]", "with":["world"]}
Chat type formats can be easily made custom, e.g. turning the translatable into plain text like: 🚩 Broadcast by %s: %s 🚩 and only taking the sender and content parameters, to give just one example. In addition to the text display, you can also define the message to be narrated (also using a different number of arguments and a different surrounding format) and/or displayed in the actionbar as "game info". In the style field you can also apply custom formatting (color, font, italics, hover/click events, etc.) to the entire message/until the sender or content component changes the format again.
Custom chat types can be added using datapacks or by modifying the chat_type registry in the server (which modded servers such as Paper will need to add API for in the future). Custom chat types will then be sent to each player once when they join. With this, you can in theory also send the same message using different formats to different players, only the actual content is always fixed as part of the signed message.
You can find a full list of the Vanilla chat types here.
Before we part ways again, here are answers to some of the more common questions:
No, only reported messages are sent away for processing.
That's highly unlikely considering how different the underlying tech of filtering vs. reporting/chat signing is... even if it will, it would be trivial to disable it.
Probably not, Mojang have made clear they only intend on hunting down the worst of the worst (suicide threats, racial slurs, doxing, etc.). All reports will (supposedly) be handled in human review. See here for a detailed list of punishment reasons.
Then they get banned from reporting; it's unlikely anything will happen to you.
No, they need the private key only you and Mojang have to sign messages as coming from your account.
Reports require and automatically send a handful of messages around the selected ones to be included as context. The current implementation is still flawed in this regard, but Mojang are already aware of that.
No, and if you think you were banned without reason, you can make an appeal. Other than that, we're still waiting on more clarification from Mojang.
Yes, very easily. However, considering this comes at the cost of effectively taking power away from your users, making them more vulnerable to repeated bullying, it'd be not as merciful of a move as you might think it is.
Players may also opt-in to only display signed (and thus reportable) messages.
Everything you do or say has consequences, even if you don't realize they exist. You're not going to be banned for a playful and harmless insult, but considering the large number of children and young adults playing the game, such a reporting feature was long overdue and is nothing new in online games or social media platforms. Someone who is toxic on one server isn't unlikely to behave the same on any other server. You might be capable of handling simple disputes and insults, but Mojang is better equipped to properly deal with people putting out personal threats, child predators and the alike than you are.
Nevertheless, you can still easily lever out reporting on your server if you wish to do so.
Whatever you do, don't join the angry mob; instead, provide constructive and useful feedback either on Minecraft's feedback site or open a ticket on their bug tracker - and remember to keep it civil.