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

Okay, I see it *kind of. There is no direct specification for cross-server messaging, however you can already get 90% of the way there by CanUserChatAsync and GetNonChatStringForBroadcastAsync

*because this is very blurry waters, and there’s a difference between cross-server broadcasts and cross-server chats. You can ask Roblox to clarify on that but 90% of “realtime chat systems” don’t scale off MessagingService anyways due to experience limits, and broadcasts are often the wider use case.

The API does actually handle filtering, and the issue I see with the API is that there is no way to have a TextSource with a UserId not in the server.

There are existing filtering APIs. See TextService:FilterStringAsync().

As I clarified in another post, it is fine if this is integrated behind existing TextChatService APIs and it is not a “conversation”. Roblox differentiates this in the post:


If possible, you should open a feature requets for this API to allow UserIds not in the current server, but rather in the experience. I think it’s fair criticism, as I honestly did not originally notice you couldn’t add users from other servers.

First of all - most people aren’t complaining about the UI itself, read the replies.

Second of all:

Not unless you implement it manually.

Third of all:

No. It is referring to the “Chat” service. Not an old version of TextChatService, that doesn’t make any sense.

Then of course, we have this.

This right here is the biggest problem, everything else can be hand waved except for this. Because no, it does not. If you read some of the replies you would see a lot of complaints primarily about the performance, because it really is that bad.

TextChatService has a performance penalty so severe that it’s virtually unusable in certain games because it can have as much as a 15ms penalty on it’s heartbeat function, and it does not take a whole lot for this massive time penalty to manifest.

Not only that, but TextChatService misses the bar on a lot of very important features that the normal chat has, I would go over these but they are too innumerable and several other people have already pointed out a few that are missing in this thread.
Do note that a custom solution is not a valid response to the lack of features when a previous iteration of the system had those features built in.

All of Roblox’s CoreScripts are written entirely in Lua, save for the C++ hooks (which typically aren’t designed specifically for CoreScripts). That includes the handling of TextChatService (
Script_CoreScripts/ExperienceChatMain). But it’s actually more fundamental than that because there’s still a performance cost to TextChatService over legacy chat even if the respective scripts are DISABLED.

This is a bug that has existed for more than a year and Roblox still has not fixed and it results in the performance penalty being significantly magnified on consoles (Since they have a weaker CPU, and even though they don’t have chat, the TextChatService still is loaded). If it were fixed, and a few of the loose ends rounded out, literally nobody would care about this migration, but the system is literally underbaked and flat out not ready to supersede legacy chat.

2 Likes

what do you think i meant by old version of TextChatService?

Ok so actually I kind of messed up with this one and did not validate when it was mentioned to me. However you still can implement it yourself and no one is stopping you.

CPU flamegraph w/ no scripts in studio (so it’s optimize1)

we have much bigger corescript issues than ExperienceChatMain eating up a grand total of like, 16% of the 70ms that CoreScripts eat up after multiple seconds

EDIT: It appears that there are no per-frame jobs relating to TextChatService on the server. (Real, production game using TextChatService)

I think that these are the performance “bottlenecks” you’re talking about


and yes, these are kind of annoying, but you are never going to be so tight on optimization that these are posing a problem. no one is playing your game on a 300hz monitor, and you can definitely reach acceptable FPS on mobile without that being a concern (I did it)

2 Likes

You could’ve said “Chat” service by name but I suppose that’s getting into semantics, not really a good criticism on my part.

Sure, a lot of the CoreScripts are pretty bad, that doesn’t excuse this being slower than the previous iteration, plus, in general, a lot of the CoreScripts have been getting better about how much time they’re eating up on the CPU.

I’ve also made a mistake here - ExperienceChatMain being the primary bottleneck with TextChatService actually was fixed, however, PlayerBillboards (which was already a problem before) is still noting a significant performance loss over legacy chat.

Here’s an example with some activity:


(This screenshot is from the primary thread documenting bad performance with TextChatService, which you can find here.)

The problem here is just in general - we have been routinely seeing unfixed issues with TextChatService and despite Roblox engineers being aware of them none of them have actually been properly addressed, these are not “freak cases” because this is happening to many, many developers, and most note these issues going away either mostly or completely when using legacy chat.

Yeah that was a mistake on my part - the job is called “heartbeat”. Not an actual connection to RunService.

I do understand that more complicated jobs fundamentally require more CPU processing to be done, however, the performance disparity here versus previous iterations of chat, especially given that we really haven’t seen that much improvement in the functionality of chat, and considering the bugs, well, there’s a bit to be desired.

I should probably note that I have no issue with the fundamental idea of migration to TextChatService, and I actually think it’s a good idea (new, more expandable systems, usually should be prioritized more than old ones), Roblox engineers definitely have spent a lot of time working on this, but given the fact that many of us haven’t seen adequate improvement of course means that there’s obviously going to be some pushback, and I think this should be delayed until these issues are addressed.

1 Like

With Chat, I could simply just fire “Chat:Chat()” when I wanted to make a NPC say something (SEEN BY ALL PLAYERS) and that would be the end of it but TextChatService doesn’t do the local stuff automatically. Can you PLEASE PLEASE PLEASE just add a function that does basically the same thing that Chat:Chat() does without having to go through five thousand hoops going through everything and rescripting everything just so they work with a local script or something???

2 Likes

TextChatService also has those same security issues + they threatened to moderate games

Bypass just means copying the old chat system to use past april.

1 Like

I have not encountered any of these issues and I develop a few games using TextChatService/old chat, so this is not my personal experience. I think it is fair criticism, though, which this thread sorely lacks.

Yes, this is actually true for some games, however it’s not just exclusive to TextChatService and I actually hate it. Even if you don’t use TextChatService it still takes an annoyingly long amount of time for some ungodly reason that I can’t actually figure out why

I think it is a reasonable conclusion that it could be tied to TextChatService so I will come to an agreement with you there.

1 Like

Just as closing I would like to apologize if I came off as aggressive in my posting, it’s definitely not my intention to be but looking back I feel like on some things I was being a bit passive aggressive.

I do agree that in general PlayerBillboards is a pretty bad script, while I myself have never seen performance implications from TextChatService vs legacy chat (since my current game is low player cap servers), I have noticed PlayerBillboards in general taking a long amount of time, though I couldn’t note what is causing that.

I also do agree that a lot of the criticism in this thread was definitely jumping the gun, there are some concerns that people have that aren’t really “real” so to say. I’ve tried to keep everything as objective as I can from what I’ve seen and what I’ve experienced, though. (Even if I’m still wrong in some cases.)

1 Like

HI, any info on the addition of TextChannels? Perhaps with team-only text tabs like the old chat system has. We have been eagerly waiting for this on the new chat ui.

I have MAJOR CONCERNS with these things considered chat.

Let me start with direct messages between users and chat window with communication across users.
There’s this thing called trading, and I want a private chat window to be FRONT AND CENTER so I can make negotiations for example in games like Pet Simulator.

And then there’s announcements from Admin Commands. Those systems are put in place to GET ATTENTION OF PEOPLE WHO MIGHT NOT LOOK AT CHAT/HAVE IT CLOSED!

I understand legacy chat and custom chat going, as legacy chat has vulnerabilities, and custom chat has its quirks, but we need a chat window in the center API for direct messaging for trading first, and an announcement API for Admin Commands before these can be put in place.

This is something I would start a secret revolt against if these decisions are not reconsidered / new API’s are not put into place to fix these issues.

1 Like

This is a W update. TextChatService can only improve from here on out.

1 Like

I’m happy with this as long as all the bugs from: TextChatService is now the default for new experiences! are fixed. There’s been no replies from the development team there for over a year now.

How do I migrate???

Will yall fix the chat bubble bug on npc’s?

1 Like

most of these things i admit i can figure something out for, but please please PLEAAASEEE add an official way or at the very least an “official workaround” for cross-server messaging!!! a key feature of my game is allowing you to send cross-server messages with a gamepass! without proper tooling to ensure it’s compliant, i’d either have to rip away tools that people literally paid for, or bend the rules a little and hope whatever filtering solution i come up with is considered “enough”.

not to mention the fact that i literally just spent a month and a half making a proper, realtime cross-server direct messaging system for an upcoming update, just to have it deemed illegal with no workaround before the update can even come out… the timing is just painful here… :smiling_face_with_tear::smiling_face_with_tear::smiling_face_with_tear:

2 Likes

privated games (from my experience) generally do not seem to be moderated, except in some cases where the violation is extreme

i have a questing dose that mean xbox wont have no text chat?

We’ve been using TextChatService for a long time.

Overall it’s decent but there’s still plenty of things the legacy chat does better. Chat tabs is the major one for me. Apparently (hopefully) it’s coming now, so that should be good…

There’s plenty of other issues that people mentioned in this thread. Please look into all of the bug reports for TextChatService. I can assure you there’s plenty.

Unfortunately I doubt they’re gonna fix/add much other things beside the channel tabs. Knowing how they’ve (seemingly) neglected the reports.