Main features
- Tickets from email (POP3, IMAP or IMAP with OAuth) and web forms
- Queues, with optional restriction of staff to their own queues
- Customer portal to submit and follow requests
- FAQ and knowledge base with public or private categories
- Staff dashboard, assignment, follow-ups and ticket merging
- Saved searches
- Age-based escalation with excluded days and an on-hold flag
- Custom fields on public and staff forms
- Embeddable submission form with pre-filled and hidden fields
- REST API, webhooks and Django signals
- Optional spam checks with Akismet or TypePad AntiSpam
What django-helpdesk does
django-helpdesk is a ticket tracker written as a reusable Django application. It started as Jutda Helpdesk, named after the company that first built it, and was renamed in 2011 once contributors from well beyond that company were involved. The README describes it as a ticket tracker for small businesses, and its GitHub repository dates from 2010.
Requests arrive by email or through a web form and are sorted into queues. Mail can be collected over POP3, IMAP or IMAP with OAuth. Customers get a simple portal where they can submit requests, check their open and closed tickets and search the FAQ. Staff work from a dashboard of unassigned and assigned tickets, add follow-ups, resolve and merge tickets, and keep saved searches. Tickets that sit too long can be escalated automatically by age, with configurable excluded days and an on-hold flag that pauses escalation. Custom fields can be added to both public and staff forms, and the submission form can be embedded in another site as an iframe with pre-filled or hidden fields.
Integrations and extension
Because it is an ordinary Django app, django-helpdesk can live inside an existing Django project and use that project’s users and authentication. A REST API built on Django REST framework exposes tickets. Webhooks fire on new tickets and follow-ups, and Django signals let developers hook into ticket events in their own code. Optional extras add spam filtering through Akismet or TypePad AntiSpam, team-based assignment linked to knowledge base items (using Pinax teams by default, which can be turned off) and Celery for background jobs. Much of the configuration is done in Django settings and the Django admin.
Self-hosting django-helpdesk
There are two ways to install it. The standalone setup uses Docker Compose with the djangohelpdesk/standalone image, Caddy as the reverse proxy and PostgreSQL (version 17 by default). To add it to an existing project, you install the package with pip. That route needs Python 3.10 or later and Django 5.2 or later. Either way, you need an SMTP server for outgoing mail. Mail collection and escalation run as cron jobs, or as scheduled Celery tasks with django-celery-beat.
A few details matter in production. When it collects mail over POP3 or IMAP, django-helpdesk deletes the original message from the mailbox after creating the ticket. The bundled demo uses SQLite, and the README warns that keyword search works less well there, so PostgreSQL or MySQL is the better choice. The documentation leaves hardening, such as rate limiting the login page, to whoever deploys it.
Hosted version
There is no official hosted service and no commercial edition. Volunteers maintain the project, so support comes from GitHub issues and the documentation.
Limitations
The feature set is basic compared with full help desks. There are no SLA policies, canned replies or macros, no live chat and no social or messaging channels, and reporting is limited. That is why it is not listed here as a replacement for Zendesk or Freshdesk. Setup and configuration assume someone comfortable with Python and Django, and email fetching depends on scheduled jobs being set up correctly.
Who it suits
django-helpdesk suits developers and small teams who already run Django, or who want a small, permissively licensed ticket tracker they can embed and extend in Python. Support teams that need SLAs, multiple channels and a polished agent interface should compare Zammad, osTicket or FreeScout.
License details
BSD-3-Clause. Bundled third-party components keep their own licenses, listed in LICENSE.3RDPARTY. There is no paid edition.
Technical details
Self-hosting needs
- PostgreSQL
- SMTP server
- Cron or Celery
Built with
- Python
- Django
- JavaScript
GitHub topics
- agile
- bugs
- cases
- django
- hacktoberfest
- hacktoberfest2020
- helpdesk
- incidents
- issues
- kanban
- python
- scrum
- servicedesk
- support
Reviewed by the OpenSourcePicks editors from the project's repository and documentation. Something out of date? Tell us.