Studio crashes when attempting to update package

If you try to do a mass update of a package, Studio will close itself completely.
At first it shows the frame with the progress bars, but it will completely close itself after while updating.

I have been experiencing this problem for several weeks now.

Expected behavior

I expect it to properly mass update the package and not to close.

16 Likes

I’m experiencing this bug at the moment with a package in my experience.

I have a folder package, which contains a couple sub-folders full of ModuleScripts, which I intend to use in all places within my experience. I’ve been able to update it in the past without issues, but when I tried today, it successfully updates on the current place, but when Studio attempts to update the starting place, it shows “5%” then suddenly closes.

I just tried to manually update the package by visiting that place then selecting “get latest package”, and that worked. However, having to open each individual place, especially if in a larger multi-place experience, could make updates risky, as some places may attempt to reference outdated versions of functions and constant values, and in worst cases, could lead to save corruption. (I’m just being theoretical here; My experience isn’t anywhere near finished and doesn’t use DataStores yet, but it’s still a fear of mine.)

In case any staff members are reading this post and can somehow import old versions of packages and update them, here’s my problematic package:

7 Likes

Can confirm this happens to me for months now and It gets annoying to manually update it every time

2 Likes

Could you please provide some logs?

2 Likes

I am able to repro this on non-team create enabled game. Is this mass update of packages failing in only non-Team create enabled games or does in happen in team-create enabled games as well?

3 Likes

We found the root cause for the studio to crash on mass updating in non-TC places and the fix has been deployed. Can you confirm that the issue is fixed for you? Thanks!

3 Likes

I can’t confirm that this has been fixed, but the game I’m having this problem with has Team Create enabled. It still crashes when mass updating the package.

2 Likes

The issue still persists when I try to update all packages with TC on. It stops at 5% before crashing altogether.

3 Likes

@CSJeverything and @TechnicalHost Can you provide the logs for the crash?

2 Likes

I wasn’t tagged but here’s the log file from Studio today. It crashed when attempting to update that ModuleScript package again… I looked at the log and I can’t find any errors relating to updating a package, but I’m still attaching it to this post in case it somehow does:
0.578.0.5780566_20230601T162207Z_Studio_8F4B6_last.log (48.8 KB)

Are there any more log files or things that I could try to see if they fix this bug?

6 Likes

Im experiencing the same issue within a universe with over 30+ places

5 Likes

Hi @brienneofthetarth. I am also experiencing issues where mass updating packages causes the studio to crash. This is for a team-create enabled place.

Here is a copy of my studio log:
0.578.0.5780566_20230608T211026Z_Studio_A0DA9_last.log (53.3 KB)

4 Likes

Experiencing this issue right now, this issue occurs usually for packages contains huge amount of contents. Even high-end computers can’t render it. Manually updating packages by opening place don’t do it either, the ROBLOX STUDIO froze forever.

3 Likes

Removed around 20,000 KB to my game but it’s still freezing my studio.

2 Likes

My packages are just scripts, so doubt it takes up much data. My studio crashes regardless of package size.

3 Likes

Same here, mostly just module scripts.

5 Likes

Same problem with me. Studio crashes when I try to update packages.

5 Likes

Update: I asked my colleague to update packages and their studio crashed as well. This person is @marinusss who has replied above. The universe ID we tried to update for all packages is: 3953209568

Would be great if this bug can get fixed soon since the other way to update is to go to 30+ places and manually update 3 packages in each place.

4 Likes

I could not wait for Roblox staff to fix this issue, so I created a workaround that treats packages as assets instead (Similar to when you publish your own model). I did the following:

  1. Check if you want to replace packages. I did this by making a separate model with a bool attribute. If it is true, then replace all packages.

  2. Get package ID from the “PackageLink” object that is created when inserting packages

  3. Get the latest asset version ID for that package ID

  4. Use InsertService to get the latest asset of the package with the “latest asset version ID” (Note: Check what object got inserted. Sometimes you will find that it creates a new model with your package inside of it, so you may need to get the first child. Inserted packages will NOT have a PackageLink object)

  5. Destroy the old package

  6. Set the latest package parent to the parent of what the old package used to have

  7. Clone a local script to all players that does the same as step 5 & 6, but for local scripts instead. (Note: You may need to adjust the code to detect if the player already has some player gui’s, or to delete player gui’s before getting the latest version of the package. This is so that your local scripts don’t break or create 2 of the same player gui’s)

You can find a copy of the code I used for my game below. You will need to adjust it for your own game.

Server:

--[[

	Created by AstrophsicaDev
	
	© 2023 AstrophsicaDev

]]--

----------------------------------------- Variables -----------------------------------------
local InsertService = game:GetService("InsertService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerScriptService = game:GetService("ServerScriptService")
local ServerStorage = game:GetService("ServerStorage")
local StarterPlayer = game:GetService("StarterPlayer")

------------------------------------------- Code -------------------------------------------
if RunService:IsStudio() then return end -- To test this script in studio, disable this line and run in test server only

-- If this script has a package link, it may not be the latest version. Get latest version
if script:FindFirstChild("PackageLink") then
	local packageId = script:WaitForChild("PackageLink").PackageId
	local subbedText, occurances = string.gsub(packageId, "%D", "") -- Removes rbxassetid:// from PackageId string
	local latestVersionId = InsertService:GetLatestAssetVersionAsync(tonumber(subbedText))
	local latestPackage = InsertService:LoadAssetVersion(latestVersionId)
	latestPackage:FindFirstChildOfClass("Script").Parent = ServerScriptService
	script:Destroy()
	return
end

-- Get PackageAutoUpdate and check if ForceUpdate attribute is active
local packageAutoUpdate = InsertService:LoadAsset(13946162020) -- Change ID to Model ID that has an attribute boolean called "ForceUpdate". Name the model as "UpdatePackages"
if packageAutoUpdate:WaitForChild("UpdatePackages"):GetAttribute("ForceUpdate") == false then return end



-- Gets package ID of a common folder. Requires parent of common folder
local function GetPackageIdFromCommonObjectParent(CommonParent)
	local packageId = CommonParent:WaitForChild("Common"):WaitForChild("PackageLink").PackageId
	local subbedText, occurances = string.gsub(packageId, "%D", "") -- Removes rbxassetid:// from PackageId string
	return tonumber(subbedText)
end



-- Updates common folder. Requires parent of common folder
local function UpdatePackageToLatestVersionFromCommonObjectParent(CommonParent)
	local packageId = GetPackageIdFromCommonObjectParent(CommonParent)
	local latestVersionId = InsertService:GetLatestAssetVersionAsync(packageId)
	local latestPackage = InsertService:LoadAssetVersion(latestVersionId)
	local descendantsCount = #CommonParent:WaitForChild("Common"):GetDescendants()
	CommonParent:WaitForChild("Common"):Destroy()
        
    -- Check if all descendants have loaded in
	repeat
		task.wait()
	until #latestPackage:WaitForChild("Common"):GetDescendants() >= descendantsCount - 1
	latestPackage:WaitForChild("Common").Parent = CommonParent
end



-- Update all common packages
UpdatePackageToLatestVersionFromCommonObjectParent(ReplicatedFirst)
UpdatePackageToLatestVersionFromCommonObjectParent(ReplicatedStorage)
UpdatePackageToLatestVersionFromCommonObjectParent(ServerStorage)
UpdatePackageToLatestVersionFromCommonObjectParent(StarterPlayer.StarterCharacterScripts)
UpdatePackageToLatestVersionFromCommonObjectParent(StarterPlayer.StarterPlayerScripts)
UpdatePackageToLatestVersionFromCommonObjectParent(ServerScriptService)

for _, player in pairs(Players:GetPlayers()) do
	local localUpdatePackagesScript = ServerScriptService:WaitForChild("Common"):WaitForChild("LocalUpdatePackages")
	localUpdatePackagesScript:Clone().Parent = player:WaitForChild("PlayerGui")
end

Local (AKA LocalUpdatePackages):

--[[

	Created by AstrophsicaDev
	
	© 2023 AstrophsicaDev

]]--

----------------------------------------- Variables -----------------------------------------
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local StarterPlayer = game:GetService("StarterPlayer")

local LocalPlayer = Players.LocalPlayer
local ReplicatedCommon = ReplicatedStorage:WaitForChild("Common")
local StarterPlayerScriptsCommon = StarterPlayer:WaitForChild("StarterPlayerScripts"):WaitForChild("Common")
local StarterCharacterScriptsCommon = StarterPlayer:WaitForChild("StarterCharacterScripts"):WaitForChild("Common")

------------------------------------------ Code ------------------------------------------
local function UpdateToLatestPackage(newCommonObject, oldCommonObject)
	local descendantsCount = #oldCommonObject:GetDescendants()

	repeat
		task.wait()
	until #newCommonObject:GetDescendants() == descendantsCount - 1
	
	local oldCommonParent = oldCommonObject.Parent
	oldCommonObject:Destroy()
	newCommonObject:Clone().Parent = oldCommonParent
end

-- Delete old GUI and reference
local topbarPlusReference = ReplicatedStorage:FindFirstChild("TopbarPlusReference")
if topbarPlusReference then
	topbarPlusReference:Destroy()
end
local topbarGui = LocalPlayer:WaitForChild("PlayerGui"):FindFirstChild("TopbarPlus")
if topbarGui then
	topbarGui:Destroy()
end

UpdateToLatestPackage(StarterPlayerScriptsCommon, LocalPlayer.PlayerScripts:WaitForChild("Common"))

if LocalPlayer.Character == nil then return end
UpdateToLatestPackage(StarterCharacterScriptsCommon, LocalPlayer.Character:WaitForChild("Common"))

print("Local packages has been updated")
script:Destroy()

For context, I have folders called “Common” that are packages. These folders are typically a child under a service, so the folder parent would be ServerScriptService, StarterPlayerScripts, ReplicatedStorage etc. If you want this to work with minimal adjustment, you will need to create folders called “Common” and make them packages. You will also need to create a local script called “LocalUpdatePackages” and put the local script code into that. Then you will need to place the “LocalUpdatePackages” into the ServerScriptService “Common” folder.

This is as much help as I’m willing to give. You will need to work out the rest for youself.

5 Likes

There is nothing out of ordinary in the logs. Can some of you provide me a package that is failing the update in Team Create, so that it can be helpful to reproduce the issue on our end?
Thanks!

2 Likes