Skip to content
/ ui-engine Public

hot-loadable agnostic ui package for desktop apps and rapid prototyping

License

Notifications You must be signed in to change notification settings

zot/ui-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ui-engine

**Version: 0.16.1**

Objects present themselves. You write HTML templates.

This is not your grandfather's web framework. Traditional frameworks build UIs from pages, routes, and components. ui-engine builds UIs from objects that present themselves—a Contact renders as a detail view, a list row, an editor, or a dropdown option depending on context. Same object, different presentations.

Contact object → presents as:
  ├── Contact.DEFAULT.html      (full detail view)
  ├── Contact.list-item.html    (compact row)
  └── Contact.option.html       (dropdown option)

No frontend JavaScript. No API layers. No state management. Objects ARE the state.

How It Works

-- Backend: domain objects + presenters
Contact = {type = "Contact"}
function Contact:fullName()
    return self.firstName .. " " .. self.lastName
end

ContactPresenter = {type = "ContactPresenter"}
function ContactPresenter:delete()
    app:removeContact(self.contact)
end
<!-- Frontend: just HTML templates with bindings -->
<input ui-value="firstName">
<span ui-value="fullName()"></span>
<button ui-action="save()">Save</button>

Modify objects directly. UI updates automatically. No plumbing required.

Quick Start

./build/ui-engine-demo --port 8000 --dir demo

Open http://localhost:8000 to see the Contact Manager demo.

See demo/README.md for details.

Documentation

  • USAGE.md — Complete guide: bindings, events, path properties, ViewList, namespaces
  • TRADEOFFS.md — When to use ui-engine vs traditional web architecture
  • demo/ — Working examples (Contact Manager, Simple Adder)

Key Features

  • Declarative bindingsui-value, ui-action, ui-view, ui-html, ui-attr-*, ui-class-*
  • Automatic change detection — no observer pattern, no boilerplate
  • Hot-reloading — edit backend code or templates, see changes instantly (state preserved)
  • ViewList — automatic presenter wrapping for collections
  • Namespace system — multiple views per type (list-item, detail, etc.)

Best For

  • Desktop applications — Electron-style apps without the complexity
  • Internal tools — Admin panels, dashboards, dev tools
  • Kiosk/embedded UIs — Local displays, point-of-sale, industrial HMI
  • Rapid prototyping — Get from idea to working UI in minutes

The reactive WebSocket architecture assumes low latency between client and server, making it ideal for local or LAN deployments rather than internet-scale web apps.

Current Focus

Embedded Lua backend for the frictionless project. The architecture supports other backends (Go, proxied external programs) but Lua is the priority.

About

hot-loadable agnostic ui package for desktop apps and rapid prototyping

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •