Build full-stack TypeScript that stays explicit.

One visible route model. Inspectable state and dependencies. Browser, server, or static output from ordinary project files.

Start a projectnpx @askrjs/cli@latest create startkit my-app

The framework composes. Your application stays visible.

Askr connects the layers without turning them into hidden conventions or a second application architecture.

import {
  createRouteRegistry,
  group,
  route,
} from '@askrjs/askr/router';

export const routes = createRouteRegistry(() => {
  group({ layout: AppLayout }, () => {
    route('/', OverviewPage);
    route('/activity', ActivityPage);
    route('/*', NotFoundPage);
  });
});
  1. 01

    One visible route graph

    Routes, layouts, loaders, and actions remain inspectable.

  2. 02

    Rendering is a delivery choice

    Use the same routes for browser, server, or static HTML.

  3. 03

    Full-stack seams stay named

    Schemas, policies, and dependencies meet at a visible root.

  4. 04

    Output stays ordinary

    Ship static documents and assets or a thin Node adapter.

Start with the application you need to ship.

Choose the closest starter, keep the generated files in view, and add rendering, server, and production capabilities only when the application calls for them.

Open the documentation