Adding a server doesn't mean adding a second framework.
Page actions, HTTP APIs, and auth policies register on the same router your routes use — no separate client SDK, no parallel backend project to keep in sync.
Forms submit to actions. Actions are just handlers.
A page action is a POST handler that returns a redirect or a field-level error — it works with JavaScript disabled, and the same Request/Response primitives back your JSON APIs.
- Pages
Routes and loaders
- Actions
Forms and mutations
- APIs
Request and Response
Policies + dependencies
Schemas, auth contracts, and application services meet here.
One schema, checked twice
Define an input schema once with @askrjs/schema and it validates the request at runtime and generates the matching OpenAPI operation — so a CI check can catch the day your handler and your published API contract disagree.
Auth is a policy function you attach to a route, plus whatever identity provider you plug in — Askr doesn't ship its own user database or decide who counts as logged in.
View the server foundation