FluxFast and easy interfaces for Luau.
Be lazy. Do more. Go fast.
Flux leans on Luau's type checker so your editor does the heavy lifting. When you declare a TextLabel or Frame, you get autocomplete for every valid property, event, and expected type.
Every reactive node supports __call and operator overloading, so reading and writing state takes no extra ceremony. Call count() to read and count(1) to write. Arithmetic, comparison, and string interpolation track dependencies automatically, so reactive expressions read like normal Luau.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Flux = require(ReplicatedStorage.Flux)
local new = Flux.new
local count = Flux(0)
new "ScreenGui" {
Parent = playerGui,
new "TextButton" {
Size = UDim2.fromOffset(200, 50),
Text = function() return `Clicks: {count}` end,
Activated = function() count(count + 1) end,
},
}Dormant computations sleep with zero subscriptions until something observes them. Active bindings batch updates once per frame and run in dependency order. If a computed value doesn't change, downstream bindings don't re-run.