Is it possible to use the default chat scripts but have a custom chat?

I’m trying to create a custom chat, which I’ve done before, but I’ve written my own code. However, I was wondering if there’s a way to take Roblox’s chat scripts and have it work? Only problem I can see with this though is when chat scripts get updated I’d have to continuously get the newest scripts

pretty sure you can?? take this as a grain of salt but i was able to freely edit things like chat bubbles and etc, you won’t know until you try

I don’t know where to start tho. I’ve forked the chat before, I’ve added custom tags, etc. But never changed the UI/position of the chat

You can just put a localscript that can edit all these or something?

I’m not entirely sure either, but I’m pretty sure that the ClientChatModules -> MessageCreatorModules folder contains all the scripts responsible for the actual creation of the chat UI and all of the messages inside of it. I’d start by looking at those.

Edit: DefaultChatMessage is responsible for the creation of messages, while Util contains the functions that actually create the messages, as well as other stuff such as fades. I’d recommend to check those two out. I’d also recommend checking out the LocalScript titled ChatScript as well as its descendants as those also appear to be responsible for some of the UIs.


Honestly speaking, with these type of questions experimenting by yourself is the best thing you can do.

1 Like

Indeed, especially with the Roblox chat system and how everything is organized, it’s important to look through the code and discover how it works yourself (even if it’s extremely complex like the chat is).

1 Like

Update #2: I just discovered a function titled CreateGuiObjects inside of ChatScript -> ChatMain -> ChatWindow (line 70), which seems to create all of the UIs right out of the gate. That might be what you’re looking for. It’s a pretty big function, spanning all the way to line 434.

1 Like

I tried something like this, as I really don’t wanna fork the chat in anyway. However, since the Frame itself AnchorPoint is 0, 0 means it basically gets put off the screen :confused:

Chat:RegisterChatCallback(Enum.ChatCallbackType.OnCreatingChatWindow, function()
	return {	
		DefaultWindowPosition =, 10, 1, -10),


StarterGui:SetCore('ChatWindowPosition',, 10, 1, -10))

Did the same thing :confused:

If you don’t want to move the anchor point by forking the scripts, what you could do is account for the AnchorPoint and change where you are moving the chat window accordingly. You could guess and check or move the chat UI around in play mode (as the changes won’t save if changed in play mode).

well I was thinking I could do some math stuff and work out how to position it that way. Looking at these

module.MinimumWindowSize =, 0, 0.25, 0)
module.MaximumWindowSize =, 0, 1, 0) -- if you change this to be greater than full screen size, weird things start to happen with size/position bounds checking.
module.DefaultWindowPosition =, 0, 0, 0)
local extraOffset = (7 * 2) + (5 * 2) -- Extra chatbar vertical offset
module.DefaultWindowSizePhone =, 0, 0.5, extraOffset)
module.DefaultWindowSizeTablet =, 0, 0.3, extraOffset)
module.DefaultWindowSizeDesktop =, 0, 0.25, extraOffset)

I was hoping to get the size of the frame, and do something like this

StarterGui:SetCore('ChatWindowPosition',, 10, 1 - ChatFrameSize, -10))

But I don’t know how to easily retrieve its size, as there’s 3 different size options

Editing can’t really work, like ye I can change its position. But if I try changing other things, like changing colours/transparency/etc. As when I hover over the chat, it changes back to the default stuff

local Players = game:GetService('Players')

local Player = Players.LocalPlayer
local PlayerGui = Player:WaitForChild('PlayerGui')

local ChatGui = PlayerGui:WaitForChild('Chat')
local Frame = ChatGui:WaitForChild('Frame')

local ChatBarParentFrame = Frame:WaitForChild('ChatBarParentFrame')
local ChatChannelParentFrame = Frame:WaitForChild('ChatChannelParentFrame')

Frame.AnchorPoint =, 1)
Frame.Position =, 10, 1, -10)

ChatChannelParentFrame.BackgroundTransparency = 1

ChatBarParentFrame.Frame.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
ChatBarParentFrame.Frame.BoxFrame.BackgroundTransparency = 1

I see, your better off editing it from the module itself then.

There doesn’t seem to be a way to do that without forking though :confused:

I don’t really understand what this thread is trying to say but yes, it is possible to use both, though you shouldn’t. Stick to one chat form; either write your own system or modify the Lua Chat System. The LCS is designed to be highly customisable through use of outside scripts or forking, as well as modular. You can pull pieces out of the box or use the whole system with modifications.

The Lua Chat System probably doesn’t change enough that it warrants concern with forking, but you will be responsible for keeping your fork up to date. A good way to track changes easily is through a location that allows you to see file differences. For example, you can use Blame on files in CloneTrooper1019’s Roblox Client Tracker GitHub repository.

Is there something specific you want to change? Behaviours? Interface? The whole system? The thread isn’t the most clear as to what you want to do, but I’m using another thread you wrote as reference that you want to change the interface.

While this may not fully answer your question, I find it’s a valuable resource that could help you in times of needing to change only smaller-end things like settings without wholly forking. Bringing out my old tutorial thread on chat settings: