Skip to main content

Getting Started

Welcome to Wunderframe! This guide will help you build your first web application using LUAT templating and modern development tools.

What is Wunderframe?​

Wunderframe is a modern web development platform that combines:

  • 🎨 LUAT Templating - Server-side rendering with Svelte-inspired syntax
  • ⚡ Zero Configuration - Pre-configured TailwindCSS, esbuild, and TypeScript
  • 🧩 Component Architecture - Reusable templates and modular design
  • 🚀 Modern Stack - Alpine.js, HTMX, and built-in development tools

Quick Start​

1. Install the CLI​

npm install -g @solutas/wunder-cli

2. Create Your First Project​

wunder init my-first-app
cd my-first-app

This creates a project with this structure:

my-first-app/
├── app.lua # Application entry point
├── app.js # Frontend JavaScript
├── app.css # Global styles with TailwindCSS
├── lib/ # LUAT components and utilities
└── src/ # Frontend source files

3. Create Your First Component​

Create lib/components/Hello.luat:

<script>
local name = props.name or "World"
local greeting = "Hello, " .. name .. "!"
</script>

<div class="p-6 bg-blue-50 rounded-lg">
<h1 class="text-2xl font-bold text-blue-900">{greeting}</h1>
<p class="text-blue-700 mt-2">Welcome to Wunderframe!</p>
</div>

4. Use the Component​

Update lib/pages/Home.luat:

<script>
local Hello = require("lib/components/Hello")
</script>

<html>
<head>
<title>My First Wunderframe App</title>
</head>
<body>
<Hello name="Developer" />
</body>
</html>

5. Start Development​

wunder dev

Your app is now running with hot reloading! 🎉

Key Concepts​

LUAT Templates​

LUAT uses familiar Svelte-like syntax for building dynamic templates:

<!-- Expressions -->
<h1>{props.title}</h1>

<!-- Conditionals -->
{#if user.isLoggedIn}
<p>Welcome back, {user.name}!</p>
{:else}
<p>Please log in</p>
{/if}

<!-- Loops -->
<ul>
{#each items as item}
<li>{item.name}</li>
{/each}
</ul>

<!-- Components -->
<Card title="Example">
<p>Card content goes here</p>
</Card>

Script Blocks​

Use script blocks to import components and prepare data:

<script>
local Card = require("components/Card")
local Button = require("components/Button")

local title = props.title or "Default Title"
local isActive = props.status == "active"
</script>

<Card title={title}>
<Button variant={isActive and "primary" or "secondary"}>
Click me
</Button>
</Card>

Zero Configuration​

Wunderframe comes pre-configured with:

  • TailwindCSS for styling
  • TypeScript for type safety
  • esbuild for fast bundling
  • Alpine.js for reactivity
  • HTMX for server interactions

No configuration files needed!

Built-in Functions​

Access content and make HTTP requests with built-in functions:

-- Get content nodes
local node = get_node("stories/example")
local children = get_children("stories/blog")

-- Make HTTP requests
local response = http.get("https://api.example.com/data")

-- Logging
log("info", "User action completed")

-- JSON handling
local json = require("json")
local data = json.encode({ message = "Hello" })

Next Steps​

Now that you have a basic understanding, explore these topics:

Core Concepts​

Building Applications​

Community & Support​


Ready to build something amazing? Try the playground or continue with the LUAT Templating guide.