Migrate to TextChatService: Removing Support for Legacy Chat and Custom Chat Systems

[Update] November 7, 2024


[Update] November 1, 2024


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.

    • [Updated Nov 1, 2024]: For experiences that do not migrate by this deadline, we will attempt to automatically migrate experiences that do not comply. If that is unsuccessful, we’ll attempt to disable chat for those experiences until the experience is migrated to TextChatService.
  • 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.

    • [Updated Nov 1, 2024] For experiences that do not implement this API by this deadline, we will attempt to automatically migrate experiences that do not comply. If that is unsuccessful, we’ll attempt to disable chat for those experiences until the experience is migrated to TextChatService

  • In rare cases, we may have to restrict access to the experience until the experience is migrated to TextChatService if auto-migration and disabling chat does not work.

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.

[Updated Nov 1, 2024] APIs for Managing Access to In-Experience Chat

Historically, we have had the CanUserChatAsync API for managing whether users can access in-experience chat. This capability has been built into TextChatService and the legacy chat system. If you’ve been using either of those systems, your chat should respect this setting. As mentioned above we’re introducing more parental controls to give even more granular control over whether users can direct chat in-experience. We’re introducing the new API: CanUserDirectChatAsync which will return whether a user can direct chat within experience. This API will be automatically integrated into TextChatService and standard, non-forked legacy chat system. However, creators that have forked legacy chat or built fully custom chat will need to integrate this manually. We spell this out in more detail in the scenarios below.

CanUserChatAsync API CanUserDirectChatAsync API
Usage Controls access to all in-experience chat Controls access to direct chat in-experience
Availability Live Coming November 15th, 2024
Built-into TextChatService Yes Yes
Built into standard Legacy Chat Yes Yes
Built into forked legacy chat Yes No
Built into custom chat that doesn’t use legacy chat or TextChatService APis No No

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 1: Example of standard, non-forked legacy chat system implementation

Scenario 2 [Updated Nov 1, 2024]: 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 [Updated Nov 1, 2024]: 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. CanUserChatAsync is used to manage overall in-experience chat, and CanUserDirectChatAsync is used for managing direct messaging. 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.

[Updated Nov 1, 2024] What happens if I have a custom or modified legacy chat in experience and I don’t take action by January 30th, 2025?

  • As mentioned above, we will do our best to try to auto-migrate your experience to TextChatService, but this will likely break any custom functionality you have implemented. If we cannot do so, we will disable chat in your experience entirely until you migrate to TextChatService. If for some reason, likely only in the case of custom chat that doesn’t use legacy or TextChatService, we can not migrate or disable chat access, we will restrict access to your experience.

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.

[Updated Nov 1, 2024] 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 and required to go through TextChatService by April 30, 2025:

    • Direct messages between users
    • Chat window with communication across users
    • Team-specific messages

    Types of items that would not be considered a chat are:

    • [Updated Nov 1, 2024] Announcements from “Admin Commands”
    • 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?

[Updated Nov 1, 2024] 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. Implementing this APIs, provides you with another 3 months to migrate if you need to do so.

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.
112 Likes
BetterChat V3 | Discontinued
Creating compliant Announcements from “Admin Commands” (:m / :h) using TextChatService
Integrate TextChatService:CanUsersDirectChatAsync or TextChannel:SetDirectChatRequester API to Comply with Settings
Bug Report: DefaultChatSystemChatEvents Infinite Yield Issue
When using TextChatService, show chat history when joining a game in the same manner that Lua Chat did
Basic Legacy Chat Rewrite for TextChatService
TextChatService disguised as Legacy Chat
Customized Chat, Giving a second life to the old beloved chat
Maintain support for old bubble chat and custom bubble chat handlers: throw out any plans of dropping support for pre-Roact bubble chat
A quick guide on how to use and migrate to TextChatService
Is a read-only console chat window ok?
How to get the old bubble chat
How to Archive Avatar Items
BetterChat V3 | Discontinued
Having issues with making system messages
Channel Tabs & UI Gradient Now Available in TextChatService
Integrate TextChatService:CanUsersDirectChatAsync or TextChannel:SetDirectChatRequester API to Comply with Settings
A roblox crossword game is back, please be aware
Is There Any Dangers to Adding Console Support To My Game?
Creator Roadmap 2024: End of Year Recap
Make textlabel bigger instad of text smaller
Introducing Updates to Our Safety Protections and Parental Controls
Weekly Recap: October 28 - November 1, 2024
In-game chat will occasionally not send messages on iOS devices
New Chat Filter Bypass Concern
How to change color of system message

This topic was automatically opened after 10 minutes.

I eagerly await the improvements. ExperienceChatMain is a royal pain for anybody trying to optimize game performance, and has been at least since April. If you guys are going to force us to use this system (and I understand why), it needs to work well.

98 Likes

Any chance Script_CoreScripts/ExperienceChatMain Very Slow could FINALLY be paid attention to before this is forced on everyone, crippling our games’ performance?

EDIT: Hiding bubble chats for specific players is also something we need before this migration takes place.

73 Likes

(Edit: “Announcements from Admin Commands” is now considered non-chat. All but the last sentence and point 3 before the next quote is out of date.)

Sorry but WHAT?! In the past, we have been given APIs to be compliant with our custom solutions, and now we are just told to “suck it up” and move to TextChatService. I could see using it as a backbone for normal chats, but forcing it to other use cases (like admin broadcast messages, commonly used in clan/security groups) has 3 problems:

  1. It is not obvious to people who will never see this post, which will be most developers on the platform. New developers won’t notice this years down the line and will immediately be non-compliant.
  2. How are we even meant to make this work reliably? Create and manage dozens/hundreds of text channels when we previously would just use simple RemoteEvents?
  3. How will moderation even handle this policy?! A text goes in, gets filtered, and gets displayed. How will moderation know if the game is compliant with TextChatService or not? A heavily stylized or weird chat risks game/account moderation because moderation picked incorrectly. Many non-compliant games will just face no action.

Games that actively rely on admins broadcasting messages (like Innovation Security) have to jump through insane hoops just to keep what we have, and games that don’t update will either break due to the incompatible APIs (Virtual Valley Games risked being in this position a year ago, since we relied on the chat APIs inline with character loading) or… actually, what happens to old games? Will they just become lost media as Roblox closes them down, or will the owner risk account moderation (Edit: later replies suggest games will be taken down, but the owner won’t face action. I hope moderation gets it right.)?

This change is like hammering a nail with the Death Star. It is a massively overcomplicated change with potentially disastrous consequences. Please don’t force this change on us. Give up the APIs we need to be compliant.

With the lockdown of custom chats that aren’t normal chat systems, how can we know this won’t be locked down long-term? I don’t want to implement roleplay names into a game just for someone to give Roblox a reason to ban them in a few months, and then take down my game. And what about people using usernames to dox people? Will presenting usernames have to go through TextChatService as well.

Are there any plans to provide any sort of compatibility layer for games that don’t fork the legacy chat but rely on the APIs? Games as new as a few months from now risk breaking due to incompatible APIs. The performance issues over the past year have steered people away from the TextChatService.

(Edit: Seems like it is a yes based on “Roblox is committed to preserving these legacy experiences.”? The means aren’t specified.)

So, if I don’t update my older games that I haven’t touched in 5 years, I risk account moderation - which potentially affects DevEx standing and knocks out Open Cloud API keys. That is insane. “Lost media” is a massive problem and Roblox is actively helping it instead of stopping it.

(Edit: Confirmed later on that games will be moderated, but not users. Still a concern about growing the pool of lost media.)

237 Likes

Finally, legacy chat is getting replaced for good :pray:
Thank you Roblox (no really THANK YOU)

Edit:
A lot of people are just misreading this announcement, so I just want to let you all know that games that still use legacy chat by April 30th, 2025, Roblox will forcefully add it themselves, that means old Roblox games that still use it ARE NOT GONNA GET DELETED, they will just be somewhat broken IF theyre using a modded legacy chat or use legacy chat api. (Unmodefied legacychats will just be using the new chat system)

25 Likes

this is the worst thing you could ever do.


Aside from that, the removal of legacy is a bad decision:

  • textchatservice does not provide everything that legacy chat has.
    things like different channels I stand corrected
  • textchatservice does not fit all types of games.
  • a lot of games (including top games) still use legacy chat.
88 Likes


Insane. Legacy Chat is so widely used and now roblox will spend time basically moderating developers for using it. What about old inactive games with it. So many systems and games have been developed around legacy chat. The new chat system is lacking so many of the legacy features, hence why so many people still use legacy chat.

76 Likes

I agree it’s kinda dumb in a way like this what if we don’t wanna migrate to the new chat system the legacy chat shows previously sent messages but the new one doesn’t so what’s the point, I don’t really feel like changing the old chat in some of my games

21 Likes

This is CRAZY, my game LIVES OFF legacy chat service, NOW YOU’RE IMPOSING US TO REMOVE IT? YOU want to MODERATE US DEVELOPERS?

48 Likes

this is just a terrible idea that will break hundreds of experiences
unfortunately it seems like these changes are due to legal issues, o well :confused:

41 Likes

What about games from inactive users, will they be content deleted for good? Are you seriously ruining preservation of your classic games like this?

41 Likes

I hope that until April 2025, they’ll have fixed all the bugs related to the New Experience Chat that are not present in the old one, otherwise it’s going to be dramatic for a few games.

11 Likes

This is a really needed feature as a lot of games rely on that for easy communication between multiple teams. Pinewood Computer Core for example

There should also be a command to easily switch between the channel you are currently sending messages to just like the legacy chat did.

30 Likes

Hey, I understand why this update happens, but could you NOT moderate people for not switching over? Just ban the game and give a warning or something?? OR atleast send us emails with games whose chat could not be changed?

I understand this is a necessary change for roblox, however, it’s quite unfair if people get banned because they don’t switch. I have atleast 500 roblox places on my profile, some of which nobody even plays because they’re closed. It would be a very big pain for me to change the chat in all of these places, so please consider NOT giving bans for these games!

I beg you not ban people for not changing. A warning or inbox message with these games should be enough.

30 Likes

We’re going to be adding ChannelTabs to TextChatService next week

24 Likes

They are gonna moderate experiences that use Legacy Chat? What the heck Roblox?!

21 Likes

why ban every game the had the old chat system?

41 Likes

Will you guys fix bugs that were not present in the old chat system?

For example: [CoreScript] ExperienceChat, Player's TargetTextChannel gets overwritten away from any channel, if their Team Property changes

It is a really accurate description that should address the exact location of what may causes this issue.

 

Another thing that isn’t present in the old chat system, is to join a game and see previous chat messages.

17 Likes

Will you allow us to have more chat width ranges, & disable rounded corners to at least it HAVE the new chat look similar to the original one? The current chat design won’t fit every game.

21 Likes