Search pages, headings and code across the docs, examples and tutorials.

to navigateto open

Documentation

ohne is a zero-dependency TypeScript framework for the web. It gives you a database, an HTTP API, internationalization, and a dashboard, with no build step. The framework ships .ts source, your app is .ts source, and Node 26 runs both directly. What you write is what runs.

Start here

New to ohne? Read these in order:

Project

How a project is put together - the config file, the CLI, and the layer system that lets one project extend another.

Database

Declare your data as collections of fields. ohne keeps the schema in sync with your code and gives you a typed query builder for reads and writes.

HTTP API

Define endpoints as files. Handlers read the request and return a value ohne serializes for you.

Auth

Email and password accounts, sessions, roles, and the helpers to protect a route. Shipped by the ohnejs/base layer, so an app opts out by not stacking it.

Internationalization

Two independent systems: message catalogs for your UI strings, and content locales for your data (covered in translations).

Dashboard

A browser UI for your app, served by ohne with no build step. Pages are .ts modules that ship to the browser as type-stripped JavaScript.

Uploads

An optional layer for files: storage with a backend you can replace, an Uploads collection, upload and serve routes, media fields, and the dashboard's Media page.

CMS

An optional layer that makes your app the CMS for a website built with any framework, with a live editor that shows the website as you type.

Assistant

An optional layer that puts an assistant behind Cmd+K. It proposes requests, the person approves them, and their own browser sends them, so it never does more than the person can.

Production

Your app deploys as the source you wrote, with no build step.