If you can't say who owns a piece of state, something's wrong.

Askr pushes state, derived values, and async work into whatever component or scope actually owns them — instead of a global store you have to trace backward.

Four things, and where each one lives

State lives with the component that changes it. Derived values recompute instead of drifting out of sync. When the owning component unmounts, its resources are cleaned up automatically.

  1. 01

    State

    Store mutable facts where they are owned.

    read · write
  2. 02

    Derived values

    Track relationships instead of synchronizing copies.

    depend · compute
  3. 03

    Resources

    Attach asynchronous work to the active lifecycle.

    load · cancel
  4. 04

    Scopes

    Provide a typed value down the tree without a global store.

    provide · read

Routes are data, not a folder structure

You declare params, layouts, loaders, and actions in a typed registry, so tooling (and you) can enumerate every route the app has — no need to reverse-engineer it from a file tree.

Async work — a query, a resource — is tied to the component or route that requested it. Navigate away mid-fetch and the request is cancelled instead of resolving into a component that no longer exists. When a write invalidates a query, dependents refetch.

View the core runtime

Put state, routes, and lifecycle to work.