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.


callbackError

Error in callback: attempt to perform arithmetic (add) on number and string

Thrown by: Computed, ForKeys, ForValues, ForPairs, Contextual

Fusion ran a function you specified, but the function threw an error that Fusion couldn't handle.

The error includes a more specific message which can be used to diagnose the issue.


cannotAssignProperty

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

Thrown by: New, Hydrate

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

Check your privileges

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!


cannotConnectChange

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

Thrown by: OnChange

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


cannotConnectEvent

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

Thrown by: OnEvent

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


cannotCreateClass

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

Thrown by: New

You attempted to create a type of instance that Fusion can't create.

Beta features

Some instances are only creatable when you have certain Studio betas enabled. Check your Beta Features tab to ensure that beta features aren't causing the issue.


cannotDepend

Observer can't depend on Observer.

Thrown by: Observer

You attempted to form a dependency between two graph objects, but either the dependency set or dependent set were frozen.

You might be trying to connect them in the wrong order, or the objects might not be designed to have dependents or dependencies.


cleanupWasRenamed

`Fusion.cleanup` was renamed to `Fusion.doCleanup`. This will be an error in
future versions of Fusion.

Thrown by: doCleanup

You attempted to use cleanup() in Fusion 0.3, which replaces it with the doCleanup() method.


destroyedTwice

`doCleanup()` was given something that it is already cleaning up. Unclear how to
proceed.

Thrown by: doCleanup

You called doCleanup() on a function or object which carried some code. When that code was run, it attempted to call doCleanup() on the same thing you called with.

Usually, this would result in an infinite loop, because the same code would try to clean itself up over and over again. Because cleanup tasks are only meant to run once, this is invalid behaviour and so this error is thrown instead.

Ensure your code is the rightful owner of scopes that it is trying to clean up. In particular, avoid cleaning up scopes you receive from elsewhere, unless you and the original provider of the scope agree to transfer the responsibility of cleaning up the scope.


destructorRedundant

Computed destructors no longer do anything. If you wish to run code on destroy,
`table.insert` a function into the `scope` argument. See discussion #292 on
GitHub for advice.

Thrown by: Computed, ForKeys, ForValues, ForPairs

Related discussions: #292

You passed an extra parameter to the constructor, which has historically been interpreted as a function that runs when a value is cleaned up.

This mechanism has been replaced by scopes.


forKeyCollision

The key '6' was returned multiple times simultaneously, which is not allowed in
`For` objects.

Thrown by: ForKeys, ForPairs

When called with different items from the table, the same key was returned for both of them. This is not allowed, because keys have to be unique in a table.


invalidAttributeChangeHandler

The change handler for the 'Active' attribute must be a function.

Thrown by: AttributeChange

AttributeChange expected you to provide a function for it to run when the attribute changes, but you provided something other than a function.

For example, you might have accidentally provided nil.


invalidAttributeOutType

[AttributeOut] properties must be given Value objects.

Thrown by: AttributeOut

AttributeOut expected you to give it a value, but you gave it something else.


invalidChangeHandler

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

Thrown by: OnChange

OnChange expected you to provide a function for it to run when the property changes, but you provided something other than a function.

For example, you might have accidentally provided nil.


invalidEventHandler

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

Thrown by: OnEvent

OnEvent expected you to provide a function for it to run when the event is fired, but you provided something other than a function.

For example, you might have accidentally provided nil.


invalidOutProperty

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

Thrown by: Out

The property that you tried to output doesn't exist on the instance that Out was used with.


invalidOutType

[Out] properties must be given Value objects.

Thrown by: Out

Out expected you to give it a value, but you gave it something else.


invalidPropertyType

'Frame.BackgroundColor3' expected a 'Color3' type, but got a 'Vector3' type.

Thrown by: New, Hydrate

You attempted to assign a value to a Roblox instance's property, but the assignment threw an error because that property doesn't accept values of that type.


invalidRefType

Instance refs must be Value objects.

Thrown by: Ref

Ref expected you to give it a value, but you gave it something else.


invalidSpringDamping

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

Thrown by: Spring

You provided a damping ratio that the spring doesn't support, for example NaN, or a negative damping implying negative friction.


invalidSpringSpeed

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

Thrown by: Spring

You provided a speed multiplier that the spring doesn't support, for example NaN or a negative speed implying the spring moves backwards through time.


mergeConflict

Multiple definitions for 'Observer' found while merging.

Thrown by: scoped

Fusion tried to merge together multiple tables, but a key was found in more than one of the tables, and it's unclear which one you intended to have in the final merged result.

This can happen subtly with methods such as scoped() which automatically merge together all of their arguments.


mistypedSpringDamping

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

Thrown by: Spring

You provided a damping ratio that the spring couldn't understand. Damping ratio has to be a number.


mistypedSpringSpeed

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

Thrown by: Spring

You provided a speed multiplier that the spring couldn't understand. Speed has to be a number.


mistypedTweenInfo

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

Thrown by: Tween

You provided an easing curve that the tween couldn't understand. The easing curve has to be specified using Roblox's TweenInfo data type.


noTaskScheduler

Fusion is not connected to an external task scheduler.

Fusion depends on a task scheduler being present to perform certain time-related tasks such as deferral, delays, or updating animations. You'll need to define a set of standard task scheduler functions that Fusion can use for those purposes.

Roblox users should never see this error, as Fusion automatically connects to Roblox's task scheduling APIs.


poisonedScope

Attempted to use a scope after it's been destroyed; `doCleanup()` was previously
called on this scope. Ensure you are not reusing scopes after cleanup.

Thrown by: scopes after being passed to doCleanup

If you attempt to read from, or write to, a scope that's been destroyed, this message is shown. After a scope has been cleaned up, your code should forget the reference to it, as it is no longer valid.


possiblyOutlives

The Computed (bound to the PaddingLeft property) will be destroyed before the 
UIPadding instance; the latter is in a different scope that gets destroyed too 
quickly. To fix this, review the order they're created in, and what scopes they 
belong to. See discussion #292 on GitHub for advice. 

Thrown by: Spring, Tween, New, Hydrate, Attribute, AttributeOut, Out, Ref, Computed, Observer

Related discussions: #292

If you use an object after it's been destroyed, then your code can break. This mainly happens when one object 'outlives' another object that it's using.

Because scopes clean up the newest objects first, this can happen when an old object depends on something much newer that itself. During cleanup, a situation could arise where the newer object is destroyed, then the older object runs code of some kind that needed the newer object to be there.

Fusion can check for situations like this by analysing the scopes. This message is shown when Fusion can prove one of these situations will occur.

There are two typical solutions:

  • If the objects should always be created and destroyed at the exact same time, then ensure they're created in the correct order.
  • Otherwise, move the objects into separate scopes, and ensure that both scopes can exist without the other scope.

propertySetError

Error setting property: UIAspectRatioConstraint.AspectRatio set to a
non-positive value. Value must be a positive.

Thrown by: New, Hydrate

You attempted to set a property, but Roblox threw an error in response.

The error includes a more specific message which can be used to diagnose the issue.


scopeMissing

To create Observers, provide a scope. (e.g. `myScope:Observer(watching)`). See
discussion #292 on GitHub for advice.

Thrown by: New, Hydrate, Value, Computed, Observer, ForKeys, ForValues, ForPairs, Spring, Tween

Related discussions: #292

You attempted to create an object without providing a scope as the first parameter.

Scopes are mandatory for all Fusion constructors so that Fusion knows when the object should be destroyed.


springNanGoal

A spring was given a NaN goal, so some simulation has been skipped. Ensure no
springs have NaN goals.

Thrown by: Spring

The goal parameter given to the spring during construction contained one or more NaN values.

This typically occurs when zero is accidentally divided by zero, or some other invalid mathematical operation has occurred. Check that your code is free of maths errors, and handles all edge cases.


springNanMotion

A spring encountered NaN during motion, so has snapped to the goal position.
Ensure no springs have NaN positions or velocities.

Thrown by: Spring

While calculating updated position and velocity, one or both of those values ended up as NaN.

This typically occurs when zero is accidentally divided by zero, or some other invalid mathematical operation has occurred. Check that your code is free of maths errors, and handles all edge cases.


springTypeMismatch

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

Thrown by: Spring

The spring expected you to provide a type matching the data type that the spring is currently outputting. However, you provided a different data type.


stateGetWasRemoved

`StateObject:get()` has been replaced by `use()` and `peek()` - see discussion
#217 on GitHub.

Thrown by: Value, Computed, ForKeys, ForValues, ForPairs, Spring, Tween

Related discussions: #217

Older versions of Fusion let you call :get() directly on state objects to read their current value and attempt to infer dependencies.

This has been replaced by use functions in Fusion 0.3 for more predictable behaviour and better support for constant values.


tweenNanGoal

A tween was given a NaN goal, so some animation has been skipped. Ensure no
tweens have NaN goals.

Thrown by: Tween

The goal parameter given to the tween during construction contained one or more NaN values.

This typically occurs when zero is accidentally divided by zero, or some other invalid mathematical operation has occurred. Check that your code is free of maths errors, and handles all edge cases.


tweenNanMotion

A tween encountered NaN during motion, so has snapped to the goal. Ensure no
tweens have NaN in their tween infos.

Thrown by: Tween

While calculating an updated tween position, the final value contained one or more NaN values.

This typically occurs when zero is accidentally divided by zero, or some other invalid mathematical operation has occurred. Check that your code is free of maths errors, and handles all edge cases.


unknownMessage

Unknown error: attempt to call a nil value

Fusion ran into a problem, but couldn't associate it with a valid type of error. This is a fallback error type which shouldn't be seen by end users, because it indicates that Fusion code isn't reporting errors correctly.


unrecognisedChildType

'string' type children aren't accepted by `[Children]`.

Thrown by: Children

You provided a value inside of [Children] which didn't meet the definition of a child value. Check that you're only passing instances, arrays and state objects.


unrecognisedPropertyKey

'number' keys aren't accepted in property tables.

Thrown by: New, Hydrate

You provided something other than a property assignment (Property = Value) or special key in your property table.

Most commonly, this means you tried to add child instances directly into the property table, rather than passing them into the [Children] special key.


unrecognisedPropertyStage

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

Thrown by: New, Hydrate

You attempted to use a special key which has a misconfigured stage, so Fusion didn't know when to apply it during instance construction.


useAfterDestroy

The Value object is no longer valid - it was destroyed before the Computed that 
is use()-ing. See discussion #292 on GitHub for advice.

Thrown by: Spring, Tween, New, Hydrate, Attribute, AttributeOut, Out, Ref, Computed, Observer

Related discussions: #292

Your code attempted to access an object after that object was destroyed..

Make sure your objects are being added to the correct scopes according to when you expect them to be destroyed. Additionally, make sure your code can detect and deal with situations where other objects are no longer available.

Back to top