v1.2 — Now with Filters, Markdown, and more

Build static sites
like it's the future.

Components, layouts, loops, conditionals — all the power of modern frameworks, compiled to pure static HTML. Zero runtime. Zero JavaScript. Just HTML.

$ npm install orblayout

Everything you need.
Nothing you don't.

OrbLayout gives you modern component architecture without the bloat of JavaScript frameworks.

🧩

Component System

Create reusable HTML components with props. Nest them infinitely. Import them with custom aliases.

📐

Layout Engine

Define page layouts once, reuse everywhere. Named slots let you inject content into multiple areas.

🔄

Loops & Conditionals

{{#each}} for iteration, {{#if}}/{{#unless}} for conditionals. Built-in @index, @first, @last helpers.

Pipe Filters

Transform data with {{ title | uppercase }}, {{ name | slugify }}, {{ text | truncate }} and more.

📝

Markdown Blocks

Write <markdown> blocks right in your .orb files. Headers, bold, links, lists — auto-converted to HTML.

🔥

Live Reload Dev Server

Built-in dev server with SSE-based live reload. Edit a file, see changes instantly. No config needed.

🎨

Scoped Styles

Add <style> blocks in components. Styles are auto-collected and injected into the page <head>.

🚀

Zero Runtime

Output is pure, clean HTML. No JavaScript bundle. No hydration. Just static files ready to deploy anywhere.

Build in Milliseconds

Compile hundreds of pages in under 100ms. No Webpack, no Vite, no Rollup. Just Node.js doing its thing.

Familiar syntax.
Powerful output.

Write .orb files that look like HTML. The compiler handles the rest.

pages/index.orb
<!-- Define page data -->
<script data>
({
  title: "Home",
  features: ["Fast", "Simple", "Powerful"]
})
</script>

<!-- Use a layout -->
<layout src="main.layout">
  <content>
    <h1>Welcome to {{ title }}</h1>

    <!-- Use a component -->
    <use component="hero"
      heading="Hello World" />

    <!-- Loop over data -->
    {{#each features}}
      <li>{{ this }}</li>
    {{/each}}
  </content>
</layout>
dist/index.html ✓
<!DOCTYPE html>
<html>
<head>
  <title>Home</title>
</head>
<body>

  <!-- header component rendered -->
  <header>...</header>

  <main>
    <h1>Welcome to Home</h1>

    <!-- hero component inline -->
    <section>Hello World</section>

    <!-- each loop expanded -->
    <li>Fast</li>
    <li>Simple</li>
    <li>Powerful</li>
  </main>

  <!-- footer component rendered -->
  <footer>...</footer>

</body>
</html>

Complete language at a glance.

All the syntax features available in OrbLayout v1.2.

📐 Layout

<layout src="main.layout"> <content> <h1>Page content here</h1> </content> </layout>

🧩 Component

<use component="card" title="Hello" description="World" />

📦 Import

<import component="card" as="Card" /> <Card title="Hey" />

🔁 Loop

{{#each items}} <li>{{ @number }}. {{ this }}</li> {{/each}}

❓ Conditional

{{#if loggedIn}} <button>Logout</button> {{else}} <button>Login</button> {{/if}}

🔧 Filters

{{ title | uppercase }} {{ name | slugify }} {{ text | capitalize | trim }}

📊 Data Block

<script data> ({ title: "My Page", items: ["A", "B", "C"], showNav: true }) </script>

📝 Markdown

<markdown> # Hello World This is **bold** and *italic*. [Link](https://example.com) </markdown>

📌 Named Slots

<layout src="docs.layout"> <content>Main content</content> <slot:sidebar> Side navigation </slot:sidebar> </layout>

🔍 With Scope

{{#with author}} <h3>{{ name }}</h3> <p>{{ bio }}</p> {{/with}}

Simple build pipeline.

From .orb files to static HTML in milliseconds.

Write .orb files

Create pages, components, and layouts using familiar HTML enhanced with OrbLayout syntax.

Run orb build

The compiler reads pages, resolves layouts, injects components, processes loops & conditionals.

Get pure HTML

Output is clean, static HTML files. No JavaScript. No runtime. Deploy anywhere instantly.

Deploy anywhere

GitHub Pages, Netlify, Vercel, S3, or any web server. Just upload the dist/ folder.

Powerful CLI. Zero config.

Everything you need from a single orb command.

$ npm install orblayout

Install OrbLayout globally or as a project dependency.

$ npx orb init

Scaffold a new project with pages, components, layouts, and config.

$ npx orb build

Compile all .orb pages to static HTML in the dist/ folder.

$ npx orb build --minify

Build with HTML/CSS/JS minification for production deployment.

$ npx orb dev

Start dev server with live reload at localhost:3000.

$ npx orb dev --port 8080

Use a custom port for the development server.

$ npx orb clean

Remove the dist/ output folder for a clean rebuild.

$ npx orb help

Show all available commands and options.

Use as a library too.

Import OrbLayout into your own Node.js scripts for custom build pipelines.

build-script.js
const { loadConfig, OrbBuilder, OrbCompiler } = require("orblayout");

// Load config from current directory
const config = loadConfig(process.cwd());

// Option 1: Build all pages
const builder = new OrbBuilder(config);
builder.build().then(result => {
  console.log(`Built ${result.pages} pages in ${result.time}ms`);
});

// Option 2: Compile a single page
const compiler = new OrbCompiler(config);

// Register custom filters
compiler.registerFilter("shout", v => v + "!!!");

const html = compiler.compilePage("pages/index.orb");
console.log(html);

Why OrbLayout?

All the DX of modern frameworks. None of the bloat.

Feature OrbLayout Plain HTML React / Next Hugo
Components
Layouts
Props Partial
Loops & Conditionals
Pipe Filters Partial
Markdown Plugin
Zero JS Runtime
No Build Toolchain
Learning Curve Low None High Med
Live Reload
Output Size Tiny Tiny Large Tiny

Transform data inline.

Use pipe syntax to transform variables on the fly.

uppercase

{{ title | uppercase }} → "HELLO"

lowercase

{{ title | lowercase }} → "hello"

capitalize

{{ name | capitalize }} → "Hello"

slugify

{{ title | slugify }} → "hello-world"

truncate

{{ text | truncate }} → "Hello wo..."

escape

{{ html | escape }} → "&lt;div&gt;"

json

{{ data | json }} → '{"key":"val"}'

reverse

{{ text | reverse }} → "olleH"

number

{{ price | number }} → "1,234,567"

encode

{{ url | encode }} → "hello%20world"

trim

{{ text | trim }} → "hello"

length

{{ items | length }} → "5"

Start building with OrbLayout today.

Install in seconds. Deploy in minutes. No framework fatigue.

$ npm install orblayout