Skip to main content
Aero is a static site generator (and optional full-stack framework) built around plain HTML. You write .html files with optional <script> and <style> blocks, Aero compiles them at build time, and you get a dist/ folder you can deploy anywhere. When you need more — API routes, server-side logic, deployment adapters — you opt into Nitro. Nothing is forced on you. It looks like this:
pages/index.html

Key features

File-based routing

client/pages/about.html becomes /about. Dynamic routes use [param].html and getStaticPaths().

Components & layouts

Import .html templates and use them as <name-component> or <name-layout> in your markup.

Loops & conditionals

Use for, if, else-if, else, and switch directives with { } expressions directly in markup.

Content collections

Put data in content/. Use getCollection() and render() for Markdown-driven pages.

Slots

Layouts expose <slot> for page content. Named slots and slot passthrough let you thread content through nested layouts.

HMR everywhere

CSS, HTML, content, and client scripts all hot-reload in dev. Powered by Vite.

Optional reactivity

Opt into <script is:state>, bindings, and reactive props — no Virtual DOM, no mandatory runtime.

Hypermedia actions

GET / POST fragment swaps with lifecycle events when you enable hypermedia: true.

Who it’s for

Aero is a good fit if you:
  • Want to write HTML, CSS, and JavaScript without a framework abstraction in the way
  • Need a fast static site with no runtime or hydration overhead
  • Want to use HTMX or Alpine.js for interactivity without fighting a compiler
  • Occasionally need API routes but don’t want to commit to a full server framework

Core ideas

HTML-first authoring. Pages, layouts, and components are .html files. The only additions are { } expressions for interpolation and a handful of directives (if, for, slot). The source looks like HTML; the output is HTML. Static by default. pnpm build produces a plain dist/ folder. No framework runtime ships to the browser. Deploy to any static host, or open via file://. Optional full-stack with Nitro. Set server: true in your config to enable Nitro — file-based API routes under server/api/, universal deployment presets, and a preview:api command. You get API routes from the same project without changing how you write pages. Zero runtime. Build-time code lives in <script is:build> and is completely stripped from output. Client scripts are plain <script> tags, bundled by Vite. No hydration orchestrator, no Virtual DOM.

Core stack

External references: Vite, Nitro, HTMX, Alpine.js.

Packages

Aero is published as a set of focused packages:

@aero-js/core subpath exports

Most projects only need @aero-js/core (import subpaths as needed) or @aero-js/create to scaffold. The other packages are opt-in.

Next steps

Installation

Scaffold your first project and have a site running in minutes.

Project structure

Learn how pages, layouts, components, and content are organized.

Reactivity

Client state and bindings with <script is:state>.

Hypermedia

Server fragment swaps with GET / POST actions.