Open-source project
frappe/helpdesk avatar
frappe/helpdesk

Frappe Helpdesk: an AGPL ticketing system built on the Frappe framework

Modern, Streamlined, Free and Open Source Customer Service Software

3,422 stars968 forksVueAGPL-3.0

At a glance

What is it?
Dual agent and customer portals, customisable SLAs, assignment rules and a knowledge base, with a three step Docker setup and a compatibility matrix that tells you which framework version you get.
Who is it for?
Frappe Helpdesk is a credible open-source alternative to the commercial helpdesks its repository topics name, and the reason is structural rather than cosmetic: it is a Frappe app, so it inherits the framework's document model, permissions and bench tooling instead of reimplementing them. That inheritance is a strength for teams already on Frappe and a cost for everyone else, since the self-hosting path assumes bench or Docker and the Python floor is 3.14.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Vue, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 7, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why this exists rather than the ERPNext support module

The README states the motivation without spin: managing customer issues was a real problem, the ERPNext support module was not good in the user interface or the user experience, and the team wanted something that integrated with the existing system and could be customised. So Frappe Helpdesk is an extraction, not a greenfield design.

That origin explains the shape. It is a Frappe application, which the README's Under the Hood section spells out as two dependencies. The Frappe Framework is a full-stack web application framework written in Python and JavaScript, and Frappe UI is the Vue-based component library providing the interface. Neither is optional.

`pyproject.toml` makes the constraints concrete. Python 3.14 or newer is required, and the framework dependency is pinned to version 16.0.0-dev or later and below 18.0.0, with the telephony app as a separate dependency. `package.json` is deliberately thin: three scripts that delegate into a `desk/` directory, plus a `resolutions` block pinning cheerio, dompurify, prosemirror-model, prosemirror-state, prosemirror-view and prosemirror-transform to specific versions.

Those prosemirror pins are the interesting detail. They exist because the app bundles a rich text editor, and pinning the editor's internals is what stops a transitive upgrade from breaking saved ticket content. Expect the same class of pin to appear in any helpdesk that stores formatted agent replies.

Five features, each with a screenshot attached

The key features list is short and each item is a thing the ERPNext module demonstrably lacked. Agent and Customer Portal Views give you two interfaces rather than one, so an agent console and a customer submission form can be shaped separately. Customizable SLAs let you set and track response targets. Assignment Rules auto-assign tickets by priority, issue type or workload. A Knowledge Base lets customers self-serve. Saved Replies provide canned answers for common questions.

The README backs each with a screenshot, including an agent list view and two knowledge base images, one of which shows advanced search recommending relevant articles to a customer based on their issue. That recommendation behaviour is the one feature in the list that goes beyond ticketing, and it is the reason the knowledge base is worth more than a FAQ page.

Topics on the repository name the competitive set directly: helpscout and zendesk, alongside customer-support, issue-tracker, ticketing, ticketing-system, foss and vue3. That is a clearer statement of intent than most project descriptions offer.

The repository is not archived, last pushed 2026-09-22, with 3389 stars, 952 forks and 173 open issues, licensed AGPL-3.0.

Production install is a script and a Docker image

Self-hosting in production is two steps. Download the install script, then run it with your own parameters.

bash
wget https://frappe.io/easy-install.py
bash
python3 ./easy-install.py deploy \
    --project=helpdesk_prod_setup \
    --email=your_email.example.com \
    --image=ghcr.io/frappe/helpdesk \
    --version=stable \
    --app=helpdesk \
    --sitename subdomain.domain.tld

The flags are self-describing. `--image` points at the published container on GitHub Container Registry, `--version=stable` tracks the stable channel, `--app` names the app to deploy, and `--sitename` is your domain. The README claims a production-ready instance with all necessary configuration in about five minutes, and the alternative for people who do not want to run it themselves is Frappe Cloud, which handles installation, upgrades, monitoring, maintenance and support.

Worth noting for planning: the version selector is the only place channel choice appears, so if you want to pin a specific release rather than follow stable, that is the flag to think about.

Three ways to run it locally, from fastest to slowest

The development setup is documented three ways, and the ordering tells you what the project considers easy.

Docker first, and it is the shortest. You need Docker, docker-compose and git, then you fetch two files from the develop branch and bring the stack up.

bash
docker compose up -d

The site then appears at `http://helpdesk.localhost:8000/helpdesk` with the username Administrator and the password admin. Those are local development credentials and the README is direct about them.

The bench route is the traditional one for Frappe developers: install bench, create a bench directory, run `bench start`, create a site with `bench new-site helpdesk.test`, map it to localhost with `bench --site helpdesk.test add-to-hosts`, then fetch the telephony app and the helpdesk app with `bench get-app`, install the app against the site, and build assets with `bench build --app helpdesk`.

One detail in that list is worth flagging. The telephony app is fetched separately and is a declared dependency, so telephony is not an optional extra. For a helpdesk that means calls can be tied to tickets, which is also why it is in the required dependency set rather than a plugin.

Frontend work is separated out: `cd` into `frappe-bench/apps/helpdesk/desk`, run `yarn install` then `yarn dev` or `yarn dev --host helpdesk.test`, and the Vite dev server serves the site on port 8080. The README notes all frontend code lives in that `desk` directory, which matches the tree.

The compatibility matrix is short and you should read it

Three rows, and they answer the question that trips up anyone installing a Frappe app: which framework version matches which branch.

The `main` branch is compatible with framework version 15 and version 16, and the `develop` branch tracks the framework's own develop branch. That is an unusually clear statement, and it implies two different upgrade paths: a production installation on main tracks stable framework releases, while develop is for working against unreleased framework changes.

Note that the default branch of the repository is `develop`, while the README's compatibility table talks about main as the branch for versioned framework lines. So cloning without specifying a branch gets you the developing code, not the one the compatibility matrix describes as matching a released framework.

Other repository structure worth knowing about: a `docker/` directory matching the compose instructions, a `frappe-ui/` directory that is a submodule given the presence of `.gitmodules`, a `realtime/` directory, `crowdin.yml` for translations, a `.mergify.yml` and a `.releaserc` for automated releases, `commitlint.config.mjs`, and an `AGENTS.md`. Language labels are Python and JavaScript by topic, with the interface written in Vue 3 and TypeScript.

What the release notes say about where the product is going

The three most recent releases are more informative than the feature list, because they are a record of what support teams actually complain about.

v1.30.1, published 2026-09-03, is a patch set of small fixes: writing portal defaults without saving the whole document, deduping vue-router and dompurify for the linked framework UI, an improper reply box closing for Grammarly suggestions, downloading attachments the browser cannot preview, and blanking empty states with an always-visible Update Account and a false typing indicator.

v1.30.0, published 2026-08-29, adds bulk edit and bulk assign from the selection banner, a ticket analytics tab, and allows tickets to have no SLA at all. That last one is a design decision worth noting: SLAs became optional rather than mandatory, which usually happens after someone hits a real workflow that does not fit a compliance-style target.

v1.29.0, published 2026-08-05, is the internationalisation release, with RTL support, priority shown as an icon and a level, a new ticket sidepanel layout, a team switcher in the mobile ticket header, a Recent Activity card on the home dashboard, and a First Ticket tag with tag charts on the dashboard.

Also worth noting across those notes: agent replies now get their own Message-Id so email threads hold together, which is the kind of fix only a helpdesk that sends real email discovers the hard way. Most of these landed as backports by an automated merge bot, which says the develop branch is active rather than ceremonial.

Editorial conclusion

Frappe Helpdesk is a credible open-source alternative to the commercial helpdesks its repository topics name, and the reason is structural rather than cosmetic: it is a Frappe app, so it inherits the framework's document model, permissions and bench tooling instead of reimplementing them. That inheritance is a strength for teams already on Frappe and a cost for everyone else, since the self-hosting path assumes bench or Docker and the Python floor is 3.14. The release history shows the project actively solving real support problems, from RTL support to ticket analytics to thread-preserving email replies. Two things to check before committing: the AGPL-3.0 licence has obligations that matter if you modify it and serve it, and branch support is split, with main tracking framework versions 15 and 16 and develop tracking the framework's develop branch. Read the compatibility matrix first, try the Docker path to see the product, and decide on licence terms before you fork it.

Frequently asked questions

How do you self-host Frappe Helpdesk in production?

With a two step script. Download `https://frappe.io/easy-install.py`, then run `python3 ./easy-install.py deploy` with flags for a project name, your email, the container image at `ghcr.io/frappe/helpdesk`, a version channel such as `stable`, the app name and your domain. The README says that produces a production-ready instance in about five minutes.

What are the system requirements for running Frappe Helpdesk?

Python 3.14 or newer, since `pyproject.toml` sets `requires-python` to that. The Frappe Framework dependency is version 16.0.0-dev or later and below 18.0.0, and the telephony app is a required dependency rather than an extra. For local work you need Docker and docker-compose, or a bench installation if you prefer the Frappe-native path.

Which Frappe framework version is compatible with the Helpdesk main branch?

The compatibility matrix lists `main` against framework version 15 and version 16, with the `develop` branch tracking the framework's develop branch. Note that the repository default branch is `develop`, so a plain clone gets the developing code rather than the branch the matrix ties to released framework versions.

What can Frappe Helpdesk automate beyond ticket assignment?

Five capabilities are listed: agent and customer portal views, customisable SLAs for tracking response times, assignment rules that auto-assign by priority, issue type or workload, a knowledge base with search-based article recommendations, and saved replies. Recent releases also added bulk edit and bulk assign, a ticket analytics tab, and RTL support.

Official sources

  1. frappe/helpdesk on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/frappe-helpdesk.svg)](https://hysenlabs.com/projects/frappe-helpdesk)