# Overview

ShappyChat is one chat backend for all your apps. You run Shappy Backend on your own server and connect each app that must have a chat. Then you manage the models, tools, access and history of all these apps in one place.

![Four apps connect to one Shappy Backend on your server: an internal tool, a customer product, the Chrome extension and your own chat app. Each app has its own credential. The backend is the control plane: models, connected apps, tools and history. It runs each conversation in a celld cell and calls your model server and your MCP tools.](/docs/diagrams/architecture.svg "One backend for every app")

> **Status:** Version 0.1.0 is a self-hosted release for one operator. The SDK is not on npm; your backend serves it as a package file. The Chrome extension is a zip file and is not in the Chrome Web Store.

## In one minute

- **Put it in any app.** Use it in internal tools or in a product that your customers use. You can also use it in the Chrome extension or in your own chat app. Each app gets its own look, tools and credential.
- **One control plane.** You manage the models, connected apps, MCP tools and history of every app in one place. When you revoke one app, the other apps continue to run.
- **Your tools and your screen.** The chat calls the MCP tools that your app already has, and it can use page controls that you tag.
- **Durable.** celld keeps the conversations. They stay after a restart.

> **Note:** A credential is for one app. It is not for one user. In a product that your customers use, your server must decide which user can see which conversation. See [Security and data](/docs/security).

## The parts

| Part | What it does | Read |
| --- | --- | --- |
| Shappy Backend | Serves the backend pages and API, keeps settings, checks access and serves the SDK | [Shappy Backend](/docs/backend) |
| celld | Runs and stores each conversation in its own cell | [Self-host](/docs/self-host) |
| Embedded chat SDK | `@shappychat/chat`: the chat UI and the runtime clients for your web app | [Embed the chat](/docs/embed) |
| Chrome extension | The chat in the Chrome side panel, connected to your backend or to a local model | [Chrome extension](/docs/chrome) |
| Your MCP tools | The operations of your app that the chat can call | [App tools (MCP)](/docs/mcp) |
| Model server | LM Studio, Ollama or any OpenAI-compatible endpoint | [Shappy Backend](/docs/backend#configure-a-model) |

## How the parts connect

The chat UI does not do the work. A **runtime** does the work. The runtime sends messages to a model, calls tools and keeps the conversation history. The UI shows the conversation of one runtime.

- **The host app** is your app. It owns its data and its operations.
- **App tools** are the operations of your app, available through the Model Context Protocol (MCP). The chat calls these tools. The chat does not copy your business logic.
- **UI tools** let the chat use controls on the page, such as buttons and fields, that you mark for the chat.
- **The runtime** can run behind Shappy Backend, in the browser, or in a Node process such as an Electron main process.

## Which runtime to use

| Runtime | Conversation history | Use when |
| --- | --- | --- |
| Shappy Backend (remote) | celld cells behind the backend | Several apps share models, tools and one control plane. This is the main path. |
| Durable Chat (celld) | Pi Durable in a celld host that you configure | Your own trusted server binds conversations to cells. See [Durable Chat](/docs/durable-chat). |
| Browser-local | IndexedDB in the browser | The browser can reach your MCP server and model endpoint directly. |
| Node | SQLite in a folder that you choose | You build a desktop app, for example with Electron. |

See [Runtimes](/docs/runtimes) for the setup of each runtime.

## Next steps

1. Run the backend on your server. See [Self-host](/docs/self-host).
2. Add the chat to your app, or let your coding agent do it. See [Embed the chat](/docs/embed) and [Set up with your agent](/docs/agents).
3. Connect the operations of your app. See [App tools (MCP)](/docs/mcp).
4. To try ShappyChat without a server first, run the Notes demo. See [Quickstart](/docs/quickstart).
