abhinavxd/libredesk
LibreDesk
LibreDesk is an open-source, self-hosted customer support platform that ships as a single Go binary. It consolidates live chat and email into one unified inbox, backed by PostgreSQL and Redis, deployable via Docker or a pre-built binary on any server. The project is maintained by a single lead developer (94% contribution share) and releases frequently — 38 releases in roughly two years. Licensed under AGPLv3.
Showcase

Features
- Omnichannel inbox — Live chat, email (including Gmail and Outlook OAuth), and more in one unified inbox; connect support@, billing@, and sales@ addresses simultaneously.
- Live chat widget — Embeddable WebSocket-based chat widget with pre-chat forms, typing indicators, dark mode, and per-inbox branding.
- Email channel — IMAP/SMTP with Google and Microsoft OAuth2 (XOAUTH2) authentication, SMTP connection pooling, and plus-address routing.
- Automations — Event-driven rule engine to auto-tag, assign, and route conversations; weighted execution order; enabled/disabled toggle per rule.
- Auto assignment — Distribute conversations by agent capacity or custom conditions on a configurable interval.
- SLA management — First response, resolution, and next response time policies with scheduled breach notifications.
- CSAT surveys — Automated customer satisfaction surveys with rating and feedback fields.
- Macros — Saved response templates; one click to send, set tags, and change status.
- Granular RBAC — Casbin-powered role definitions with per-resource permissions; user permission cache for performance.
- OIDC / SSO — OpenID Connect provider integration for agent login.
- AI-assist — Rewrites draft replies via OpenAI gpt-4o-mini (configurable prompts, encrypted API key).
- Custom attributes — Admin-defined fields attached to contacts or conversations (e.g. subscription plan).
- Webhooks — Outbound HTTP notifications for conversation and message events; configurable workers, queue, and SSRF allowlist.
- Business hours — Schedule-aware SLA evaluation and routing.
- Conversation continuity — When a live-chat visitor goes offline, the thread continues via email.
- Activity logs — Full audit trail of all agent and admin actions.
- Command bar — CTRL+K shortcut for in-app quick actions.
- Tags, statuses, snooze, search — Conversation organisation tools built into the inbox.
- File uploads — Local filesystem or any S3-compatible object store (including MinIO).
- Internationalization — UI and widget translation via Crowdin.
Live examples
- GitHub repository — Full source code with examples in tests and quickstart guides.
Documentation
Quick start
# Download compose file and sample config
curl -LO https://github.com/abhinavxd/libredesk/raw/main/docker-compose.yml
curl -LO https://github.com/abhinavxd/libredesk/raw/main/config.sample.toml
cp config.sample.toml config.toml
# Start PostgreSQL, Redis, and LibreDesk
docker compose up -d
# Set the admin password
docker exec -it libredesk_app ./libredesk --set-system-user-password
# Open http://localhost:9000 and log in as System
Tags
- Maturity
- ProductionProductionStable enough for production deployments with 38 releases and an active issue tracker.View all repositories tagged→
- Persona
- DevOps EngineerDevOps EngineerEngineers deploying containerized services and managing infrastructure.View all repositories tagged→Backend EngineerBackend EngineerEngineers building server-side services, APIs, and infrastructure components.View all repositories tagged→
- License Category
- CopyleftCopyleftCopyleft license requiring source sharing when the software is offered as a service.View all repositories tagged→
- Built With
- PiniaPiniaVue 3 state management using Pinia.View all repositories tagged→Tailwind CSSTailwind CSSComponent styling written with Tailwind CSS utility classes.View all repositories tagged→TiptapTiptapRich-text message composer powered by the Tiptap editor.View all repositories tagged→CasbinCasbinUses Casbin for role-based access control enforcement.View all repositories tagged→RedisRedisIn-memory data store used by CubeMaster for fast cluster coordination state.View all repositories tagged→fasthttpfasthttpUses valyala/fasthttp as the HTTP server engine.View all repositories tagged→
- Security Posture
- UnratedUnratedOSSF Scorecard has not yet scanned this repository — security posture is unknown.View all repositories tagged→
- Maintainer Model
- Single-personSingle-personMaintained primarily by one developer — top contributor accounts for most commits.View all repositories tagged→
- Form Factor
- ApplicationApplicationA complete standalone application, not a library or framework.View all repositories tagged→
- Platform
- WebWebRuns in the browser — renders to DOM/SVG/Canvas in a web page.View all repositories tagged→ServerServerRuns on server or bare-metal hardware, not a hosted cloud service.View all repositories tagged→
- Use case
- AI-assisted support reply draftingAI-assisted support reply draftingUse AI to rewrite draft support responses to adjust tone and professionalism before sending.View all repositories tagged→Embed live chat widget on websiteEmbed live chat widget on websiteAdd a real-time chat widget to a website to engage visitors and convert them to support conversations.View all repositories tagged→SLA tracking for support teamsSLA tracking for support teamsSet first-response and resolution time targets and receive breach notifications for customer tickets.View all repositories tagged→Helpdesk webhook integrationHelpdesk webhook integrationTrigger outbound HTTP webhooks on conversation and message events to connect with external systems.View all repositories tagged→Support ticket automationSupport ticket automationAutomatically route, assign, tag, and prioritize incoming support tickets based on custom rules.View all repositories tagged→Omnichannel inbox managementOmnichannel inbox managementManage customer conversations from email and live chat channels in one unified inbox.View all repositories tagged→Role-based agent access controlRole-based agent access controlDefine custom agent roles with granular resource-level permissions using Casbin RBAC.View all repositories tagged→Customer satisfaction measurementCustomer satisfaction measurementCollect automated CSAT ratings and feedback after support conversations are resolved.View all repositories tagged→Self-hosted customer support deskSelf-hosted customer support deskRun a complete customer support helpdesk on your own infrastructure without vendor lock-in.View all repositories tagged→SSO / OIDC agent authenticationSSO / OIDC agent authenticationLet agents sign in via an existing OpenID Connect identity provider instead of separate credentials.View all repositories tagged→
- Ecosystem
- GoGoWritten in Go for high-performance, concurrent server-side execution.View all repositories tagged→PostgreSQLPostgreSQLUses PostgreSQL as its primary relational database.View all repositories tagged→VueVueIntegrates with Vue.js, providing component wrappers and Composition API support.View all repositories tagged→
- Status
- ActiveActiveReceives recent commits and releases, issues are being addressed.View all repositories tagged→
Documentation
14 pages indexed · 1,336 words▶READMELibreDesk — Overviewgithub.com/abhinavxd/libredesk/blob/main/README.md↗
LibreDesk
Modern, open source, self-hosted omnichannel customer support desk. Live chat, email, and more in a single binary.
Backend written in Go; frontend is Vue.js 3 with Shadcn UI. Backed by PostgreSQL and Redis. Deployable via Docker or pre-built binary. AGPLv3 licensed.
Visit libredesk.io or try the live demo.
Badged by Zerodha Tech (zerodha.tech).
▶READMELibreDesk — Featuresgithub.com/abhinavxd/libredesk/blob/main/README.md#features↗
Features
- Omnichannel inbox — Live chat, email, and more in one inbox. Connect support@, billing@, sales@ and manage every conversation from a single interface.
- Live chat widget — Embed a real-time chat widget on your website. Engage visitors and handle live conversations from your support desk.
- Granular permissions — Create custom roles with granular permissions for teams and individual agents.
- Automations — Eliminate repetitive tasks with automation rules. Auto-tag, assign, and route conversations based on custom conditions.
- CSAT surveys — Measure customer satisfaction with automated surveys.
- Macros — Save frequently sent messages as templates. With one click, send saved responses, set tags, and more.
- Organization — Keep conversations organized with tags, custom statuses, and snoozing.
- Auto assignment — Distribute workload with auto assignment rules based on agent capacity or custom criteria.
- SLA management — Set and track response time targets. Get notified when conversations risk breaching SLA commitments.
- Custom attributes — Create custom attributes for contacts or conversations (e.g. subscription plan, first purchase date).
- AI-assist — Instantly rewrite responses with AI to make them more friendly, professional, or polished.
- Activity logs — Track all actions performed by agents and admins for auditing.
- Webhooks — Integrate with external systems using real-time HTTP notifications for conversation and message events.
- Command bar — CTRL+K shortcut to quickly perform actions on conversations.
▶READMELibreDesk — Docker Installationgithub.com/abhinavxd/libredesk/blob/main/README.md#docker↗
Docker Installation
The latest image is available at
libredesk/libredesk:lateston DockerHub.curl -LO https://github.com/abhinavxd/libredesk/raw/main/docker-compose.yml curl -LO https://github.com/abhinavxd/libredesk/raw/main/config.sample.toml cp config.sample.toml config.toml docker compose up -d docker exec -it libredesk_app ./libredesk --set-system-user-passwordVisit http://localhost:9000 and login with username
System.▶READMELibreDesk — Binary Installationgithub.com/abhinavxd/libredesk/blob/main/README.md#binary↗
Binary Installation
- Download the latest release and extract the libredesk binary.
- Edit config.toml as needed.
./libredesk --installto setup the Postgres DB../libredesk --set-system-user-passwordto set the system user password.- Run
./libredeskand visit http://localhost:9000.
▶LibreDesk — Internal Services Architecturegithub.com/abhinavxd/libredesk/tree/main/internal↗
Internal Service Packages
LibreDesk is structured as a monolith with discrete internal packages:
internal/inbox/channel/email— IMAP/SMTP email channel with Google and Microsoft OAuth2 (XOAUTH2) supportinternal/inbox/channel/livechat— WebSocket-based live chat widget with pre-chat forms, offline continuity, typing indicatorsinternal/ai— OpenAI gpt-4o-mini integration for AI-assisted reply rewritinginternal/authz— Casbin-based role/permission enforcement (RBAC)internal/oidc— OpenID Connect SSO provider integrationinternal/automation— Rule engine: event-driven automation rules with weighted executioninternal/sla— SLA policy management (first response, resolution, next response time targets with notifications)internal/csat— Customer satisfaction survey responses and reportinginternal/webhook— Outbound webhook delivery workers with SSRF protectioninternal/business_hours— Business hours and holiday schedulesinternal/macro— Saved response macrosinternal/custom_attribute— Custom contact/conversation attribute definitionsinternal/report— Analytics (open, awaiting response, unassigned, pending counts)internal/ws— WebSocket hub for real-time agent notificationsinternal/context_link— Context links attached to conversationsinternal/activity_log— Audit trail for all agent/admin actions
▶LibreDesk — Configuration Referencegithub.com/abhinavxd/libredesk/blob/main/config.sample.toml↗
Configuration
LibreDesk is configured via a TOML file. Key sections:
[app]— log level, env, encryption key, custom static dir[app.server]— bind address, socket, session lifetime, timeouts, max body size[upload]— provider:fs(filesystem) ors3(S3-compatible including MinIO)[db]— PostgreSQL host, port, credentials, connection pool settings[redis]— Redis address, credentials[message]— outgoing/incoming queue workers and sizes[automation]— worker count for automation rule processing[autoassigner]— interval for auto-assignment runs[webhook]— delivery workers, queue size, SSRF allowlist[conversation]— unsnooze interval, draft retention, continuity email scan interval[sla]— SLA evaluation interval
Requires PostgreSQL and Redis. File uploads can go to local disk or any S3-compatible object store.
▶LibreDesk — Email Channelgithub.com/abhinavxd/libredesk/tree/main/internal/inbox/channel/email↗
Email Channel
LibreDesk's email inbox supports:
- Multiple SMTP and IMAP server configurations per inbox
- Google OAuth2 (Gmail API scopes) and Microsoft OAuth2 (Outlook/Exchange) via XOAUTH2 SASL for IMAP auth
- SMTP pooling via knadh/smtppool
- Email parsing via jhillyerd/enmime and go-imap/v2
- Plus-address routing (support+ticketid@company.com)
- Conversation continuity: when a live-chat visitor goes offline, a continuity email is sent
- Multiple email addresses per inbox (support@, billing@, sales@)
- HTML-to-text fallback via k3a/html2text
▶LibreDesk — Live Chat Widgetgithub.com/abhinavxd/libredesk/tree/main/internal/inbox/channel/livechat↗
Live Chat Widget
LibreDesk's live chat channel:
- Embeddable JavaScript widget for websites
- Real-time messaging via WebSocket (fasthttp websocket)
- Pre-chat forms with custom fields (name, email, and custom attributes)
- Dark mode toggle per widget
- Multi-language support with fallback language
- Allow/prevent multiple open conversations per visitor
- Prevent replies to closed conversations
- Announcements and external links on widget home screen
- Offline continuity: conversation switches to email when visitor is offline
- Up to 10 concurrent WebSocket connections per user
- Typing indicators broadcast to all participants
▶LibreDesk — AI Integrationgithub.com/abhinavxd/libredesk/tree/main/internal/ai↗
AI Integration
LibreDesk integrates with OpenAI's API for AI-assisted reply writing:
- Default model: gpt-4o-mini
- Configurable system and user prompts stored in PostgreSQL
- Encrypted API key storage
- Actions: rewrite reply as more friendly, professional, or polished
- Provider model: pluggable AI provider interface (openai.go + provider.go)
- Admin panel to set OpenAI API key and configure prompts
▶LibreDesk — SLA Managementgithub.com/abhinavxd/libredesk/tree/main/internal/sla↗
SLA Management
LibreDesk's SLA engine tracks:
- First response time targets
- Resolution time targets
- Next response time targets
- Per-policy configurable notifications
- Periodic evaluation (configurable interval, default 5m)
- Applied SLAs tracked per conversation
- SLA events log
- Scheduled SLA notifications before and at breach time
- SLA policies assignable per inbox
▶LibreDesk — Automation and RBACgithub.com/abhinavxd/libredesk/tree/main/internal/automation↗
Automation Rules
LibreDesk's automation engine:
- Event-driven rules (conversation created, message received, status changed, etc.)
- Conditions: match on attributes, labels, team, inbox, etc.
- Actions: assign agent/team, set label, change status, send reply, set priority
- Weighted execution order
- Two types: conversation-create rules and ongoing rules
- Enabled/disabled toggle per rule
RBAC (Role-Based Access Control)
- Casbin SyncedEnforcer for authorization
- Custom roles with granular per-resource permissions
- User permission cache for performance
- Supports teams, inboxes, and agent-level isolation
▶LibreDesk — Database Schemagithub.com/abhinavxd/libredesk/blob/main/schema.sql↗
Key Database Tables
inboxes— email and livechat inbox configurationsconversations— tickets/threads with status, priority, assignment, SLAconversation_messages— individual messages per conversationautomation_rules— event-driven rule definitionssla_policies,applied_slas,sla_events,scheduled_sla_notificationscsat_responses— customer satisfaction survey responsesroles,user_roles— RBAC role definitions and user assignmentsoidc— SSO provider configsai_providers,ai_prompts— AI integration settingscustom_attribute_definitions— per-contact/conversation custom fieldswebhooks— outbound webhook registrationsmacros— saved response macrostemplates— email/message templatesbusiness_hours— schedule configurationsviews— saved conversation filtersactivity_logs— full audit trailuser_notifications— in-app notification queuecontext_links— contextual links attached to conversations
▶LibreDesk — Roadmapgithub.com/abhinavxd/libredesk/blob/main/ROADMAP.md↗
Roadmap
Vision
A high-performance, omni-channel, self-hosted customer support desk.
Near Term
- Bulk actions on conversations
- Contact notes visible in sidebar
- Help center with articles
- AI assistants
- Contact merging
Mid Term
- GDPR compliance
▶LibreDesk — Tech Stackgithub.com/abhinavxd/libredesk/blob/main/README.md↗
Tech Stack
Backend (Go)
- fasthttp / zerodha/fastglue for HTTP routing
- jmoiron/sqlx + lib/pq for PostgreSQL
- redis/go-redis for Redis
- casbin/casbin for RBAC
- coreos/go-oidc for SSO
- golang-jwt/jwt for session tokens
- emersion/go-imap + go-message for IMAP
- knadh/smtppool for SMTP pooling
- knadh/koanf for configuration
- rhnvrm/simples3 for S3-compatible uploads
- mr-karan/balance for load balancing
- golang.org/x/oauth2 (google, microsoft) for OAuth2
Frontend (Vue 3)
- Vue.js 3 + Vue Router + Pinia state management
- Shadcn UI / radix-vue / reka-ui component library
- Tiptap rich-text editor with mention, tables, images
- TanStack Table for data grids
- Tailwind CSS
- vue-i18n for internationalization
- Unovis for data visualization
Infrastructure
- PostgreSQL (primary database)
- Redis (sessions, queues, pub/sub)
- Docker / binary deployment
- S3 or filesystem for file uploads