Roblox TextChatService May 2027 Migration Lock List - 2026
![]()
If you searched roblox textchatservice migration after Roblox’s late-October chat announcement, you do not need another panic thread. You need a dated lock list you can run this month — before May 2027 makes the updated TextChatService the only path for custom chat.
Roblox posted Important TextChatService Updates: How to Test and What’s Next (Oct 2026). Key takeaways: start testing now; required migration in May 2027; custom chat moves to native systems (TextChannelWindow, TextChatCommand / commands, Quick Words, native prefixes early 2027); message content is no longer accessible in code. Opt in by setting TextChatService.PlatformIntegratedChat to Enabled in Studio. Docs: platform-integrated chat. The Weekly Recap: October 19–23, 2026 amplified the test-now message. Related platform tooling context: Roblox Cube.
This page is the deadline lock list. It is not the Steam Winter Sale prep worksheet (store sale lock). It is not terrain Expanded Terrain or Prompt-to-Avatar. Those own different Oct surfaces. This URL owns TextChatService → May 2027 gates.
Why this matters now
Custom chat UIs that read TextChatMessage.Text, parse Player.Chatted, fake radios with free-text, or ship chat wheels via SendAsync will not survive the platform-integrated model unchanged. Roblox wants consistent safety tools (report/mute) and native feature rollouts. Phase 0 is already live: chat between users must go through TextChatService; off-TCS conversation surfaces can draw enforcement. Phase 1 (now → Feb 2027) is the test window. Phase 2 (Feb 2027) auto-opts games in (with opt-out details to come; property can be Disabled until about March 2027 per docs/table language). Phase 3 (May 2027) is the hard custom-chat cutover. Waiting until April 2027 to discover empty strings in production is how Discord becomes a war room.
Direct answer: Inventory chat and UGC text this week. Enable PlatformIntegratedChat on a copy place. Grep for unsupported APIs. Migrate UI to TextChannelWindow, commands to TextChatCommand, presets to Quick Words. Do not plan on reading message text in Luau after opt-in. Default Roblox chat with no customizations: no action expected. Re-read the DevForum thread monthly — the roadmap is moving (Oct 22 feedback table; Oct 28 webinar note).
Who this lock list is for
| Audience | Use it to… |
|---|---|
| Beginners | Know May 2027 + “test Enabled in Studio” |
| Developers | Grep APIs, migrate windows/commands, empty-string traps |
| Creators | Paste a Discord brief with phase dates |
| Companies | Diligence — privacy (no message text) + dated cutover |
Time: 40 minutes to inventory. First opt-in lab: 2–4 hours. Full migration: weeks for heavy custom chat.
Honest limit: DevForum + create.roblox.com are authority. Feature dates (prefixes Feb 2027, etc.) can shift — re-check before you freeze a sprint plan.
Non-repetition
| URL | Job |
|---|---|
| Steam Winter Sale lock worksheet | Different deadline (store sale) |
| Terrain materials what-changed | Oct terrain GA |
| Prompt-to-Avatar what-changed | Avatar Studio Beta |
| Roblox Studio guide | Platform hub |
| This URL | May 2027 TextChat lock list |
Pair a Discord paste with 25 free game development Discord servers. If Studio networking fails under a corporate proxy while you chase docs, keep package manager HTTP 403 help for the network path.
The one-paragraph version
Roblox is moving text chat to a platform-integrated TextChatService model. Now: all user↔user chat must use TCS; off-channel conversation UGC should be removed, routed, or rate-limited (≥1 minute). Now–Feb 2027: opt in with TextChatService.PlatformIntegratedChat = Enabled (Studio-only property) and test. Message text APIs return "" (not nil) + warnings when enabled. Migrate custom UIs to TextChannelWindow, commands to TextChatCommand, presets to Quick Words, moderation to read-only flows; prefixes get a native path early 2027 (role badges / Feb language in updates). Feb 2027: automatic opt-in for games (opt-out window discussed; disable until ~March 2027 in property docs). May 2027: updated TCS is the only custom-chat path. Default unmodified chat: no action. Metadata (IDs, sender, timestamps, delivery) remains; message body is not for your code.
Phase calendar (lock dates)
| Phase | When | Lock meaning |
|---|---|---|
| 0 | Now | TCS-only for user chat; hunt off-TCS conversation |
| 1 | Now → Feb 2027 | Opt-in test PlatformIntegratedChat; file gaps on DevForum |
| 2 | Feb 2027 | Auto opt-in (opt-out details forthcoming) |
| Opt-out end | ~March 2027 | Property/docs: can Disabled until then — verify nearer the date |
| 3 | May 2027 | Required for custom chat in new + existing games |
Print this table into the sprint board. Do not collapse “May 2027” into “we have a year of nothing.”
Lock list — twelve gates
L1. Default-chat exemption check
Do: Confirm whether the experience uses default Roblox chat with no customizations. Staff: those games should not need action and should not see a change.
Pass: Written yes/no with owner name.
Fail: “We think we’re default” while a free model injected custom GUI.
Next: If customized → continue L2+. If truly default → monitor thread; still run L2 surface hunt for off-TCS chat.
L2. Off-TCS conversation hunt (Phase 0)
Do: Search for real-time conversation outside TextChatService: signs, bulletin boards, pet names, license plates, trading whispers, announcement systems, admin tools, comment systems, free-text inputs. Admin modules that message players are frequent culprits.
Pass: Inventory spreadsheet with surface → decision (route to TextChannel / rate-limit ≥1 min / remove).
Fail: “Players won’t find it.”
Next: Staff: non-compliance may bring notices; continued violations risk suspension/removal.
L3. Rate-limit UGC non-chat text
Do: For UGC that is not chat (signs/boards), enforce ≥1 minute between submissions so it cannot be a conversation channel.
Pass: Rate limit in code + QA attempt to spam-chat via signs.
Fail: Unlimited free-text that behaves like chat.
Next: Prefer routing true chat to TCS instead of clever boards.
L4. Copy-place opt-in
Do: Duplicate a lab place. In Studio Explorer select TextChatService → Properties → PlatformIntegratedChat → Enabled. Property is Studio-only (not settable from scripts).
Pass: Lab place ID; Enabled confirmed; can revert to Disabled.
Fail: Enabling first on the only live place.
Next: Docs: platform-integrated chat.
L5. Empty-string API grep
Do: Grep for TextChatMessage.Text, .Translation, .PrefixText, OnIncomingMessage, Player.Chatted, and chat-wheel TextChannel:SendAsync patterns. With PlatformIntegratedChat Enabled, unsupported reads return "" + output warnings (not nil) — scripts may “work” while silently losing content.
Pass: Grep report + each hit tagged migrate/delete/defer.
Fail: Assuming nil checks catch the break.
Next: Fix nil-vs-empty assumptions in the same PR as migration.
L6. Custom UI → TextChannelWindow
Do: Replace custom message-rendering GUIs with TextChannelWindow. Set Target to the desired TextChannel. Size/color/position remain creator-controlled; Roblox delivers/filters/renders text.
Pass: Lab window shows live channel traffic without reading .Text in Luau.
Fail: Homegrown scrolling frame still binding message strings.
Next: Use ChatWindowConfiguration.TextChannelDisplayMode = DefaultTextChannels when custom channels must not also appear as default-window tabs (Studio-set; scripts can read).
L7. Commands → TextChatCommand
Do: Migrate chat-triggered admin/game commands to TextChatCommand (keyword + callback). Remove parsers that inspect raw message text / Chatted.
Pass: Each command has a TextChatCommand; raw-text parsers gone.
Fail: “We’ll keep Chatted until May.”
Next: Roadmap: keyword-anywhere + still-send-to-chat options called out for Feb in the Oct 22 update — plan, don’t bet the farm without re-check.
L8. Presets → Quick Words
Do: Move creator presets / chat wheels off SendAsync patterns to Customizable Quick Words (Creator Hub upload/publish). Staff: custom presets can’t render the old way; preset policy updates by Feb 2027.
Pass: Quick Words published for game-relevant phrases; old wheel retired in lab.
Fail: Shipping a SendAsync wheel on the Enabled path.
Next: Test Quick Words availability on TextChannelWindow vs default window per current roadmap month.
L9. Prefix / role badge plan
Do: If you rely on PrefixText today, do not assume it survives Enabled. Staff: native prefix / role-badge path early Feb 2027 (filtered badges, runtime set/remove/read, colors; two badges; gradients later). Until then, defer enabling on production if prefixes are load-bearing — or redesign without them for the lab.
Pass: Written decision: wait for native badges / redesign / accept loss in lab.
Fail: Enabling live with PrefixText-critical UX.
Next: Track Feb 2027 feature drops on the same DevForum thread.
L10. Moderation → read-only path
Do: Replace custom moderation that depended on reading message bodies with read-only chat permission flows for eligible moderators (staff: 18+ live view language in updates) and TextChatCommand for actions. Message history called out as coming later in 2026 on the feedback table — verify before promising history in your tool.
Pass: Mod playbook updated; no .Text logging for “safety.”
Fail: Exporting chat logs from Luau after Enabled.
Next: Privacy is the point — treat empty string as permanent design, not a bug.
L11. Multi-channel / radio honesty
Do: For radios/phones/guild chats: one TextChannelWindow per channel + your navigation; read-only channels via TextSource.CanSend = false. Staff considering multi-channel-in-one-window; recommend Default Window interim if you need that support. Bubble chat styling via BubbleChatConfiguration / OnBubbleAdded still called out as available.
Pass: Channel map + window plan; no secret off-TCS radio text.
Fail: Free-text walkie that bypasses TCS.
Next: System announcements: DisplaySystemMessage in TextChannelWindow; creator one-way announcements not under the 1-minute UGC edit limit; fan-out from server to clients.
L12. May 2027 producer sign-off
Do: Producer signs: L1–L11 green or waived with dates, Feb auto-opt-in calendar on the board, May 2027 cutover owner named, live place will not Enabled until lab greps are clean (or default-chat exemption documented).
Pass: Signed lock receipt.
Fail: “We’ll migrate in April.”
Next: Re-run L5 after every chat-related merge until May 2027.
Lock card template
Lock #:
Owner:
PASS / FAIL / N/A:
Evidence:
Blocker if FAIL:
Target date:
Beginner path — first weekend
- Read the DevForum key takeaways + docs (30 min).
- L1–L3 inventory on paper (60–90 min).
- L4 copy-place Enabled (15 min).
- L5 grep + fix one empty-string crash myth (60 min).
- L6 one TextChannelWindow smoke (60–90 min).
- Discord brief; leave live Disabled until L12.
Common mistakes
- Enabling on live to “see what happens.”
- Checking for
nilinstead of empty string. - Keeping Chatted parsers “temporarily.”
- Treating signs as fine forever without rate limits.
- Ignoring Phase 0 because May 2027 feels far.
Working-dev pipeline order
| Sprint | Locks | Exit |
|---|---|---|
| Compliance | L1–L3 | Phase 0 inventory closed |
| Opt-in lab | L4–L5 | Enabled lab + grep |
| Native surfaces | L6–L8 | Window/commands/presets |
| Roles & mod | L9–L11 | Prefix plan + mod path |
| Cutover governance | L12 | Signed May 2027 owner |
Unsupported API cheat sheet
| Feature | Breaks when Enabled | Instead |
|---|---|---|
| Message body / translation | TextChatMessage.Text, .Translation |
TextChannelWindow |
| Prefixes | TextChatMessage.PrefixText |
Native badges (early 2027) — wait/plan |
| Presets / wheels | TextChannel:SendAsync (creator presets) |
Quick Words |
| Mod / admin parse | OnIncomingMessage, Player.Chatted |
TextChatCommand + read-only mod |
Kept: channel membership, sender identity, delivery status, timestamps, message IDs.
New API / property cheat sheet
| API | Use |
|---|---|
TextChatService.PlatformIntegratedChat |
Enabled to test; Disabled to opt out (until ~March 2027 per docs) |
TextChannelWindow |
Placeable native chat window |
TextChannelWindow.Target |
Which TextChannel to show |
ChatWindowConfiguration.TextChannelDisplayMode |
AllTextChannels vs DefaultTextChannels |
TextChannel.AddPlayersOnJoin |
Auto-membership for custom channels |
Roadmap watch list (do not freeze forever)
From the Oct 22 staff feedback table and Phase 1 grid (verify live thread):
| Item | Rough timing called out |
|---|---|
| Display name color/gradients | Nov 2026 language |
| Emojis / voice typing / translations on TextChannelWindow | Nov 2026 language |
| Role badges / prefixes native | Feb 2027 |
| Keyword-anywhere commands | Feb language |
| Message history | Later 2026 language |
| Quick Action Menu / click messages | 2027 / April language |
| Creator blocked words atop filter | By May 2027 language |
Treat these as watch items, not contractual SLAs. Re-lock L9/L10 when they land.
Discord paste (creators)
TextChatService lock — May 2027 custom chat cutover.
Now: all user chat via TCS; hunt off-TCS conversation (Phase 0).
Test: PlatformIntegratedChat=Enabled on a COPY place.
Migrate: TextChannelWindow, TextChatCommand, Quick Words.
Message .Text becomes "" — do not plan on reading chat bodies.
Default unmodified chat: likely no action.
Thread: DevForum Important TextChatService Updates.
Receipt before any live Enabled
Date:
Default-chat only?: Y/N
Off-TCS surfaces inventoried?: Y/N
Lab place ID:
PlatformIntegratedChat: Enabled/Disabled
Grep clean for .Text/.Translation/Chatted/SendAsync presets?: Y/N
TextChannelWindow smoke?: Y/N
TextChatCommand count:
Quick Words?: Y/N
Prefix plan:
Mod path:
May 2027 owner:
Signer:
Failure modes
| Failure | Symptom | Fix |
|---|---|---|
| Silent empty strings | Features “work” with blank data | L5 empty-string asserts |
| Live opt-in | Production breaks Friday | L4 copy-first |
| Radio bypass | Off-TCS whispers | L2/L11 |
| Nil checks | Missed "" |
Rewrite guards |
| Prefix FOMO | Enabled before badges | L9 wait/redesign |
| April scramble | May deadline surprise | L12 calendar now |
| Wrong deadline kit | Using Winter Sale worksheet | Different lock — this URL |
Solo vs studio
Solo: Run L1–L5 this weekend. One TextChannelWindow beat twelve custom frames you cannot maintain under empty strings.
Studio: Producer owns L12. Security/compliance owns “we don’t log message bodies.” Eng owns grep CI until May 2027.
Company diligence one-pager
| Question | Acceptable answer |
|---|---|
| Hard date? | May 2027 custom chat cutover |
| Test now? | Yes — PlatformIntegratedChat Enabled on lab |
| Can we read messages in code? | No under platform-integrated model |
| Default chat games? | No action expected if truly unmodified |
| Auto opt-in? | Feb 2027 (opt-out details — verify) |
| Who owns migration? | Named eng + producer on L12 |
Worked example — wrong “we’ll wait”
Setup: Heavy custom chat GUI, admin Chatted parsers, VIP PrefixText, chat-wheel SendAsync. Team skips opt-in because May 2027 “is far.” Feb 2027 auto opt-in hits; empty strings nuke commands; Discord meltdown; emergency Disabled until March; May still arrives.
What the lock list forces: L4–L5 in October/November 2026; L6–L8 before Feb; L9 plan before relying on prefixes; L12 owner on the calendar.
Sibling map
| Need | URL |
|---|---|
| This lock list | You are here |
| Different deadline worksheet | Winter Sale lock |
| Studio hub | Roblox Studio guide |
| Official how-to | Platform-integrated chat docs |
When to re-run the locks
Re-run L2 after every new free-text feature. Re-run L5 on CI for chat files. Re-run L4 after Studio updates. Re-run L9/L10 when DevForum posts badge/history landings. Re-run L12 each quarter until May 2027.
Opinion spine (quotable)
Stop treating May 2027 as a distant rumor. The free work is inventory, copy-place PlatformIntegratedChat, empty-string greps, and native windows/commands — locked so Discord cannot skip them until the cutover weekend.
Key takeaways
- May 2027 required migration for custom chat under updated TextChatService.
- Test now with
PlatformIntegratedChat = Enabledon a copy place. - Phase 0 now: user chat via TCS only; hunt off-TCS conversation.
- Message text is not for your code — APIs return
""+ warnings when enabled. - Migrate UIs to
TextChannelWindow. - Migrate commands to
TextChatCommand. - Migrate presets to Quick Words.
- Plan prefixes for native early-2027 badges — don’t bet on
PrefixText. - Feb 2027 auto opt-in window — put it on the board.
- Default unmodified chat: no action expected.
- Authority: DevForum announcement + docs.
- Sign L12 with a named May 2027 owner.
FAQ
What is the Roblox TextChatService May 2027 migration?
The required move to platform-integrated TextChatService for custom chat: Roblox delivers/renders messages; creators use native windows/commands/presets; message bodies are not accessible in scripts.
How do I start testing?
In Studio, select TextChatService → set PlatformIntegratedChat to Enabled on a test place. See platform-integrated chat docs.
Do default chat games need to migrate?
Staff says games using default Roblox chat with no customizations should not need action and should not see a change. Still verify you truly have no custom chat code or off-TCS conversation surfaces.
What happens to TextChatMessage.Text?
Under platform-integrated chat, message text is not accessible to your code. Opted-in APIs return an empty string (not nil) and log a warning.
What replaces custom chat UIs?
TextChannelWindow targeted at a TextChannel, with size/color/position customization. Roblox handles delivery, filtering, and rendering.
When is automatic opt-in?
February 2027 for all new and existing games, with an opt-out option (details to be shared). Property docs describe Disabled until about March 2027 — re-verify nearer the date.
What is the hard deadline?
May 2027 — updated TextChatService is the only way to have custom chat in new and existing games.
Are signs and boards part of this update?
Staff clarified the update changes chat; other player text follows existing sign/board rules, with clearer guidance promised. Phase 0 still expects you not to run conversation off TCS — rate-limit or route.
Sources
- Important TextChatService Updates: How to Test and What’s Next (primary)
- Platform-integrated chat docs
- Weekly Recap: October 19–23, 2026
- Roblox Cube (related platform tooling context)
What to do Monday
Print the phase calendar. Finish L1–L3. Enable PlatformIntegratedChat on a copy place. Grep for .Text / Chatted / preset SendAsync. Stand up one TextChannelWindow. Name the May 2027 owner. For Studio orientation, use the Roblox Studio guide. Paste the Discord brief if your team only reads one message. Re-check the DevForum thread at the start of every month until May 2027.