Everything a full-stack app needs, none of it required upfront.
Start with the runtime and a route registry. Pull in themed components, a server, and production tooling as the app actually grows into them.
Four stages from component to production
Each one builds on the last — adding a server later doesn't mean rewriting the routes and components you already have.
- 01Build
Start with a component
Core runtime, CLI scaffolding, and Vite Plus.
@askrjs/askr · @askrjs/cli · @askrjs/vite - 02Compose
Shape the application
State, routes, data, headless components, themes, schemas, and an optional server.
@askrjs/ui · @askrjs/themes · @askrjs/schema · @askrjs/server - 03Deliver
Choose when HTML happens
Single Page Application, Server Side Rendering with hydration, Static Site Generation, or full-stack delivery.
SPA · SSR + hydration · SSG - 04Operate
Ship the production site
Static files or Node output, with clear security, localization, probe, and telemetry seams.
@askrjs/node · @askrjs/auth · @askrjs/i18n · @askrjs/otel
You don't have to decide the shape of the app up front
A static marketing site and a full-stack dashboard can share the same route registry and component code. What changes is which packages you add and which adapter renders the output — not how you write routes or components.
That means a project that starts as static HTML doesn't hit a wall the day it needs a server: you add @askrjs/server and a route policy, not a second framework.
17 packages with explicit peer boundaries
6 packages beyond the runtime have no Askr peer requirement. Packages that compose with the runtime declare it explicitly, and @askrjs/themes also declares its headless @askrjs/ui layer. The “requires” column is generated from each installed package’s published peer dependencies.
All of them are pre-1.0 (0.2.x) — the API surface is still moving, and askr upgrade exists because breaking changes are expected between minor versions, not just major ones.
| Package | What it gives you | Requires |
|---|---|---|
@askrjs/askr | Components, state, routing, resources, and the SSR/SSG renderers. | Nothing |
@askrjs/cli | Scaffolding, generators, OpenAPI checks, and dependency updates. | @askrjs/askr |
@askrjs/vite | The build plugin for JSX, SSR, and static generation. | @askrjs/askr |
@askrjs/ui | Headless components: keyboard behavior, focus, and ARIA. | @askrjs/askr |
@askrjs/themes | Styled components and design tokens on top of the headless layer. | @askrjs/askr @askrjs/ui |
@askrjs/lucide | The Lucide icon set as Askr components. | @askrjs/askr |
@askrjs/logos | A curated set of brand logo components. | @askrjs/askr |
@askrjs/charts | Typed Canvas plots with SVG and data export. | @askrjs/askr |
@askrjs/monaco | A Monaco editor wrapper for in-app code editing. | @askrjs/askr |
@askrjs/server | Transport-neutral HTTP built on Request and Response. | @askrjs/askr |
@askrjs/node | The Node adapter that runs the server in production. | Nothing |
@askrjs/schema | Executable schemas that also project to OpenAPI. | Nothing |
@askrjs/auth | Identity resolution and route access policies. | Nothing |
@askrjs/fetch | Typed HTTP clients defined in code, or generated from an OpenAPI document via the CLI. | Nothing |
@askrjs/i18n | Typed message keys that fail the build when a translation is missing. | @askrjs/askr |
@askrjs/otel | Redaction-aware OpenTelemetry instrumentation. | Nothing |
@askrjs/testing | Request injection and HTTP testing helpers. | Nothing |