Lite free · Pro $99 · Craft CMS 5
The cheapest support ticket is the one nobody raises
CSR is a help centre and a support desk that live inside Craft. Articles are real pages that Google can find. The search box keeps a list of what it could not answer, so you know what to write next. The support form shows the likely answer before it will take a message, and counts how often that worked. The tickets that still arrive come with a clock on them.
Craft-native all the way down
Articles and tickets are elements. Field layouts, per-site URLs, search, relations, permissions, the trash, element indexes and the exporter are Craft's own, not a second copy of each. The help centre works as soon as it is installed, and any single page can be taken over by copying its template into your own.
{# Only what this visitor may read — the gate is in the query #}
{% set articles = craft.csr.articles({ category: 'billing', limit: 10 }).all() %}
{# The same search the help centre, the live dropdown and the support form use #}
{% set results = craft.csr.search(craft.app.request.getParam('q')) %}
{# Likely answers for a half-typed subject, before a ticket exists #}
{% set suggestions = craft.csr.suggest(subject, categoryId) %}
{% for category in craft.csr.categories() %}
<a href="{{ category.url }}">{{ category.name }}</a>
{% endfor %}
Features
Everything in a support desk exists to answer one question sooner. Most of CSR is about answering it before anybody has to ask.
One taxonomy, read from both ends
An article filed under Billing is what CSR shows somebody who is about to raise a Billing ticket. Articles and tickets share one category tree, so you never have to maintain a mapping between documentation and routing.
The searches that came back empty
Every search is logged with its result count and the article opened afterwards. The failed-search report ranks what people looked for and did not find, and a second list shows searches that found something and were abandoned anyway, which usually means a bad title rather than a missing article.
Also found by
Nobody searches for "payment instrument reconciliation"; they search for "why was I charged twice". Every article has a field for the phrases customers actually use, and the search reads it alongside the title and body.
Deflection you can believe
"They went away" and "they were helped" look the same from the server. CSR asks instead, with one button: "Yes, that answers it". The deflection rate is the number of people who pressed it, and abandoned sessions count on neither side.
A clock that pauses
SLA policies set first-response and resolution targets in your opening hours, skipping holidays, and escalate when a target is breached. While a ticket waits on the customer, the clock pauses, and the waiting time is given back when they reply.
Nobody needs an account
Most people who write to support have never logged in, so a ticket stores its requester's name and email and hands them a private reference. From that link they can read the conversation and reply. Internal notes are removed in the query, not by a template that someone might rewrite.
The report that pays for the licence
A knowledge base's most valuable page is the one it does not have yet, and the list of searches that came back empty is the only place its name is ever written down. CSR ranks them by how many people hit the same wall, measures how many people the suggestions sent away satisfied, and shows which articles readers said did not help and what they typed instead.
Screenshots from a live install, not mockups.
Frequently Asked Questions
The questions that come up before replacing a help desk subscription with a plugin.
No. Lite is a working support desk with no cap on articles, categories or tickets: the help centre, search, ratings, suggested answers on the support form, the ticket desk and replies. Pro adds the reports that say what to write next, plus SLAs, canned replies, teams, custom form questions and restricted articles.
So they get everything Craft already does for entries: field layouts, per-site URIs, search indexing, relations, permissions, the trash, element indexes, exporting and eager loading. An article's body is whatever fields you give it.
No. Guests can raise tickets by default, and the notification email gives them a link to read and reply to their own ticket. Logged-in customers also see their tickets through craft.csr.myTickets().
No. Suggestions appear beside the form as the subject is typed, and the form can always be sent. A support form that argues with somebody in trouble is worse than one extra ticket.
Cheapest checks first: a honeypot field, a signed timestamp that catches forms filled faster than a person reads, a per-address hourly limit and, only if you switch it on, Turnstile or reCAPTCHA. Every refusal returns the same message, so a bot cannot tell which check stopped it.
Yes, one page at a time. Copy any of CSR's front-end templates into templates/csr/ and yours is used from then on. There is no configuration and no overrides file, and you do not have to replace the rest.
Articles are localized, with a URI format and template per site. Tickets record the site they were submitted from, so one desk answers every site.
CSR does not need it. If both are installed, you can switch on a bridge that hands a ticket's conversation to Pigeon's inbox, while CSR keeps the categories, the SLA clock and the reports.
Write the article before the ticket
Lite is free and uncapped. Pro is $99 and adds the reports, SLAs, canned replies and teams. Install it, rename four categories, and the help centre is live at /kb.