Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - corepunch/orca: Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML. · GitHub
Skip to content

Repository files navigation

81721baf-2b92-41fd-9092-3f1e0c140b79

Installation

Quick Install with LuaRocks

The easiest way to install ORCA is via LuaRocks:

luarocks install orca

Then in your Lua code:

localorca=require"orca"localui=require"orca.UIKit"

See LUAROCKS.md for detailed LuaRocks installation and usage instructions.

Manual Installation

Linux

To install the required dependencies on Linux, run the following commands:

sudo apt update && sudo apt install -y \
libpng-dev \
libfreetype6-dev \
libjpeg-dev \
liblua5.4-dev \
libxml2-dev \
liblz4-dev \
zlib1g-dev \
libcurl4-openssl-dev \
libwayland-dev \
libegl1-mesa-dev \
libgles2-mesa-dev

For Fedora, use:

sudo dnf install -y \
libpng-devel \
freetype-devel \
libjpeg-turbo-devel \
lua-devel \
libxml2-devel \
lz4-devel \
zlib-devel \
libcurl-devel

For Arch Linux, use:

sudo pacman -S libpng freetype2 libjpeg-turbo lua libxml2 lz4 zlib curl

macOS

To install dependencies on macOS, use Homebrew:

brew install libpng freetype jpeg-turbo lua libxml2 lz4 zlib curl pkg-config

Note: If pkg-config fails to find packages, you may need to run:

brew link --overwrite freetype jpeg-turbo

Building the Project

Before building, you must initialize and update the git submodules to fetch the platform package:

git submodule update --init --recursive

To build the project, run:

make

After building, you can run the example application:

build/bin/orca samples/Example

Or simply use:

make example

The Example sample uses SVG icons sourced from Lucide and the Lucide GitHub repository. See samples/Example/Icons/README.md for the icon asset notes.

Why MoonScript?

ORCA supports multiple approaches for building applications, each with their own strengths:

  • MoonScript: Best for app-building with hot reloading and rapid development
  • XML: Editor-friendly for graphics-heavy applications like instrument clusters (Editor is currently work-in-progress)
  • Pure Lua: Full control with traditional Lua syntax

Benefits Over XML

XML approach (UI screen definition):

<?xml version="1.0"?>
<!DOCTYPEScreen SYSTEM "https://corepunch.github.io/orca/schemas/orca.dtd">
<ScreenName="Application"Height="768"Width="1024">
<TextBlockName="TextBlock"FontSize="40"LayoutTransform="400 20 0 1 1"Text="Hello World"/>
<ImageViewName="Image"Source="Example/Images/peacock"/>
</Screen>

MoonScript approach (clean and expressive):

classApplicationextendsScreenHeight:768Width:1024body:=>
textblock ".text-block",Text:"Hello World",FontSize:40
imageview ".image",Image:"Example/Images/peacock"

More concise syntax
Native language constructs instead of markup
Better for programmatic UI logic

Note: XML remains useful for visual editor workflows and is still required for project configuration files.

Benefits Over Pure Lua

Let's compare the same UI component in both languages using ORCA's framework:

Pure Lua with ORCA (still verbose):

localStackView=require("orca.UIKit").StackViewlocalContactCard=StackView:extend {
apply=function(self)
return"contact-card"end,
body=function(self)
img { src="https://picsum.photos/64" }
stack(".flex-col", function()
p(".contact-card-title", self.user.name)
p(".contact-card-description", "@" ..self.user["$id"])
end)
end
}

MoonScript with ORCA (clean and elegant):

importStackViewfromrequire"orca.UIKit"classContactCardextendsStackViewapply:=>"contact-card"body:=>
img src:"https://picsum.photos/64"
stack ".flex-col",->
p ".contact-card-title",@user.name
p ".contact-card-description","@"..@user["$id"]

Key Advantages:

  1. Native Class Syntax

    • No need to call :extend() explicitly
    • extends keyword is cleaner than method calls
    • @ shorthand for self reduces noise
  2. Implicit Returns

    • No explicit return statements needed
    • Functions automatically return their last expression
  3. Cleaner Method Definitions

    -- Luaapply=function(self)
    return"contact-card"end

    vs

    -- MoonScriptapply:=>"contact-card"
  4. Import/Destructuring

    importAccountfromrequire"model"importApplicationfromrequire"routing"

    vs

    localmodel=require("model")
    localAccount=model.Accountlocalrouting=require("routing")
    localApplication=routing.Application
  5. Arrow Functions & String Interpolation

    • Concise route definitions
    • Less punctuation clutter
    • More readable nested callbacks

Real-World Example: Routing in ORCA

MoonScript makes routing declarations elegant:

classAppextendsApplication"/":=>Layout page.HomePage"/send-money":=>Layout page.SendMoney"/settings":=>Layout page.Settings"/tweets":=>Layout page.Tweets"/new-tweet":=>Layout page.NewTweet"/user/:user":=>Layout page.ContactDetails,@params"/transaction/:transaction":=>Layout page.TransactionDetails,@params"/search":=>SearchPage!

Same in pure Lua:

localApp=Application:extend({
["/"] =function(self)
returnLayout(page.HomePage)
end,
["/send-money"] =function(self)
returnLayout(page.SendMoney)
end,
["/settings"] =function(self)
returnLayout(page.Settings)
end,
["/tweets"] =function(self)
returnLayout(page.Tweets)
end,
["/new-tweet"] =function(self)
returnLayout(page.NewTweet)
end,
["/user/:user"] =function(self)
returnLayout(page.ContactDetails, self.params)
end,
["/transaction/:transaction"] =function(self)
returnLayout(page.TransactionDetails, self.params)
end,
["/search"] =function(self)
returnSearchPage()
end
})

Notice: 8 lines in MoonScript vs 24 lines in Lua for the exact same routing logic!

The Bottom Line

Even with ORCA's simplified extend() API, MoonScript gives you:

  • 40-60% less code than equivalent Lua
  • Cleaner class definitions without manual table construction
  • Compiles to readable Lua (easy to debug, uses your extend() under the hood)
  • Full Lua compatibility (use any Lua library)
  • Perfect for UI/DSL code with clean component structure

Explore the sample applications to see these approaches in action.

Installing LuaRocks and MoonScript

LuaRocks is Lua's package manager, and MoonScript is a programming language that compiles to Lua with a more elegant, Python-like syntax.

Linux

First, install LuaRocks:

# Ubuntu/Debian
sudo apt install -y luarocks
# Fedora
sudo dnf install -y luarocks
# Arch Linux
sudo pacman -S luarocks

Then install MoonScript via LuaRocks:

sudo luarocks install moonscript

macOS

Using Homebrew:

brew install luarocks
luarocks install moonscript

Verifying Installation

Check that MoonScript is installed correctly:

moonc -v

Module XML Files

ORCA uses XML files to define the API interface between C modules and Lua. See the Module XML Guide for comprehensive documentation on creating and maintaining module XML files.

To regenerate C bindings and documentation from module XML files:

make modules

Setting Up VSCode XML Autocomplete

For better XML editing experience in VSCode with autocomplete and validation:

  1. Install the Red Hat XML extension in VSCode

  2. Create a .vscode/settings.json file in your project directory (e.g., samples/Example/.vscode/settings.json):

{
"xml.fileAssociations": [
{
"pattern": "**/Prefabs/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Screens/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Materials/*.xml",
"systemId": "../../tools/schemas/orca.dtd"
},
{
"pattern": "**/Shaders/*.xml",
"systemId": "../../tools/schemas/shader.dtd"
}
]
}

Note: The paths in systemId are relative to the project directory. Adjust them based on your project structure relative to the tools/schemas/ directory.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Modern UI framework for Lua: declarative components, routing, Tailwind-style utilities, and cross-platform rendering. Write less code with MoonScript or XML.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages