# Issho v0.1.0 - API Reference

## Modules

- [Issho](Issho.md): Collaboration for Phoenix: one engine for people and agents working
together live, under every component on a page.

- Contracts
  - [Issho.Actor](Issho.Actor.md): Anyone or anything that takes part in a room: a user, an admin, a guest,
a service, an agent. Issho never assumes your schema; implement this
protocol for each struct that can join.
  - [Issho.Binding](Issho.Binding.md): What a component brings to Issho: its engine (`Issho.Engine`) and its
place format (`Issho.Place`). The browser's half of a binding brings the
rest: drawing places, and reading and applying a view for following.
  - [Issho.Engine](Issho.Engine.md): The model of a document: how its operations apply. Each binding brings
one (Kotoba's text, Hakushi's graph, a map for shared assigns), and the
authority (`Issho.Authority`) runs it.
  - [Issho.Place](Issho.Place.md): Where someone is, in a component's own terms: a row and a column in a
grid, a node and an offset in a text, a point on a canvas. Never screen
pixels, because each person has their own order, filters and zoom.
  - [Issho.Policy](Issho.Policy.md): Your app's answer to "may this actor do this here?", and to "what is
this document?". Issho has no roles and no user model: it asks, and your
app answers with whatever it already uses.
  - [Issho.Store](Issho.Store.md): Where documents last. Your app implements it on its database;
`Issho.Store.Memory` is for development and tests.

- Documents
  - [Issho.Authority](Issho.Authority.md): The one process that orders a document's changes, across every node of
a cluster.
  - [Issho.Documents](Issho.Documents.md): The authorities (`Issho.Authority`) of an Issho instance: one for each
open document, found by name on every node of a cluster.
  - [Issho.Engine.Map](Issho.Engine.Map.md): A map that people and agents change together: values at paths, in the
order the authority accepts them. It is the engine of shared assigns, the
reference for writing an engine, and the engine of Issho's own tests.
  - [Issho.Transaction](Issho.Transaction.md): The envelope of a change to a document, the same for every engine

- Rooms
  - [Issho.Awareness](Issho.Awareness.md): Where the people of a room are, and what they are doing: their places,
selections, drags and locks, many times a second.
  - [Issho.Channel](Issho.Channel.md): The channel a browser joins a room on: one per room per tab, on one
socket for the whole page.
  - [Issho.Color](Issho.Color.md): The colours of the people of a room.
  - [Issho.Identity](Issho.Identity.md): An actor as a room knows it: its key, what others see of it, and on
whose behalf it acts.
  - [Issho.Presence](Issho.Presence.md): Who is in a room: `Phoenix.Presence`, as it is, on your app's PubSub.
  - [Issho.Token](Issho.Token.md): Short-lived, signed credentials to join one room as one actor.

- LiveView
  - [Issho.Live](Issho.Live.md): A LiveView in a room: the same session as a browser's channel or an
agent's process, in the LiveView's own process. Presence, awareness,
the room's documents and the policy work the same; the room's events
reach the LiveView's components with `send_update/2`, or the LiveView
itself.

- Agents
  - [Issho.Participant](Issho.Participant.md): An actor in a room from Elixir: an agent running in your app, a job, a
script. It joins like a browser, with the same presence, awareness,
locks, transactions and policy, and the people in the room see it.

- Stores
  - [Issho.Store.Memory](Issho.Store.Memory.md): A store in memory, for development and tests. It outlives a document's
authority, but loses everything when its node stops.
  - [Issho.Store.None](Issho.Store.None.md): No store: a document that lasts as long as its authority, and starts
again from its initial content when the next one opens it.

- Testing
  - [Issho.Test](Issho.Test.md): Helpers for testing an app or a binding with Issho, in ExUnit.

## Mix Tasks

- [mix issho.build](Mix.Tasks.Issho.Build.md): Builds Issho's browser client into `priv/static`.
- [mix issho.release_check](Mix.Tasks.Issho.ReleaseCheck.md): Checks the built files before a release of Issho.

