l4ud/egooe

EgooE - A modular UI widget library for Roblox

iris-plasma (improved-garbanzo)

An immediate-mode UI framework for Roblox with Iris visual style and a Plasma-compatible API.

Features

  • Plasma-compatible API – same useInstance, useState, useEffect, useKey, scope, widget, window, etc.
  • Iris dark theme – Dear ImGui inspired color palette (dark blues, accent blues, transparent frame backgrounds)
  • No automatic sizing – all widgets have explicit, fixed pixel sizes (unlike Plasma)
  • Modern Roblox UIUICorner, UIStroke, UIListLayout, ScrollingFrame used throughout

Installation

Install with Wally by adding to your wally.toml:

EgooE = "capedbojji/iris-plasma@0.1.1"

Or sync with Rojo using default.project.json.

Demo Window

The quickest way to see all widgets in action — just call demoWindow() inside your start loop:

local EgooE = require(path.to.EgooE)
local node = EgooE.new(playerGui.ScreenGui)

RunService.Heartbeat:Connect(function()
    EgooE.start(node, function()
        EgooE.demoWindow()
    end)
end)

This opens a 340×580 window covering every widget category: Text (label, heading, wrapped text) · Buttons (normal, sized, disabled) · Checkboxes (controlled, uncontrolled, disabled) · Sliders · Text Input · Row layouts · Separators · Conditional visibility toggle

Quick Start

local EgooE = require(path.to.EgooE)

local node = EgooE.new(playerGui.ScreenGui)

RunService.Heartbeat:Connect(function()
    EgooE.start(node, function()
        EgooE.window("Demo", function()
            EgooE.heading("Hello, Iris!")
            EgooE.separator()
            EgooE.label("This is a label.")

            if EgooE.button("Click me"):clicked() then
                print("Button clicked!")
            end

            local checked = EgooE.checkbox("Toggle me"):checked()
            local value   = EgooE.slider({ min = 0, max = 100, label = "Speed" })

            local handle = EgooE.input({ placeholder = "Type something..." })
            if handle:changed() then
                print("Input:", handle:value())
            end
        end)
    end)
end)

Widgets

WidgetDescription
windowDraggable, resizable, scrollable window
buttonIris-styled click button
checkboxControlled/uncontrolled checkbox
sliderHorizontal range slider
inputText input box
labelSingle-line text display
headingBold section heading
separatorHorizontal divider line
rowHorizontal layout container
spaceBlank pixel spacer
portalMount children in an arbitrary Instance
demoWindowLive showcase of every widget (zero setup)

Style

The Iris dark theme is applied by default. Override any values per-scope with setStyle:

EgooE.setStyle({
    buttonColor = Color3.fromRGB(200, 60, 60),
})
EgooE.button("Danger")

API

Identical to Plasma:

EgooE.new(rootInstance)
EgooE.start(node, fn)
EgooE.beginFrame(node, fn) / continueFrame(handle, fn) / finishFrame(node)
EgooE.scope(fn)
EgooE.widget(fn)
EgooE.useState(initial)
EgooE.useInstance(creator)
EgooE.useEffect(callback, ...deps)
EgooE.useKey(key)
EgooE.createContext(name) / provideContext(ctx, val) / useContext(ctx)
EgooE.useStyle() / setStyle(fragment)