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 scope goes away, 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

    End effects and resources with their lexical owner.

    own · dispose

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