1. Install & first route
Create a Pondoknusa app, boot the HTTP kernel, and return your first HTML page.
Create the project
npm create pondoknusa@latest blog
cd blog
npm installThe default scaffold uses SQLite, a database queue, and log mail — no Redis or cloud SDKs required.
Project layout
Key files:
src/main.ts— boots providers and the HTTP kernelsrc/routes/web.ts— web routes (orroutes/web.tsdepending on scaffold)config/— typed configuration modulesresources/views/—.tyrtemplates
See Application structure for the full map.
First route
import { Route, View } from '@pondoknusa/core';
import { Response } from '@pondoknusa/http';
Route.get('/', async () =>
Response.html(await View.render('welcome', { title: 'Hello Pondoknusa' })),
);
Route.get('/health', async () => Response.json({ ok: true }));Create the view:
pondoknusa make:view welcomeRun the dev server
pondoknusa devpondoknusa dev starts the server with view, config, and route hot reload. Use pondoknusa debug:watch in a second terminal after pondoknusa debug:install to tail request timelines.
Visit http://127.0.0.1:3000 and /health.
Verified in CI
The examples/hello-world reference app exercises this step. Its feature test asserts the welcome page contains Hello Pondoknusa:
cd examples/hello-world && npm testNamed routes
Route.get('/posts', async () => Response.json([])).name('posts.index');List routes with pondoknusa route:list — filters and JSON output are documented in the routing guide.
Next
Continue to Auth & database to persist users and protect routes.