π What's New: Roblox VSCode v3.0.0
π How to Get It & See What's New
- VS Code extension: grab
roblox-vscode-3.0.0.vsix from the v3.0.0 release (or the Download page), then in VS Code open the Extensions panel β Β·Β·Β· menu β Install from VSIX... and pick the file. It installs over the old version automatically β no need to uninstall first.
- Studio plugin: the Creator Store auto-updates it for you, so if Studio was closed you likely already have it next time you open it. If not (or if Studio was open during the update), reinstall from the Creator Store listing and restart Studio.
- See exactly what changed, right inside Studio: open the plugin panel β More βΎ β What's New. It always shows the notes for whichever version you're currently running, so you can check it any time without leaving Studio.
Added
- Real server-side authorization for Team/GitHub writes. Owner-only Team actions (rename/disband, add/remove member, link/unlink a GitHub repo, grant collaborator access) used to be enforced only by the Studio plugin's own UI hiding the button. Signing in with Roblox OAuth now gets you a real, cryptographically verified session, and once a team's owner has signed in at least once, that team's owner-only actions are checked server-side against their real identity - not just trusted from whatever username was typed in. See π How to Enable Real Team Authorization below. This is an opt-in rollout: teams whose owner hasn't signed in with Roblox OAuth yet keep working exactly as before, nobody gets locked out.
- Import a Rojo project. Command Palette β "Roblox VSCode: Import from Rojo Project" reads a
default.project.json's $path mappings and copies each one into this tool's own folder layout - a real migration path if you're currently on Rojo. See π₯ How to Import from Rojo below.
- Sync real assets - audio, decals, 3D models - through Roblox's Open Cloud. Command Palette β "Roblox VSCode: Sync Assets to Roblox" uploads anything under your project's
Assets/Audio, Assets/Images, Assets/Models folders and tracks what's already uploaded so re-syncing doesn't create duplicates. See βοΈ How to Sync Assets below.
- Luau-LSP support. A Rojo-compatible
sourcemap.json is generated automatically as you sync (or on demand via "Generate sourcemap.json for Luau-LSP"), so go-to-definition, require() resolution, and DataModel-aware autocomplete work against your synced project if you have Luau-LSP installed.
- A "Roblox Hierarchy" view in the Explorer sidebar - your live synced project tree with real Roblox class icons (Script/LocalScript/ModuleScript/Folder/etc.), separate from the plain file view. Click any script or model straight through to its file.
- A public status page β roblox-vscode.wasmer.app/status.html β showing live health for the website, the database, and Roblox account verification.
- Dark mode for the website, remembered per visitor, following your system's light/dark setting by default.
Fixed
- A folder literally named
init could get misidentified as an init.lua's parent container instead of a real folder, corrupting the wrong script.
- A malformed or interrupted
.rbxmx import could leave a half-built model in Studio with no clear sign the import had actually failed.
- A burst of rapid Team actions could occasionally duplicate part of the Teams UI.
- Firebase calls now retry on a transient network blip instead of failing outright on the first try.
- Absolute file paths no longer leak into the Output channel or the dashboard's error log.
Changed
admin-tool/ and support-portal/ β two old, unauthenticated duplicates of the real admin panel β have been removed.
- Firebase Realtime Database rules are now version-controlled in the repo instead of living only in the Firebase Console.
π How to Enable Real Team Authorization
- In VS Code, run "Roblox VSCode: Sign in with Roblox" from the Command Palette (or the dashboard). This opens Roblox's real OAuth screen in your browser.
- Reconnect Studio to your VS Code bridge (or just wait for the next auto-reconnect). Studio picks up your verified identity automatically.
- If you own a team for the currently active project, opening the Teams tab in Studio finishes the one-time setup for that team in the background - no extra click needed.
Nothing changes visibly - this just means the owner-only buttons you already had are now actually checked by the server, not just hidden by the UI.
π₯ How to Import from Rojo
- Open the Roblox VSCode-managed project you want to migrate content into (or a fresh one).
- Command Palette β "Roblox VSCode: Import from Rojo Project (default.project.json)". If a
default.project.json isn't found in the workspace root, you'll be asked to pick one.
- Review the summary (how many files/folders were found) before confirming - nothing is copied until you approve it. Existing files are never overwritten.
- Run "Roblox VSCode: Trigger Full Diff-Resync" afterward so Studio picks up the newly imported files.
βοΈ How to Sync Assets
- Command Palette β "Roblox VSCode: Configure Open Cloud Asset Sync" β you'll need a Roblox Open Cloud API key (Assets API,
asset:write scope) and your Roblox User or Group ID.
- Drop audio files into
Assets/Audio/, images into Assets/Images/, and 3D models into Assets/Models/ in your project.
- Command Palette β "Roblox VSCode: Sync Assets to Roblox (Audio/Decals/Models)". Each new or changed file gets uploaded; re-running only re-uploads what actually changed.
- Reference an uploaded asset from your own scripts via
require(game.ReplicatedStorage.RobloxVSCodeAssets).YourAssetName.
π Previous Release: v2.0.0
Added
- GitHub repo integration for Teams. From Studio's Teams tab (owner-only), link your project to a real GitHub repo, push the synced files there with one click, and grant teammates real GitHub collaborator access by entering their GitHub username β a real invite goes out via GitHub's own API, not just an in-app permission.
- Roblox account verification is now actually real β a profile-code ownership check replacing the previously-unverifiable OAuth redirect.
Fixed
- A real Studio crash (and reconnecting afterward doing nothing) from an unyielded full project tree walk.
- Every custom icon in the plugin was invisible β replaced with emoji everywhere.
- The Connect button's error message now reflects the real problem instead of always suggesting the server isn't running.
- Copy-to-clipboard links now fall back to a selectable text field when
setclipboard is blocked.
- The auto-generated AI coding-guidelines file is correctly named
.cursorrules.
π Previous Release: v1.0.2
Added
- Folders now sync both ways β creating or deleting even an empty folder in either VS Code or Studio is reflected on the other side. Previously a folder's existence was purely incidental to the files inside it.
- New Team tools β see when a teammate's plugin was last actually seen connecting, rename your team, or disband it entirely (owner-only, click-twice-to-confirm).
Fixed
- Pushing an updated GUI from VS Code could leave a duplicate behind in Studio instead of updating it in place β the GUI import path was missing the same cache bookkeeping every other apply path already had, which is what stops a just-applied change from being seen as "new" and echoed right back.
- Deletes and renames only ever covered scripts, Studio β VS Code β a folder or GUI deleted or renamed directly in Studio had no way to reach VS Code at all. Now handled the same way scripts already were.
- A real "Out of local registers" crash some users hit on load, from the What's New tab added in 1.0.1 pushing the Studio plugin's script past Luau's 200-local ceiling.
- Conflict diffs could look far noisier than the real change β a line-ending mismatch between a local CRLF file and Studio's LF content made every line show as changed even when nothing meaningful differed. Now normalized to match the local file.
- The Studio plugin's Tutorial tab skipped the pairing code and "Allow HTTP Requests" β the two things people actually get stuck on. Rewritten from 3 steps to 5 accurate ones; the website's matching section was fixed the same way.
π Previous Release: v1.0.1
Added
- GUI edits made directly in Studio now sync to VS Code as
.rbxmx files β previously only VS Code β Studio worked; a GUI built or changed straight in Studio had no way to reach VS Code at all.
- A new "What's New" tab in the Studio plugin, so you can see what changed without leaving Studio.
Fixed
- Pushing from both sides in quick succession could silently override the other's edit, in either direction. Both the conflict-detection baseline and Studio's own Push now correctly catch a genuine clash instead of one side quietly discarding the other.
- Cross-side content hashes rarely actually matched, due to a floating-point precision bug in the Studio plugin's hashing β a very plausible root cause behind conflicts that shouldn't have been flagged. Fixed.
- Renaming a script in Studio could leave a duplicate behind or lose the file.
- Two instances sharing a name (Roblox's own default for a new script/folder) no longer silently overwrite each other's synced file, on either sync direction.
- A path-traversal gap in project setup, hardened.
- Deleting a script in Studio and pressing "Push to VS Code" did nothing β deletions now sync correctly.
- A pending conflict could get silently stomped by a manual Push, and a conflict that resolved itself before you picked a side used to leave a stale prompt behind β both fixed.
- The conflict diff view's "Studio" side showed a cryptic temp file path. Replaced with a clear "VS Code (left) β Studio (right)" label.
- A second open VS Code window's dashboard always showed an empty/disconnected state, even while sync was working fine elsewhere.
- Push / Force Sync could fail or hang for a full 2 minutes on a machine missing a VS Code internal component β sync no longer depends on it.
π Previous Release: v1.0.0
We're out of Alpha! This release comes from actually testing the full push/pull/conflict workflow end-to-end for the first time and fixing what that turned up, plus a full visual redesign of the Studio plugin, the extension, and the website into one shared "Studio Light" cream/tan look.
π What's New in v1.0.0
- Studio Light redesign β the Studio plugin, all three VS Code panels, and the website now share one pastel palette, with a restructured tab bar (Main/Teams up front, everything else behind "More βΎ") and a Credits page.
- Roblox OAuth sign-in for a verified Teams identity instead of typing your username by hand β approved by Roblox and live.
- A Conflicts tab in the Studio plugin β a real line-by-line diff of exactly what a sync conflict overwrote, with a heads-up banner, so it's not just a VS Code-side notification.
- "Show Team Members" command /
Ctrl+Alt+T to see everyone on the current project's team without opening the full dashboard.
- Smarter Teams β ownership now transfers automatically if the owner leaves, owners can remove members, and joining a team no longer gets blocked by a stale membership record left over from a different project.
π οΈ What We Fixed
- Conflict resolution used to loop forever. Answering the "which version do you want" prompt didn't actually end it β the exact same prompt reopened on the next check, indefinitely, and the version you picked often never got delivered. Now answering it actually resolves it.
- "Keep Studio Version" used to silently do nothing. Studio was already overwriting the file with the VS Code version before you got a chance to choose, so asking to keep the Studio version just handed back the VS Code version in disguise. Studio now preserves your edit before that happens.
- Scripts needed to be closed and reopened to show a synced update. An already-open Script Editor tab wasn't refreshing on its own. Fixed by writing through the proper Studio API instead of a raw property write.
- A push could get permanently stuck. If delivery failed, the file looked "already synced" to every future push attempt β the only fix was editing it again. Now a failed delivery is retried automatically.
- Two never-saved places could silently overwrite each other's synced files. Each unsaved place now gets its own stable identity.
- A real crash the first time a conflict occurred (and a related permanent "stuck processing" state for that file afterward) β both fixed.
- Admins locked out of the admin panel if their role was ever stored with different capitalization. Now it's checked case-insensitively everywhere.
π Previous Release: v0.11.0-Alpha
This update was about trust and control over your sync sessions: conflicts get a real resolution flow instead of a silent coin-flip, failures tell you why, and you get direct control over what syncs and how projects/code move between games.
π Project Links
π Detailed Overview
1. Conflict Resolution UI
Previously, if a file changed in both VS Code and Studio since the last sync, VS Code's version silently won. Now the conflicting change is held back and you're prompted to Compare & Choose, Keep VS Code Version, or Keep Studio Version β with a real diff view before you decide. Anytime a conflict is dismissed, revisit it with "Roblox Sync: Resolve Sync Conflicts".
2. Switch Active Project
Juggling multiple games no longer means restarting the bridge. "Roblox Sync: Switch Active Project" redirects the running server at a different previously-synced project (or a folder you browse to), with a warning if Studio looks like it's actively syncing right now.
3. Selective Sync
"Roblox Sync: Manage Selective Sync (Exclude Rules)" gives you a checkbox picker over your project's folders (plus custom patterns) instead of hand-editing ignorePatterns in settings.json.
4. Shared Library β Reuse Code Across Games
Export any script or folder to a local Shared Library (via the command palette or right-click in the Explorer), then import it into any other project with "Import from Shared Library." No more copy-pasting between VS Code windows.
5. Failures Now Say Why
When Studio can't apply a file β an unknown root folder, a class-creation error, a bad model import, the wrong instance type β the activity log used to just say "β Failed: file". It now includes the actual reason, that reason is reported back to VS Code's dashboard, and a file that's permanently given up on after repeated failures gets one clear final message instead of silently vanishing from the queue.
6. A Proper First-Time Setup Check
Installing just the Studio plugin without the VS Code extension used to mean your first "Connect" attempt failed with a bare "Connection Error" and no clue why. The plugin now shows a one-time welcome popup on first launch asking whether you already have the VS Code extension β with a copyable download link if you don't.
7. Teams
A new Teams tab in the Studio plugin. Create a team for the project you're working on (one team per project) and add your collaborators by Roblox username β or join one that already exists. Every person still runs their own local VS CodeβStudio bridge (there's no shared live session), but Teams adds a shared roster and a "who did what" activity feed on top of that, so you can see who pushed or pulled which file and when. Identity is a self-reported Roblox username (the same trust model the support ticket system already uses), and if you add someone whose install has never been seen connecting before, you'll get a heads-up so you know to check in with them.
8. What We Removed
- The Discord server. We're now on Roblox itself β join Glitch Work Studios instead. Bonus: Discord invite links were getting filtered by Roblox's own text moderation on the plugin listing; an in-platform community link doesn't have that problem.
- Dead OAuth scaffolding that never actually did anything β it read a settings key that didn't exist and had no route wired up to use it.
- The
cors() middleware on the local sync server (see below β nothing needed it, and it was a real, if narrow, risk).
9. What We Fixed
- Stored XSS in the webviews. Ticket/chat messages were previously rendered as raw HTML, so a message could execute a script in another user's VS Code. Everything shared-backend-sourced is HTML-escaped now.
- Update checks that could silently stop working. Versions used to be compared as
minor Γ 10, which breaks the moment a two-digit minor/major ships or a "-Alpha" tag is present. Now it's a real major.minor.patch comparison.
- A brute-forceable pairing code.
/init had no rate limit, so a malicious local webpage could hammer it with 6-digit guesses. Now it locks out after repeated failures.
- Wide-open CORS on the local server β removed. Nothing legitimate ever needed it, and it let any locally-running webpage read the server's responses.
- Two ways the Shared Library feature could delete your project or write outside its folder. Both closed.
- Duplicate conflict pop-ups when Studio was slow to respond, and an auto-resolve timer that could silently override your "Keep Studio Version" choice if Studio took more than 2 minutes to answer. Both fixed.
- A broken release banner on the homepage and broken share-link previews on every page of the site β both were pointing at image files that didn't exist. Fixed.
- A real secret shipping inside every VSIX.
.vscodeignore never excluded the admin tool's folder, so an encryption key was bundled into every release build, including ones already downloaded. It's excluded now, and the key has been rotated.
- A broken update-notification feature. The code that shows "Update Available" referenced the plugin's own panel before it existed in the script, which threw an error every time an update was detected instead of showing anything. Also fixed the notification's claim that a download page "opened in your browser" β Studio plugins can't do that, so it now shows a copyable link instead of pretending.
- The dashboard now keeps a rolling log of recent errors instead of only ever showing the last one.
π¦ Download & Installation
- Get the VS Code Extension from the Official Release Page.
- Install the Roblox Plugin from the Roblox Creator Store.
- Follow the interactive tutorial that will automatically launch when you first open the tools!
Developed with β€οΈ by CodingJeff Β© 2026