Installation
Install, scaffold a project, and run it.
Requirements
Node.js 26 or newer. Node runs your TypeScript directly by stripping the types, which is why there is no build step. It also limits you to syntax Node can strip, so you cannot use enum.
Creating a project
npm create ohne my-appnpm create ohne asks for the project name, whether to add a website, the package manager, and whether to initialize a git repository. To skip the prompts in CI or a script, pass flags.
A Nuxt or Next website makes the project a monorepo, with your app and the website side by side. This page follows the app alone.
First run
cd my-app
npm run devohne dev starts the dashboard at http://localhost:9000 and the API at http://localhost:9001, then reloads as you save. Open the dashboard and create the first user - that account gets the admin role.
The project files
npm create ohne writes four files:
import { defineConfig } from 'ohnejs';
export default defineConfig({
layers: ['ohnejs/base'],
auth: { cookieName: 'my-app-session' },
});ohne.config.ts- the project's config, and what marks the directory as an ohne project.layers: ['ohnejs/base']puts the framework's own layer under your app. The session cookie is named after the project, since two apps on one machine would otherwise sign each other out.package.json- scripts fordevand the rest of the CLI.ohnejsis the only dependency; TypeScript is there to type-check, never to compile.tsconfig.json- type-checks your Node code against the config ohne ships.dashboard/is browser code and gets a config of its own when you add one..gitignore- keeps dependencies, generated files, the local database, and.envout of git.
ohne dev also writes .ohne/, the types it generates from your project. ohne rebuilds it when needed, so you never edit it.
Next, Directory structure shows where the rest of your app will live. Then the tutorial builds your first app: a collection, two endpoints, and a dashboard page.