You build the chat twice.
Streaming, formatting, tool cards, approvals and phone layouts. Then all of it again for your next app.
ShappyChat is one AI chat for all your apps. It uses your app's own tools, never loses a turn, and runs on your server with the models that you choose.
MIT licence. Try the real chat below: no sign-in, no model, and nothing leaves this page.
Scripted preview: no model or tool is called. Your settings stay in this browser.
You want your app to answer and to act. Then the real work starts: a chat interface, tool wiring, model keys, and conversations that break.
Streaming, formatting, tool cards, approvals and phone layouts. Then all of it again for your next app.
It can talk about your data. It cannot use the actions and buttons that your app already has.
A refresh in the middle of a turn loses the reply. Worse, an action can run two times.
ShappyChat calls the MCP operations that your app already has. It can also find tagged buttons and fields and use them with a visible cursor. A risky action waits for your approval.
Each conversation runs on Pi Durable. Every step is a checkpoint. A reopened chat continues from its last checkpoint. A tool call that was in flight is recorded with an unknown effect and is not sent again.
One turn, with a page reload in the middle.
App chats use the model server that you choose: LM Studio, Ollama or any OpenAI-compatible endpoint. In the Chrome extension, you can also sign in with a Claude or ChatGPT subscription. Chats stay in the browser or on your own Shappy Backend, apart from your product data.
The release bundle runs two containers with Docker Compose: the backend and celld.
docker load -i shappychat-backend-<version>-linux-<arch>.tar.gz
docker load -i shappychat-celld-<version>-linux-<arch>.tar.gz
docker compose up -d
docker compose exec backend shappy loginShappyChat owns the chat history. Your app owns its data. Neither one reads the other without a tool that you allow.
Each part works on its own. Together they give every app the same chat, the same tools and one history.
Four examples. Select the one that is most like your app.
Chat libraries give you components to assemble. Support bots keep your chats in their cloud. Browser assistants help only the person who installs them. This is how ShappyChat compares with each group.
| Feature | Chat UI librariesCopilotKit, assistant-ui, Vercel AI Elements | Agent frameworksOpenAI ChatKit, LangGraph, Agent-Native | Support chatbotsIntercom Fin, Chatbase, Voiceflow, Botpress | Browser assistantsClaude in Chrome, Gemini in Chrome, Comet | ShappyChat |
|---|---|---|---|---|---|
| A ready chat for your app, with your brand | YesSidebar, popup or inline components | PartlyA themed component, or a separate chat app | YesBubble or embedded widget, limited styling | NoA side panel in the browser of each user | YesRight panel, corner dot or typing island, styled in the Studio |
| Uses the MCP tools that your app already has | YesAn MCP client in your server code | PartlyAgent Builder only, or the actions of the framework | PartlySome MCP connectors, often hosted servers only | NoThey act on the page instead | YesConnect them one time. Every app chat can use them. |
| Uses the buttons and fields on your page | PartlyFrontend handlers that you write | PartlyClient tools or actions that you write | PartlyCustom actions or events that you write | YesOn any page, for the user who installs it | YesTagged controls, with a visible cursor |
| Asks before a risky action | YesApproval hooks | YesApproval nodes and interrupts | Not documentedNot found in their public docs | YesPauses before sensitive actions | YesAllow, Ask or Deny for each tool |
| A reload or restart never runs a tool call again | PartlyStreams resume. No repeat guard documented. | PartlyCheckpoints, but an interrupted step can run again | Not documentedChats are saved. No repeat guard found. | Not documentedNot found in their public docs | YesA call in flight is marked unknown, not sent again |
| Chat history on your own server | PartlyYour database, but some sync needs their cloud | PartlyHosted ChatKit keeps threads at OpenAI | NoThe vendor cloud | NoThe vendor account | YesIn the browser or on your Shappy Backend |
| Your choice of model, including local models | YesMany providers, including Ollama | PartlyIt depends on the framework | PartlyTheir list. Your own model on some plans. | NoThe models of one vendor | YesLM Studio, Ollama or any OpenAI-compatible server |
| Price | Free, open sourcePaid cloud from $39 a month | Free SDKsPaid hosting, for example $39 for each seat a month | Per plan or per outcomeFor example, Chatbase from $40 a month or Fin at $0.99 for each outcome | Mostly a paid planClaude or Google AI plans | FreeMIT licence, on your own server |
From public product pages and docs on 12 October 2026. Products change often. Partly means that only some products in the group, or only some plans, have the feature. Not documented means that we did not find it in their public docs.
Start with the setup guide, or run Shappy Backend on your own server today.