Open-source in-app support

Support chat for your app, inside your own Firebase.

Customers chat with you from your iOS, Android or Flutter app. Your team answers from a web dashboard or from the app itself. Messages, photos and pushes live in your Firebase project, with no Clayver server in between.

npx clayver init
Apache-2.0No backend to hostNative UI on every platform
S
Support● Sara is replying
Hi! How can we help today?
I was charged twice for my Pro plan this month
Read 10:42
Thanks for the receipt. I can see both charges, refunding the second one now.
Message
Lena Moretti2
Charged twice for Pro…
highin progressbilling

How it works

Everything deploys into a project you already own

The setup CLI deploys security rules and Cloud Functions to your Firebase project. The SDKs and the dashboard talk to it directly.

Your app

iOS, Android or Flutter SDK. Customers and in-app agents.

Your Firebase project

Rules decide who reads what. Functions handle push and moderation.
Realtime Databaseconversations/{id}
Cloud Storagephotos, ≤ 300 KiB
Cloud FunctionsclayverSetAgentRole…
Auth + FCMuid, clayver_roles

Agent dashboard

Self-hosted web app. npm start, Firebase Hosting or Docker.

Clayver servers in the path: none. Your customer data never leaves your project.

Features

What a support team needs day to day

Real-time chat

Live messages, history paging, read receipts and unread counts, with several conversations per customer.

openChat() · openNewConversation()

Photo attachments

Customers and agents send photos. Every SDK and the dashboard compress them before upload.

JPEG ≤ 300 KiB

Push notifications

In both directions, across several devices per user. Tapping one opens the right conversation.

APNs + FCM, token refresh handled

Agent mode in your app

Staff with an agent role tap “Switch to support agent” in the same chat screen and get the team inbox.

clayver_roles claim

Triage

Priority, status and your own tags on every conversation, with inbox filters. Rename or reorder the choices in Settings.

high · medium · low / to do · in progress · on hold

Notes and saved replies

Internal notes stay with agents and are never pushed. Saved replies are shared across the team.

hidden from customers by the rules

Firebase Auth identity

Clayver follows your app’s signed-in user. Guests get an anonymous account you can switch off.

customer id = Firebase uid

Blocking and rate limits

Agents block abusive customers. Functions apply temporary blocks automatically.

30 messages/min · 10 conversations/hour

Export and deletion

Handle GDPR requests and App Store account deletion from the SDK or the dashboard.

deleteCustomerData()

Install

Two lines once Firebase is set up

The chat screens are native: SwiftUI on iOS, Jetpack Compose on Android. The Flutter plugin calls into them, so there is no messaging logic in Dart.

iOS 15+Swift Package Manager
Android 6+ (API 23)com.clayver:clayver-android
Flutterclayver: ^0.3.0
DashboardReact, self-hosted
import ClayverSDK

// At launch. Clayver follows your Firebase Auth user.
try await Clayver.configure()

// Optional context your agents will see
try await Clayver.setUserProperties(["plan": "pro"])

// Conversation list, or a new chat over it
Clayver.openChat()

Get started

From an empty Firebase project to a first reply

Run the setup CLI

npx clayver init detects your app, deploys the rules and functions, wires up push and writes an example.

Add the SDK and open the chat

Call configure() at launch and openChat() from a help button.

Invite your team

Grant a role with npx clayver admin grant --email or from the dashboard’s Team page, then answer from the web or the app.