Platform-integrated chat gives every player consistent access to safety tools such as reporting and muting, and lets chat features like Quick Words roll out reliably across all games. It also replaces the current prefix system, so roles associated with users render consistently and are safe for all ages.
Nothing in your game changes until you enable platform-integrated chat in Studio. After you enable it:
- Roblox delivers and renders chat in the default window or a TextChannelWindow you place in your UI. Custom chat UIs can no longer render messages themselves.
- Player message text isn't accessible to your code. You can't read, log, or export it. APIs that previously returned message text now return an empty string ("") instead of nil, so your scripts keep running but receive no content.
Unsupported APIs
When platform-integrated chat is enabled, the following APIs return "" (empty string, not nil) and log a warning:
| Feature | Unsupported APIs | What to use instead |
|---|---|---|
| Chat messages and display | TextChatMessage.Text, TextChatMessage.Translation | Migrate your custom chat GUI to TextChannelWindow. Set Target to a TextChannel. Users can send and receive messages automatically. |
| Chat prefixes | TextChatMessage.PrefixText | Not supported. If your game requires prefixes, don't enable platform-integrated chat yet. |
| Presets / chat wheels | TextChannel:SendAsync() | Use Quick Words creator customization to add relevant phrases to chat. |
| Moderation / admin commands | OnIncomingMessage, Player.Chatted | Use TextChatCommand for chat-triggered commands. Use read-only chat to view all chats for moderation during live events. |
Enable platform-integrated chat
To enable platform-integrated chat in Studio:
- Open the Explorer window.
- Select TextChatService.
- In the Properties panel, find PlatformIntegratedChat.
- Set it to Enabled.
With the update enabled, the unsupported APIs listed earlier return empty strings and log warnings. You can set the property back to Disabled at any time to revert.
You can only change this property in Studio, not from a script.
Create a TextChannelWindow
To create a TextChannelWindow:
- Create a ScreenGui in StarterGui.
- Add a TextChannelWindow instance as a child of the ScreenGui.
- Set the Target property to the TextChannel you want the window to display.
Each TextChannelWindow binds to a single TextChannel. To show multiple channels together, create a TextChannelWindow for each channel and apply your own show/hide logic. The Global channel isn't available as a target for a custom window.
The following code sample creates a custom chat window that displays the RBXGeneral channel:
local TextChatService = game:GetService("TextChatService")
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "TextChannelWindowDemo"
screenGui.Parent = script.Parent
local myTextChannelWindow = Instance.new("TextChannelWindow")
myTextChannelWindow.Size = UDim2.new(0, 400, 0, 300)
myTextChannelWindow.Position = UDim2.new(0, 10, 0, 10)
myTextChannelWindow.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
myTextChannelWindow.BackgroundTransparency = 0.5
local targetChannelName = "RBXGeneral"
local targetChannel = TextChatService:WaitForChild("TextChannels"):WaitForChild(targetChannelName)
if targetChannel and targetChannel:IsA("TextChannel") then
myTextChannelWindow.Target = targetChannel
end
myTextChannelWindow.Parent = screenGuiShow a custom channel only in its own window
By default, the default chat window renders messages from every TextChannel, so a channel you show in a custom TextChannelWindow also appears in the default window.
To show a custom channel only in its own window:
- In the Explorer, select ChatWindowConfiguration under TextChatService.
- For each custom channel, create a TextChannelWindow and set its Target to that channel.
The following example shows a custom Guild channel that appears only in its own window:
-- Prerequisite: TextChannelDisplayMode is set to DefaultTextChannels in Studio.
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local playerGui = Players.LocalPlayer:WaitForChild("PlayerGui")
-- Scripts can read the property at runtime, but can't change it.
local config = TextChatService.ChatWindowConfiguration
if config.TextChannelDisplayMode ~= Enum.TextChannelDisplayMode.DefaultTextChannels then
warn("Guild messages will also appear in the default chat window.")
end
local guildChannel = TextChatService:WaitForChild("TextChannels"):WaitForChild("Guild")
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "GuildChat"
screenGui.Parent = playerGui
local guildWindow = Instance.new("TextChannelWindow")
guildWindow.Size = UDim2.new(0, 400, 0, 300)
guildWindow.Target = guildChannel
guildWindow.Parent = screenGuiKeep these behaviors in mind:
- You can set TextChannelDisplayMode only in Studio or from a plugin. Scripts can read it at runtime but can't change it.
- The property exists only on ChatWindowConfiguration. TextChannelWindow doesn't need it because it already shows a single channel through Target.
- Channels created at runtime follow the current mode when they appear. Default channels created at runtime, such as Team and Whisper, still appear in the default window.
Migrate chat-triggered admin commands
Whether you need to update your admin commands depends on how they are triggered:
- Commands triggered from chat must use TextChatCommand.
- Command handling that reads raw chat text no longer works. This includes MessageReceived, Chatted, or anything else that inspects TextChatMessage content.
To migrate:
- Identify admin commands in your game that currently parse raw chat messages.
- Create a TextChatCommand for each command.
- Define the command's trigger keyword and callback logic.
For an example, see Custom text chat commands.
FAQ
Nothing changes in your game unless you set PlatformIntegratedChat to Enabled.
No. Policy for those surfaces is unchanged: they can't be used for two-way communication between players, they need rate limiting of at least 1 minute, and they are subject to moderation.
No. This update covers TextChatService only.
No. When PlatformIntegratedChat is Enabled, no API returns player message content on the client or server. Moderators in your game can still use read-only chat permissions to view chat. Players can also rely on Roblox's abuse reporting and on safety tools such as muting and blocking.
No. If your game uses the default Roblox chat with no customizations, you don't need to take action and shouldn't see a change.