Docs

Getting started

Install Niral with Node.js 22+, create your first full-stack app, choose a starter template and learn the commands for development, testing and deployment.

Agent starter kit

VS CodeJetBrainsClaude CodeCodex
View prompt

On this page 5 sections

நிரல் (Niral, Tamil for "program") is a full-stack web framework with zero dependencies — compiler, signals runtime, router, SSR, WebSockets, auth, jobs, mail and AI helpers are all built on the Node standard library. Node 22+ is the only requirement.

Install

The fastest way — one command, like you'd expect:

npx create-niral my-app

That downloads the framework once to ~/.niral/framework (zero runtime dependencies) and installs a niral command. To start immediately in the same terminal:

cd my-app
npx niral dev

Open a new terminal to use the generated niral command after its zsh/bash PATH update. For other shells, add the install's bin directory to PATH or keep using npx niral. Set NIRAL_HOME to choose another install directory; keep projects outside it. Normal commands reuse the cached framework.

For a global npm launcher, choose either npm install -g niral or npm install -g create-niral, not both: they expose the same executable names. See CLI updates for the separate framework update workflow. No npm? Use the installer:

curl -fsSL https://niral.site/install.sh | bash

Or go direct — a git clone IS the framework:

git clone https://github.com/Zyora-Dev/niral.git
alias niral="node $PWD/niral/bin/niral.js"   # add to your shell profile

Either way, nothing runs on anyone else's servers — no account, no cloud, no telemetry. Your app is yours.

Create an app

niral create my-app
cd my-app
niral dev            # http://localhost:5199 — HMR, error overlays

The scaffold is a real working app: a server-rendered page with reactive state, a keyed list, and a server function called over RPC.

Starter templates

Prefer to learn from a fuller example? Pass --template:

niral create my-blog --template blog        # posts + dynamic [slug] routes + a data module
niral create my-app  --template dashboard   # a sidebar layout, stat cards, a live-refresh RPC
niral create my-app  --template minimal     # the default — SSR + state + RPC

Each is small and heavily commented — they teach the core patterns by example, not a giant app to wade through.

One file, whole feature

A route is a single .niral file. Server code, client logic, markup and styles live together — the compiler splits them:

<server>
export async function load() {
  return { greeting: "வணக்கம்" }        // runs on the SERVER, SSR'd into props
}
export async function save(text) {      // callable from the client — RPC stub
  return { ok: true }
}
</server>

<script>
  let { greeting } = $props
  let count = $state(0)
</script>

<h1>{greeting} — {count}</h1>
<button on:click={() => count++}>+1</button>

<style>
  h1 { color: rebeccapurple; }          /* scoped to this component */
</style>

Server code never ships to the browser — save becomes a typed fetch stub, and reading process.env in client code is a compile error.

Commands you'll use daily

CommandWhat it does
niral devdev server — compile on demand, HMR with state preservation
niral checkreal TypeScript checking (after niral add typescript)
niral buildcontent-hashed release, atomically activated
niral startproduction server for dist/current
niral exportprerender to static files
niral add <recipe>tailwind, auth, chat, sqlite, image, llm …