Crisp

crisp.chatcontributed by Samuele Ongaro

ALMOST

A weekend of work, and real gaps remain.

A shared inbox for small teams with a chat widget at the front: conversations from chat, email and social land in one place, priced per workspace rather than per agent.

Promptfree, for everyone, and the only version there is
Build me a support inbox that replaces Crisp — and know why this is ALMOST.

The inbox and the chat widget are ordinary work. What you are paying for is **flat pricing however many agents you have**, plus channels beyond chat — email, and the messaging platforms, each of which needs an approved application. The pricing advantage disappears the moment you run it yourself, which is the argument for building. The messaging platforms are the part you may not be able to have.

STACK
- Node 20+ with Fastify, server-rendered HTML with a little vanilla JS
- SQLite through better-sqlite3, WAL mode, with FTS5
- A chat widget under 20KB gzipped, from my own domain
- Caddy in front

THE DATA MODEL
- contacts: id, email, name, phone, external_id, traits_json, first_seen_at, last_seen_at
- conversations: id, contact_id, channel, subject, status, assignee_id, priority, first_response_at, resolved_at, created_at
- messages: id, conversation_id, direction, author_kind, author_id, body_md, body_html, is_private, delivered_at, read_at, created_at
- email_threads: conversation_id, message_id_header, references_json
- canned_replies: id, shortcut, title, body_md
- events: id, conversation_id, kind, actor, at — append-only, and the basis of every metric
- attachments stored by hash with the type from content

EMAIL, WHICH IS HARDER THAN CHAT
- Inbound by provider webhook or IMAP, parsed properly: MIME, HTML and text alternatives, inline images, attachments, quoted history stripped for display but kept whole
- Threading by Message-ID, In-Reply-To and References, with a subject-plus-participant fallback. Never by subject alone — two customers writing 'Re: my order' must not become one conversation
- Automatic replies and bounces detected and never turned into a conversation, or the inbox starts talking to itself
- Outbound sets the headers that keep the thread intact, from a domain with SPF, DKIM and DMARC configured
- A per-recipient send cap, so a loop cannot mail somebody four hundred times

THE WIDGET
- One script, one init call, optionally with a signed identity token from your product so a known user is not asked who they are
- Delivered by polling a small endpoint with a backoff — faster while the conversation is active, slower when idle. Sockets are the obvious answer and the wrong first one; polling is far simpler and enough for any volume a small team handles. Say in the README where that stops being true
- Offline: when nobody is available it says so honestly and takes an address, rather than pretending
- Full history for an identified visitor, so nobody starts again on every page
- Shadow DOM, keyboard operable, focus trapped, Escape closes, works at 320px
- Typing indicators and read receipts only if they are real. A fake one is a small lie people notice

THE INBOX
- One list with filters: unassigned, mine, by status, by priority, by channel
- Keyboard driven, because this is used all day and the mouse is the slow part
- Private notes visibly different from replies and impossible to send by accident. That confusion is the failure customers see
- Canned replies by shortcut with variable substitution
- Merge two conversations from the same person, keeping both histories

CO-BROWSING, HONESTLY
- Screen sharing and co-browsing are what the higher tier sells and they are a real project — a session relay, consent, and masking of everything sensitive
- The cheap ninety per cent is a "send me a screenshot" flow with an annotation tool, or a link to a meeting service. Start there

MEASURING
- First response time, resolution time, conversations per agent, by day and hour, computed at query time from events
- Never stored totals

OPERATIONS
- .env: DATABASE_PATH, STORAGE_PATH, BASE_URL, SMTP_URL, IMAP_URL, WIDGET_JWT_SECRET, SESSION_SECRET, HASH_SALT
- Migrations on boot, each once; nightly backup off the machine, restore script
- Health endpoint checking both mail directions

WHAT MATTERS MOST
Email threading and the private-note distinction. Point a real address at it for a week — chat is an append-only list, but an inbox that splits a customer's thread in three is unusable from the first day.

What you lose

  • Workspace pricing rather than per seat, which is most of the value for a small team
  • Channels beyond chat — email, WhatsApp, Messenger — landing in one inbox
  • A co-browsing and screen-sharing session started from the conversation
  • Mobile apps for agents, so replies happen away from a desk
  • A knowledge base and chatbot wired to the same widget

If you would rather not build

  • Tidio — paid, cheaper entry, weaker email handling

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$45/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Chatwoot

$0

Shared inbox across email, chat and social, with canned replies and teams.

chatwoot/chatwootfree · open source

Papercups

$0

Live chat widget and inbox, small enough to run on one server.

papercups-io/papercupsfree · open source

Why this verdict

our own opinion · changed only by a person

56/100

Verdict kinda at 56: one conversation model over two transports is the right design and a weekend of work. What keeps Crisp cheap is that it is already flat-priced, so the saving is smaller than it looks — and the mobile apps are what make a small team responsive.

History

tracked since 9 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 3/day
views012330 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Crisp

answered from the record above

Is Crisp free?

No — the plan we track is $45 a month. Pro at $45/month for the whole workspace rather than per seat; Unlimited is $95/month and adds automation and analytics.

Can you replace Crisp by building your own?

ALMOST. A weekend of work, and real gaps remain. Replacement score 56 out of 100, build time a weekend. Read what you lose before you decide.

How much does Crisp cost?

$45 a month on Pro — $540 a year. Recorded 9 Aug 2026.

What do you lose by replacing Crisp?

Workspace pricing rather than per seat, which is most of the value for a small team; Channels beyond chat — email, WhatsApp, Messenger — landing in one inbox; A co-browsing and screen-sharing session started from the conversation; Mobile apps for agents, so replies happen away from a desk; A knowledge base and chatbot wired to the same widget. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Crisp?

Yes: Chatwoot, Papercups. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 29 in Customer support

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc