Hi Creators,
Chat is essential to the Roblox experience, and we’re committed to ensuring everyone has a safe experience while communicating on the platform. As part of that effort, we are making changes to how in-experience chat works on our platform:
-
Legacy chat system will be removed by April 30th, 2025.
-
Starting November 30th, 2024, new experiences can not be created that use the legacy chat system.
-
We’re updating our Community Standards to require that creators use TextChatService, creators will have until April 30th, 2025 to migrate.
-
If your in-experience chat is built using a modified version of legacy chat system or a custom chat solution not powered by TextChatService,
- Action needed: You must integrate with CanUserDirectChatAsync (coming by November 15th) API by January 30th, 2025. This API checks whether a user can receive or send direct chats.
Why we are making these changes
We are implementing a parental controls update to give parents more control over their children’s in-experience chat. Currently, TextChatService and standard legacy chat systems will support these settings by default but modified legacy or fully custom chat solutions will not, so we are introducing an additional API, CanUserDirectChatAsync, which controls whether users can see direct chat for creators using these systems to integrate. It is important that all experiences on Roblox respect parental settings.
Our rationale for requiring you to migrate to TextChatService goes beyond the parental controls update:
-
As laws and regulations evolve, we want to work with you to ensure your experiences comply with these local laws.
-
We plan to continue evolving our safety platform to ensure we build the most robust safety solutions, especially for our youngest users.
-
Migrating everyone to a Roblox-maintained TextChatService helps us ensure that we can make the needed changes to comply with these requirements on your behalf without having you make changes to your integration.
Ultimately, in the long run, we can save you time from constantly implementing new requirements.
We launched TextChatService and have been focused on improving it to solve your most common use cases including real-time chat translation which helps drive experience engagement. Additionally, we will be adding ChannelTabs and UI gradients support next week. We’re continuing to focus on improving its performance, especially for bubble chat.
Experiences using a modified legacy chat system or custom chat must integrate with new APIs
Below, we’ve outlined a few scenarios and what actions creators will need to take. We plan to work with you on these changes and provide you with resources on how to migrate.
Scenario 1: You are using the standard legacy chat system - Migrate to TextChatService by April 30th, 2025
If you haven’t modified or forked the legacy chat system, and are using the standard version, you must migrate to TextChatService by April 30th, 2025. The legacy chat system will be removed on that date. You won’t need to take any action to integrate with UserChatAsync or UserDirectChat as the standard version of legacy chat will already support those APIs.
You can verify if you are using the standard unforked version by looking at your explorer and confirming that there aren’t any copies of ChatScript or ChatServiceRunner in Chat, StarterPlayerScripts, or ServerScriptService. Additionally, check that the LoadDefaultChat toggle is set to “true,” as seen in the screenshot below.
Scenario 2: You modified or forked the legacy chat system - integrate APIs by January 30th, 2025 and migrate to TextChatService by April 30th, 2025
Your experience should be already using CanUserChatAsync. You must integrate the CanUserDirectChatAsync APIs by January 30th, 2025. If you integrate those APIs, you can continue using those systems until April 30th, 2025, when you must migrate to TextChatService.
We will make CanUserDirectChatAsync available by November 15th, 2024. We will send additional communications to those of you using a forked version of the legacy chat system.
Scenario 3: You built a chat integration that doesn’t use either the legacy chat system or TextChatService - integrate APIs by January 30th, 2025 and migrate to TextChatService by April 30th, 2025
You must ensure that your chat implementation uses the CanUserChatAsync and CanUserDirectChatAsync APIs by January 30th, 2025. If you integrate those APIs, you can continue using those systems until April 30th, 2025, when you must migrate to TextChatService.
Integrating with CanUserDirectChatAsync API
The CanUserDirectChatAsync API is used to determine if a user is allowed to send or receive direct chats. We’ll provide more documentation with the launch of CanUserDirectChatAsync API by November 15, 2024.
Here’s an example of how you could potentially use the CanUserDirectChatAsync API to check if users can be in direct chat with each other.
local directChat =TextChatService:CanUsersDirectChatAsync(UserId, { AnotherUserId })
-- check if we have any eligible participants
if #directChat > 0 then
local directChannel = Instance.new(“TextChannel”)
for _, participant in directChat do
directChannel:AddUserAsync(participant)
end
return directChannel
end
warn(“Could not create Direct TextChannel. Not enough eligible users.“)
return nil
Note: This code is not final but meant to be illustrative of how the API will work.
Tools and documentation to ease your migration
In the upcoming weeks, we plan to introduce improved documentation for TextChatService, focusing on helping you solve use cases. We’ll plan to answer your questions and work on specific guides focused on migration.
Team Chat is being removed from Studio on January 30th, 2025
In keeping with our effort to drive safe chat on the platform, we’re removing support for Team Chat from Studio by January 30th, 2025, as it does not integrate with parental controls. We believe that creator team communication within Studio will be better served by the ability to annotate and add comments directly within the workspace. We plan to enable annotation and comments early next year.
Thank you, and let us know if you have any more questions.
FAQs
How can I tell if I’m using TextChatService?
-
If your explorer contains TextChatService and the ChatVersion=TextChatService, you are using TextChatService. We will be sending out emails and messages to creators who are not on TextChatService to notify you of the need to migrate.
What happens if I have a custom or modified legacy chat in experience and I don’t take action by January 30th, 2025?
- We may moderate experiences that fail to comply with these requirements by the January 30th, 2025 deadline. We will allow creators the opportunity to comply so their experiences can be reinstated. We will also take action on accounts of creators who repeatedly fail to comply with the requirements.
What will happen to my experience if I continue using the unmodified legacy chat system and don’t migrate to TextChatService by April 30th, 2025?
-
We will attempt to automatically migrate your experience to TextChatService, and any customizations you have developed may not work as expected.
Many experiences have been created over the years that rely on the Legacy Chat System to function properly. Some of these experiences may have deep integrations with their gameplay code where outright preventing the Legacy Chat System scripts from running would break their entire experiences. Some of these experiences may have developers not active on the platform now.
Roblox is committed to preserving these legacy experiences. For transparency, one avenue we are researching is the impact of having methods that custom chats rely on such as TextFilterResult:GetChatForUserAsync return an empty result. Most custom chats at this time are likely using either TextFilterResult:GetChatForUserAsync or Chat:FilterStringAsync and the validity of the use cases these APIs provided will have diminished after April 30th, 2025.
We aim to make additional changes that prevent the Legacy Chat System from functioning, keeping these experiences compliant with the new policy. We plan to do this in a way that protects both the experience and the experience owners. We will have another announcement in the near future with more details on what to expect.
We recommend migrating to TextChatService before the deadline to prevent this from happening.
How are chats defined?
-
In this case, we define chats as user-to-user communication within your experience, either in a one-to-many or one-to-one context. To be considered chat, the intent would be to facilitate a responsive conversation.
Items that would be considered chat:
- Direct messages between users
- Chat window with communication across users
- Team-specific messages
- Announcements from “Admin Commands”
Types of items that would not be considered a chat are:
- System messages sent from the experience
- Moderation audit logs
- Moderation messages
- Individual comments on posts in an experience.
- However, if the comments support a reply feature, these replies would be considered a conversation and thus would be subject to this policy
- Naming a pet
- A roleplay name
- Writing a post on a bulletin board
- Any user-generated text unrelated to a conversation
For types of user-inputted information that can be seen by other users, you are still required to ensure that user-inputted text that doesn’t go through our TextChatService does go through the TextFilter.
How can I start auditing my code for custom chats right now?
-
We recommend using the “Find All” feature in Studio (default: ctrl+shift+F) and searching for usages of TextFilterResult:GetChatForUserAsync or Chat:FilterStringAsync as it is likely these APIs were previously used to facilitate a custom chat feature.
If you have identified that your code was using these APIs for a non-chat feature, consider migrating to either TextFilterResult:GetNonChatStringForBroadcastAsync or TextFilterResult:GetNonChatStringForUserAsync — whichever is more appropriate for your use case — instead.
Intentionally using these TextFilerResults inappropriately for a chat feature may lead to your experience being moderated after the April 30th deadline.
Why are you making us invoke new APIs with the legacy chat system if you are going to remove the legacy chat system?
- Our goal is to ensure that all experiences comply with our parental controls. We’re implementing these APIs as an interim solution for creators who may need more time to migrate from legacy chat to TextChatService.
Can I customize the default TextChatService UI?
- Yes, you can customize the look of the default chat window in Studio including fonts, colors, and sizes. Additionally, you can customize the messages using rich text, coloring usernames, and adding tags like VIP status. You can read more about how to customize in-experience chat here.
Can I make my own UI with TextChatService?
- Yes, you may disable the default TextChatService UI and replace visual elements with your designs that best integrate with your experiences. Roblox’s policy is that all messages are sent and delivered through TextChatService’s TextChannels. Developers have the option and freedom to render those messages as long as they comply with our Community Standards.
Can I send system messages with TextChatService?
- Yes, here’s an example of how to send system messages.
Can I customize the chat bubbles?
- Yes, you can customize the chat bubbles. Follow the guide here.
Can I create tabs in the chat with TextChatService?
- This is coming very soon. We expect to add this in the next few weeks.
Can I create UIGradients in chat with TextChatService?
- This is coming very soon. We expect to add this in the next few weeks.
What about older experiences that may not be actively maintained?
- We plan to email or message all impacted creators and work with creators to provide tools and education for migration.