Platform-integrated chat

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:

FeatureUnsupported APIsWhat to use instead
Chat messages and displayTextChatMessage.Text, TextChatMessage.TranslationMigrate your custom chat GUI to TextChannelWindow. Set Target to a TextChannel. Users can send and receive messages automatically.
Chat prefixesTextChatMessage.PrefixTextNot supported. If your game requires prefixes, don't enable platform-integrated chat yet.
Presets / chat wheelsTextChannel:SendAsync()Use Quick Words creator customization to add relevant phrases to chat.
Moderation / admin commandsOnIncomingMessage, Player.ChattedUse 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:

  1. Open the Explorer window.
  2. 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:

  1. Create a ScreenGui in StarterGui.
  2. Add a TextChannelWindow instance as a child of the ScreenGui.
  3. Set the Size and Position properties to place the window where you want it.
  4. 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:

LocalScript in StarterGui
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 = screenGui

Show 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:

  1. In the Explorer, select ChatWindowConfiguration under TextChatService.
  2. In the Properties panel, set TextChannelDisplayMode to DefaultTextChannels.
  3. 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:

LocalScript in StarterPlayerScripts
-- 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 = screenGui

Keep 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:

To migrate:

  1. Identify admin commands in your game that currently parse raw chat messages.
  2. Create a TextChatCommand for each command.
  3. Define the command's trigger keyword and callback logic.
  4. Remove any code that reads Text or listens to Chatted for command handling.

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.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.