Skip to content

Errors

Whenever Fusion outputs any errors or messages to the console, it will have a short error ID at the end. This is used to uniquely identify what kind of error or message you're seeing.

Use the search box below to paste in or type an error ID, and it will scroll to the details for you.


since v0.1

cannotAssignProperty

The class type 'Foo' has no assignable property 'Bar'.

This message means you tried to set a property on an instance, but the property can't be assigned to. This could be because the property doesn't exist, or because it's locked by Roblox to prevent edits.

This usually occurs with the New or Hydrate functions:

local folder = New "Folder" {
    DataCost = 12345,
    ThisPropertyDoesntExist = "Example"
}

Tip

Different scripts may have different privileges - for example, plugins will be allowed more privileges than in-game scripts. Make sure you have the necessary privileges to assign to your properties!


since v0.1

cannotConnectChange

The Frame class doesn't have a property called 'Foo'.

This message means you tried to connect to a property change event, but the property you specify doesn't exist on the instance.

This usually occurs with the New or Hydrate functions:

local textBox = New "TextBox" {
    [OnChange "ThisPropertyDoesntExist"] = function()
        ...
    end)
}

since v0.1

cannotConnectEvent

The Frame class doesn't have an event called 'Foo'.

This message means you tried to connect to an event on an instance, but the event you specify doesn't exist on the instance.

This usually occurs with the New or Hydrate functions:

local button = New "TextButton" {
    [OnEvent "ThisEventDoesntExist"] = function()
        ...
    end)
}

since v0.1

cannotCreateClass

Can't create a new instance of class 'Foo'.

This message means you tried to create a new instance type, but the type of instance you specify doesn't exist in Roblox.

This usually occurs with the New function:

local instance = New "ThisClassTypeIsInvalid" {
    ...
}

since v0.1

computedCallbackError

Computed callback error: attempt to index a nil value

This message means the callback of a computed object encountered an error.

local example = Computed(function()
    local badMath = 2 + "fish"
end)

since v0.2

destructorNeededComputed

To return instances from Computeds, provide a destructor function. This will be an error soon - see discussion #183 on GitHub.

This message shows if you return destructible values from a computed object, without also specifying how to destroy those values using a destructor.

Learn more by visiting this discussion on GitHub.

local badComputed = Computed(function()
    return New "Folder" { ... }
end, nil)

since v0.2

destructorNeededForKeys

To return instances from ForKeys, provide a destructor function. This will be an error soon - see discussion #183 on GitHub.

This message shows if you return destructible values from a ForKeys object, without also specifying how to destroy those values using a destructor.

Learn more by visiting this discussion on GitHub.

local badForKeys = ForKeys(array, function(key)
    return New "Folder" { ... }
end, nil)

Note

For some time during the development of v0.2, ForKeys would implicitly insert a destructor for you. This behaviour still works, but it's going to be removed in an upcoming version.


since v0.2

destructorNeededForPairs

To return instances from ForPairs, provide a destructor function. This will be an error soon - see discussion #183 on GitHub.

This message shows if you return destructible values from a ForPairs object, without also specifying how to destroy those values using a destructor.

Learn more by visiting this discussion on GitHub.

local badForPairs = ForPairs(array, function(key, value)
    return key, New "Folder" { ... }
end, nil)

Note

For some time during the development of v0.2, ForPairs would implicitly insert a destructor for you. This behaviour still works, but it's going to be removed in an upcoming version.


since v0.2

destructorNeededForValues

To return instances from ForValues, provide a destructor function. This will be an error soon - see discussion #183 on GitHub.

This message shows if you return destructible values from a ForValues object, without also specifying how to destroy those values using a destructor.

Learn more by visiting this discussion on GitHub.

local badForValues = ForValues(array, function(value)
    return New "Folder" { ... }
end, nil)

Note

For some time during the development of v0.2, ForValues would implicitly insert a destructor for you. This behaviour still works, but it's going to be removed in an upcoming version.


since v0.2

forKeysDestructorError

ForKeys destructor error: attempt to index a nil value

This message means the destructor passed to a ForKeys object encountered an error.

local function destructor(x)
    local badMath = 2 + "fish"
end

local example = ForKeys(array, doSomething, destructor)

since v0.2

forKeysKeyCollision

ForKeys should only write to output key 'Charlie' once when processing key changes, but it wrote to it twice. Previously input key: 'Alice'; New input key: 'Bob'

This message means you returned the same value twice for two different keys in a ForKeys object.

local data = {
    Alice = true,
    Bob = true
}
local example = ForKeys(data, function(key)
    if key == "Alice" or key == "Bob" then
        return "Charlie"
    end
end)

since v0.2

forKeysProcessorError

ForKeys callback error: attempt to index a nil value

This message means the callback of a ForKeys object encountered an error.

local example = ForKeys(array, function(key)
    local badMath = 2 + "fish"
end)

since v0.2

forPairsDestructorError

ForPairs destructor error: attempt to index a nil value

This message means the destructor passed to a ForPairs object encountered an error.

local function destructor(x, y)
    local badMath = 2 + "fish"
end

local example = ForPairs(array, doSomething, destructor)

since v0.2

forPairsKeyCollision

ForPairs should only write to output key 'Charlie' once when processing key changes, but it wrote to it twice. Previously input key: 'Alice'; New input key: 'Bob'

This message means you returned the same value twice for two different keys in a ForPairs object.

local data = {
    Alice = true,
    Bob = true
}
local example = ForPairs(data, function(key, value)
    if key == "Alice" or key == "Bob" then
        return "Charlie", value
    end
end)

since v0.2

forPairsProcessorError

ForPairs callback error: attempt to index a nil value

This message means the callback of a ForPairs object encountered an error.

local example = ForPairs(array, function(key, value)
    local badMath = 2 + "fish"
end)

since v0.2

forValuesDestructorError

ForValues destructor error: attempt to index a nil value

This message means the destructor passed to a ForValues object encountered an error.

local function destructor(x)
    local badMath = 2 + "fish"
end

local example = ForValues(array, doSomething, destructor)

since v0.2

forValuesProcessorError

ForValues callback error: attempt to index a nil value

This message means the callback of a ForValues object encountered an error.

local example = ForValues(array, function(value)
    local badMath = 2 + "fish"
end)

since v0.2

invalidChangeHandler

The change handler for the 'Text' property must be a function.

This message means you tried to use OnChange on an instance's property, but instead of passing a function callback, you passed something else.

local input = New "TextBox" {
    [OnChange "Text"] = "lemons"
}

since v0.2

invalidEventHandler

The handler for the 'Activated' event must be a function.

This message means you tried to use OnEvent on an instance's event, but instead of passing a function callback, you passed something else.

local button = New "TextButton" {
    [OnEvent "Activated"] = "limes"
}

since v0.2

invalidPropertyType

'Frame.Size' expected a 'UDim2' type, but got a 'Color3' type.

This message means you tried to set a property on an instance, but you gave it the wrong type of value.

This usually occurs with the New or Hydrate functions:

local ui = New "Frame" {
    Size = Computed(function()
        return Color3.new(1, 0, 0)
    end)
}

since v0.2

invalidRefType

Instance refs must be Value objects.

This message means you tried to use Ref, but you didn't also give it a value object to store the instance inside of.

local thing = New "Part" {
    [Ref] = 2
}

since v0.2

invalidOutType

[Out] properties must be given Value objects.

This message means you tried to use Out, but you didn't also give it a value object to store the property's value inside of.

local thing = New "Part" {
    [Out "Color"] = true
}

since v0.2

invalidOutProperty

The Part class doesn't have a property called 'Flobulator'.

This message means you tried to read a property of an instance using Out, but the property can't be read. This could be because the property doesn't exist, or because it's locked by Roblox to prevent reading.

local value = Value()

local thing = New "Part" {
    [Out "Flobulator"] = value
}

since v0.1

invalidSpringDamping

The damping ratio for a spring must be >= 0. (damping was -0.50)

This message means you gave a damping ratio to a spring object which is less than 0:

local speed = 10
local damping = -12345
local spring = Spring(state, speed, damping)

Damping ratio must always be between 0 and infinity for a spring to be physically simulatable.


since v0.1

invalidSpringSpeed

The speed of a spring must be >= 0. (speed was -2.00)

This message means you gave a speed to a spring object which is less than 0:

local speed = -12345
local spring = Spring(state, speed)

Since a speed of 0 is equivalent to a spring that doesn't move, any slower speed is not simulatable or physically sensible.


since v0.1

mistypedSpringDamping

The damping ratio for a spring must be a number. (got a boolean)

This message means you gave a damping ratio to a spring object which isn't a number.

local speed = 10
local damping = true
local spring = Spring(state, speed, damping)

since v0.1

mistypedSpringSpeed

The speed of a spring must be a number. (got a boolean)

This message means you gave a speed to a spring object which isn't a number.

local speed = true
local spring = Spring(state, speed)

since v0.1

mistypedTweenInfo

The tween info of a tween must be a TweenInfo. (got a boolean)

This message shows if you try to provide a tween info to a tween which isn't a TweenInfo:

local tweenInfo = true
local tween = Tween(state, tweenInfo)

since v0.2

multiReturnComputed

Returning multiple values from Computeds is discouraged, as behaviour will change soon - see discussion #189 on GitHub.

This message means you returned more than one value from a computed object. There are two ways this could occur; either you're explicitly returning two values (e.g. return 1, 2) or you're calling a function which returns two values (e.g. string.find).

A simple fix is to surround your return expression with parentheses (), or to save it into a variable before returning it.

Learn more by visiting this discussion on GitHub.

local badComputed = Computed(function()
    return 1, 2, "foo", true
end, nil)

since v0.2

springTypeMismatch

The type 'number' doesn't match the spring's type 'Color3'.

Some methods on spring objects require incoming values to match the types previously being used on the spring.

This message means you passed a value to one of those methods, but it wasn't the same type as the type of the spring.

local colour = State(Color3.new(1, 0, 0))
local colourSpring = Spring(colour)

colourSpring:addVelocity(Vector2.new(2, 3))

since v0.1

strictReadError

'thisDoesNotExist' is not a valid member of 'Fusion'.

This message means you tried to access something that doesn't exist. This specifically occurs with a few 'locked' tables in Fusion, such as the table returned by the module directly.

local Foo = Fusion.thisDoesNotExist

since v0.1

unknownMessage

Unknown error: attempt to index a nil value

If you see this message, it's almost certainly an internal bug, so make sure to get in contact so the issue can be fixed.

When Fusion code attempts to log a message, warning or error, it needs to provide an ID. This ID is used to show the correct message, and serves as a simple, memorable identifier if you need to look up the message later. However, if that code provides an invalid ID, then the message will be replaced with this one.


since v0.1

unrecognisedChildType

'number' type children aren't accepted as children in `New`.

This message means you tried to pass something to Children which isn't a valid child. This usually means that you passed something that isn't an instance, array or state object.

local instance = New "Folder" {
    [Children] = {
        1, 2, 3, 4, 5,

        {true, false},

        State(Enum.Material.Grass)
    }
}

Note

Note that state objects are allowed to store nil to represent the absence of an instance, as an exception to these rules.


since v0.1

unrecognisedPropertyKey

'number' keys aren't accepted in the property table of `New`.

This message means, while using New or Hydrate, you specified something in the property table that's not a property name or special key.

Commonly, this means you accidentally specified children directly inside of the property table, rather than using the dedicated Children special key.

local folder = New "Folder" {
    [Vector3.new()] = "Example",

    "This", "Shouldn't", "Be", "Here"
}

since v0.2

unrecognisedPropertyStage

'discombobulate' isn't a valid stage for a special key to be applied at.

Fusion provides a standard interface for defining special keys which can be used to extend the functionality of New or Hydrate.

Within this interface, keys can select when they run using the stage field. If an unexpected value is passed as the stage, then this error will be thrown when attempting to use the key.

local Example = {
    type = "SpecialKey",
    kind = "Example",
    stage = "discombobulate",
    apply = function() ... end
}

local folder = New "Folder" {
    [Example] = "foo"
}
Back to top