Built independently. Built to ship.

The Niral
web framework.

From the first line to the full stack.
A compiler, a server, and everything in between.
Zero runtime dependencies.

npx create-niral my-appNode.js 22+
01Write a componentHTML, CSS & JavaScript.niral
02Let the compiler workDirect DOM + server-rendered HTML
03Run it on your termsOne process. Your infrastructure.

Small by design

A little code.
A lot of possibility.

Familiar syntax. Fine-grained reactivity.
No virtual DOM standing between
your idea and the browser.

Component guide
routes/counter.niral
<script>
  let count = $state(0)
  let doubled = $derived(count * 2)
</script>

<button on:click={() => count--}>−</button>
<strong>{count}</strong>
<button on:click={() => count++}>+</button>

<p>Doubled: {doubled}</p>
Live previewNiral runtime

A little state goes a long way.

0

$derived 0 × 2 = 0

Compiled to direct DOM updatesNo virtual DOM. No runtime dependencies.

One connected stack

The pieces fit.
Because they belong together.

Not a shopping list of packages.
The capabilities your application needs,
built into the framework.

Server functions

Your backend.
One function call away.

Load data, call typed RPCs, stream responses, or submit forms without JavaScript. The server code stays on the server.

SERVERexport async function save(data) {
return { ok: true }
}
CLIENTawait save(data)
Server functions
Authentication

A proper welcome.
A secure way in.

Passkeys, OAuth, two-factor authentication and route guards. Scaffolded into code you own.

Passkeys
OAuth
Two-factor
Authentication
Database
SQLitetoPostgres

Small start. Room to grow.

SQLite by default. Postgres with built-in TLS when you need more. Migrations included.

Data & scaling
Realtime
publish()
BrowserPhoneBrowser

Keep every screen in sync.

Live channels over framework-owned WebSockets, with session-aware access guards.

Realtime channels
Jobs & cron
QueuethenRetrythenDone

Work that keeps working.

Durable jobs, schedules, backoff and dead letters. Survives deploys. No Redis required.

Background jobs
TypeScript

Real compiler. Real confidence.

Type checking with the actual TypeScript compiler. Diagnostics map to your .niral lines.

TypeScript support
Polyglot

Your language. Same framework.

Write server blocks in Python, Ruby or Go. Keep the same sessions, components and RPC.

Polyglot backends
AI & retrieval

Choose your model.

Chat, streams, embeddings and RAG. OpenAI-compatible endpoints or a local llama.cpp option.

AI integrations

All of this. Zero runtime dependencies.No dependency tree to maintain. Every line that runs is a line you can read.

"dependencies": {}

Built to do less work

The compiler does more.
Your server does less.

Direct DOM instructions in the browser.
String-concatenated HTML on the server.
Less machinery between a request and a response.

6.6ms1,000-row hydration
0.2sProduction build
~200MBMemory under load
Read the methodology

Dynamic SSR

requests / second
Niral2,374
SolidStart1,885
Astro698
SvelteKit599
Next.js303

1,000 rows · 100 connections · Production-mode servers
Same-machine measurements, not VPS capacity. Results vary with hardware and load.

Reproduce the benchmark

No platform required

Your app.
Your way to production.

One $5 server is a perfectly good destination.
So is a fleet. Start with what you need.

Your server. Your infrastructure.

Generate the systemd, nginx and atomic-release kit. Deploy to a VPS you control, with rollback built in.

Self-hosting guide
Terminal
niral build
niral deploy
Atomic releases. One-symlink rollback.

Make it yours

A good place to begin.

All documentation