- Node.js >= 22
From anywhere:
npx railnode create-app my-app
cd my-app
npm install
npm run devThis scaffolds:
src/index.ts(starts the server)src/models/*.model.ts(models)src/routes/*.route.ts(manual routes)backend.config.mjs(optional config)
- Models are loaded from (first match wins):
dist/models(when you build)src/models(dev)
- Routes are loaded from:
dist/routes(when you build)src/routes(dev)
The defaults can be overridden via backend.config.*.
In a scaffolded app, npm run dev typically runs:
railnode devDev mode uses Node’s loader to run TypeScript directly (it relies on tsx being installed in the app).
npx railnode generate model TodoThen edit src/models/todo.model.ts:
import { boolean, defineModel, string } from "railnode";
export const Todo = defineModel("Todo", {
title: string(),
done: boolean().optional(),
});Start the server and try:
GET /healthPOST /todosGET /todos
CRUD routes are described in detail in Models + automatic CRUD routes.