Fusion (v0.3.0) Package Download: Fusion.rbxm (48.6 KB)
You can quickly install Fusion versions 0.4.0+ via the Settings menu.
ℹ️ About
What is FFusion?
FFuse takes any selected UI hierarchy in your workspace or PlayerGui and instantly serializes it into a clean, readable Fusion ModuleScript. It also automatically handles property mapping (including complex types like UDim2, Color3, Enum, NumberSequence, and Font).
Key Features
- Full Property & Children Serialization: Converts your entire UI layout and its properties into native
:Newsyntax. - Smart Studio Preview Mode: For
ScreenGuiroots, FFuse intelligently wraps elements so you can preview your UI directly inside Studio without needing aScreenGuiwrapper cluttering things, while still allowing full deserialization back into instances. - Dependency Auto-Discovery: Automatically finds and hooks up your
Fusionpackage whether it’s located in Packages, ReplicatedStorage, or deeper hierarchies. - Storybook Integration: Instantly generate Storybook-compatible story files (
.story) for your components with a single click. - And several other more features in upcoming updates!
📦 Output (Example)
Example Output
Here is a quick look at what a generated Fusion module looks like:
--!strict
local RunService = game:GetService("RunService")
--> Fusion API: https://elttob.uk/Fusion/0.3/
local Fusion = require(game.ReplicatedStorage.Modules.Fusion)
local isPreview = RunService:IsStudio() and not RunService:IsRunning()
return function(props): any
local scope = Fusion.scoped(Fusion)
local elements = {
scope:New "TextButton" {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromRGB(143, 255, 74),
Font = Enum.Font.Unknown,
FontFace = Font.new("rbxasset://fonts/families/Roboto.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
Position = UDim2.fromScale(0.5, 0.5),
Size = UDim2.fromOffset(200, 64),
Text = "Submit Button",
TextColor3 = Color3.fromRGB(17, 93, 12),
TextSize = 22,
[scope.Children] = {
scope:New "UICorner" {
CornerRadius = UDim.new(0, 8)
},
}
},
}
if isPreview and not (props and props.__ffuseOverride) then
return elements
end
return scope:New "ScreenGui" {
ResetOnSpawn = false,
[scope.Children] = elements,
}
end
Why is it dynamic?
→ ScreenGui’s are not directly viewable in Stories.
Feedback & Contributions
I’d love to hear what you all think! Let me know if you run into any issues with specific UI properties or edge cases, or if you have suggestions for other features you’d like to see added.
The GitHub page is where you can submit Issues or Suggest Changes
