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.
- 01
State
Store mutable facts where they are owned.
read · write - 02
Derived values
Track relationships instead of synchronizing copies.
depend · compute - 03
Resources
Attach asynchronous work to the active lifecycle.
load · cancel - 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