# Solve v0.2.1 - Table of Contents

Declarative UI agnostic state management architecture

## Pages

- [Solve](readme.md)

- Release
  - [Changelog](changelog.md)

- Internals
  - [Solve architecture](architecture.md)

## Modules

- Core
  - [Solve](Solve.md): Coordinates controller graph validation, lifecycle management, and subscriptions.

- Controllers
  - [Solve.Collection](Solve.Collection.md): Ordered keyed collection used by Solve collection sources, dependencies, and lookups.

  - [Solve.Controller](Solve.Controller.md): In Solve your main building block is the controller. Controllers are composed in the
app state graph, and they can depend on each other. UI can subscribe to the controller
state. Each controller has its own internal state, and each controller has read access
to the exposed state of its dependencies.
  - [Solve.ControllerSpec](Solve.ControllerSpec.md): Controller specification used by `Solve` init and dependency validation.

- Messaging
  - [Solve.Dispatch](Solve.Dispatch.md): Dispatch payload used in `%Solve.Message{type: :dispatch}` envelopes.

  - [Solve.Lookup](Solve.Lookup.md): Process-local facade for interacting with a Solve app.

  - [Solve.Message](Solve.Message.md): Envelope for Solve runtime messages exchanged between subscribers and controllers.

  - [Solve.Update](Solve.Update.md): Update payload used in `%Solve.Message{type: :update}` envelopes.

- Internals
  - [Solve.DependencyGraph](Solve.DependencyGraph.md): Compiles controller specs into dependency graph data.

