starterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false) does not remove the chat icon

Problem

Ever since the update last night, I’ve noticed that the default chat icon on the new CoreGui UI does not get removed when starterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false) is executed from a script in game.ReplicatedFirst. This is happening in both Studio and the live game. The Roblox chat interface itself is removed though. This JUST started happening.


Additional Information

Parameter Value
Problem Area Engine
Problem Component UI
First Noticed 19 April 2025
Priority Medium
Impact HIgh
Annoyance Level High

The beta features that I have enabled are as follows:

  • Assistant Preview
  • Texture Generator

As for plugins, I have a bunch that are installed, but very few are enabled. The ones that are enabled are listed below with links to their details page on the Roblox store website:


Expectations

What I expect to happen is that when the aforementioned statement is executed, all aspects of the default Roblox chat are removed.


Visuals

image


Reproduction

To reproduce the issue, perform the following steps:

  1. Create a new baseplate in Studio.
  2. Create a local script in game.ReplicatedFirst that contains the aforementioned statement.
  3. Play test
  4. Observe results
3 Likes

image
It seems to work fine for me.

local starterGui = game:GetService("StarterGui")
starterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false)

Nope, nvm, after a few tests, it seems to hide the chat icon sometimes and not sometimes but the chat interface is indeed always removed.

But, local starterGui = game:WaitForChild("StarterGui") seems to work but it is not the standard way of accessing StarterGui.

I have the same probelm and this really is annoying because I have a custom chat system that doesn’t use that button so its just there taking up space! And also for games that disable chat they are gonna have that button there but it does absolutely nothing! I hope there is a fix for this.

1 Like

Same issue here, it’s bizzare as you can’t access chat at all but the icons still exist.

Agreed. And no response from Roblox on this either. Maybe I should send in a ticket through the web interface to get someone to look at this.

1 Like

Hello, thank you for the bug report. We are investigating internally. We will post an update when the issue is resolved.

3 Likes

I suggest you to do it right now. Is it really that hard to just set the icon’s “Visible” property boolean based on the second argument of SetCoreGuiEnabled call? :smile:

1 Like

Well, considering that this is seems to be affecting everyone, I would think this would be a higher priority than just a blip on the radar.

2 Likes

Sad that all TextChatService related bugs got the exact same response. I wonder what are they actively working on then. If it’s about improving the performance, then I guess they’re doing a bad job there, because everytime I test it, I notice the exact same results as before.

1 Like

Hey! If anyone else is still having problems, I’ve released a faithful recreation of TextChatService that addresses this issue. OpenTextChatService - Open-Source Implementation of TextChatService. This is on top of a bunch of other bugs and performance issues with TextChatService that I’ve addressed. If that isn’t your jam, the following snippet is a simplified version of what I have included in my resource. Just place a local script in ReplicatedFirst and any calls you make with SetCoreGuiEnabled should work. :wink:

--//===================== Services =====================-//-
local StarterGui = game:GetService("StarterGui")

--//===================== Utility =====================-//-
local GetCoreGuiEnabled = function(coreGuiType: Enum.CoreGuiType) : boolean
	return StarterGui:GetCoreGuiEnabled(coreGuiType)
end

local SetCoreGuiEnabled = function(coreGuiType: Enum.CoreGuiType, enabled: boolean): ()
	StarterGui:SetCoreGuiEnabled(coreGuiType, enabled)
end

local GetCore = function(paramaterName: string): any
	local s = false
	local v
	repeat s = pcall(function() v = StarterGui:GetCore(paramaterName) end) if not s then task.wait() end until s
	return v
end

local SetCore = function(paramaterName: string, value: any): ()
	local s = false
	repeat s = pcall(function() StarterGui:SetCore(paramaterName, value) end) if not s then task.wait() end until s
end

--//===================== CoreGuiChatConnections =====================-//-
local chatWindowVisibilityChangedBindable = Instance.new("BindableEvent")
local chatWindowVisibilityChanged = chatWindowVisibilityChangedBindable.Event
local chatWindowVisibilityBindable = Instance.new("BindableEvent")
local chatWindowVisibility = chatWindowVisibilityBindable.Event
local messagesChangedBindable = Instance.new("BindableEvent")
local messagesChanged = messagesChangedBindable.Event

local db = 2
local VisibilityChanged = function()
	local active = GetCore("ChatActive")
	local coreGuiEnabled = GetCoreGuiEnabled(Enum.CoreGuiType.Chat)
	local visible = active and coreGuiEnabled
	chatWindowVisibilityBindable:Fire(visible)
	if visible then messagesChangedBindable:Fire(-1) end
	if db < 2 then db += 1 return end
	db = 0
	SetCoreGuiEnabled(Enum.CoreGuiType.Chat, not coreGuiEnabled)
	SetCoreGuiEnabled(Enum.CoreGuiType.Chat, coreGuiEnabled)
end

chatWindowVisibilityChanged:Connect(VisibilityChanged)
SetCore("CoreGuiChatConnections", {["ChatWindow"] = {["ToggleVisibility"] = chatWindowVisibilityChangedBindable, ["SetVisible"] = chatWindowVisibilityChangedBindable, ["TopbarEnabledChanged"] = chatWindowVisibilityChangedBindable, ["CoreGuiEnabled"] = chatWindowVisibilityChangedBindable, ["VisibilityStateChanged"] = chatWindowVisibilityBindable, ["MessagesChanged"] = messagesChangedBindable}})
VisibilityChanged()

Hope to see this bug addressed properly!