SmiðrUI

A lightweight, retained-mode UI toolkit for OpenFL — for building tools, editors, settings screens and in-game interfaces in Haxe.

What is it?

SmiðrUI is a widget toolkit that draws on OpenFL's display list. Every widget is an openfl.display.Sprite that repaints only when it is invalidated — there is no per-frame update loop — so a whole screen of controls costs almost nothing when nothing is changing. Themes and locale are read at paint time, so swapping either re-skins the entire tree at once.

It targets both desktop and mobile (touch scrolling, long-press, and the platform soft keyboard) and ships an optional bridge for HaxeFlixel, so you can drop a UI over a running game with correct viewport, cursor and input handling.

Highlights

Retained & cheap

Repaints on invalidate only — no per-frame work. A dirty set flushes once per frame.

Themeable

Swap palettes at runtime; widgets follow theme slots through UIFill / UITheme.

~40 widgets

Buttons to dockable panels, data grids, tree views, colour pickers, calendars and more.

Desktop & mobile

Touch scroll with fling, long-press-as-right-click, and soft-keyboard (IME) text input.

Flixel bridge

smidr.flixel.FlxSmidr handles viewport matching, cursor and input arbitration.

Localizable

Widgets resolve text through UILocale, so a language swap refreshes every label.

Quick start

Install it, add it to your project.xml, then attach a root and add widgets:

haxelib git smidr https://github.com/MeguminBOT/SmidrUI.git
import openfl.display.Sprite;
import smidr.UIRoot;
import smidr.widgets.UIButton;
import smidr.widgets.UIPanel;

class Main extends Sprite {
	public function new() {
		super();
		var ui = new UIRoot();
		ui.attach(this);

		var panel = new UIPanel(260, 120, PANEL);
		panel.x = panel.y = 40;
		ui.content.addChild(panel);

		var btn = new UIButton("Click me", 180, 34, () -> trace("clicked"), true);
		btn.x = 60; btn.y = 60;
		ui.content.addChild(btn);
	}
}