Abhinav Raut aa0deedd48 fix automation rule feedback loops and scope the starts with operator
An automation rule that listens on an event and then writes the same field
re-fires its own event, so the rule matches again and loops forever. Status
already returned early on a no-op write, but priority and user assignment did
not, so those two could spin a worker doing a DB write per lap. Add the same
unchanged-value guard to both.

Suppression while the engine applies actions was a plain flag in a sync.Map,
so with more than one worker on the same conversation the first one to finish
deleted the key while the other was still applying actions. Make it a refcount
so each worker releases only its own claim.

The starts with operator is only implemented by the automation evaluator, not
the SQL filter builder, so give automation text fields their own operator list
instead of adding it to the shared one.

Also switch the notify action to its own recipients field type, fix the snooze
duration hint since the backend only takes Go duration units, trim and
lowercase notify recipient entries, and treat a missing previous value as no
match rather than an empty string.
2026-08-05 18:01:20 +05:30
2026-08-04 16:18:35 +05:30
2026-05-31 16:31:04 +05:30
2024-10-25 15:05:40 +05:30
2026-07-31 10:57:46 +05:30
2026-07-15 01:44:20 +05:30

Zerodha Tech Badge


LibreDesk


Modern, open source, self-hosted omnichannel customer support desk. Live chat, email, and more in a single binary.

image

Visit libredesk.io for more info. Check out the live demo.

Features

  • Omnichannel inbox
    Live chat and email in one inbox. Every conversation lands in the same place, whichever channel it came from.
  • Live chat widget
    Embed a real-time chat widget on your website. Replies go out from the same inbox your team already works in.
  • AI assistant
    Answer live chat conversations automatically with an AI assistant grounded in your knowledge base. Hands off to a human when it can't help.
  • Agent copilot
    Draft replies, summarize conversations, and look up answers from the knowledge base without leaving the inbox.
  • Automations
    Rules that run on conversation events. Tag, assign, and route conversations based on conditions you define.
  • Granular permissions
    Role-based access control. Create custom roles with per-action permissions for teams and individual agents.
  • CSAT & analytics
    Send CSAT surveys automatically after a conversation closes. Track response times, resolution rates, and agent activity.
  • Custom attributes
    Create custom attributes for contacts or conversations such as the subscription plan or the date of their first purchase.
  • Macros
    Save replies you send often. One macro can send the message, set tags, and assign the conversation to a team.
  • Organization
    Tags, custom statuses, and snoozing to keep the inbox in order. Search covers every conversation.
  • Auto assignment
    Assign incoming conversations automatically, based on agent capacity or on criteria you define.
  • SLA management
    Set and track response time targets. Get notified when conversations are at risk of breaching SLA commitments.
  • SSO logins
    Google, Microsoft, and any OIDC provider are supported out of the box.
  • API
    HTTP/JSON APIs and webhooks for custom integrations and workflows.
  • Activity logs
    Track all actions performed by agents and admins, for auditing and accountability.
  • Command bar
    Opens with a simple shortcut (CTRL+K) and lets you quickly perform actions on conversations.

And more — checkout libredesk.io or try the live demo.

Installation

Docker

The latest image is available on DockerHub at libredesk/libredesk:latest

# Download the compose file and sample config file in the current directory.
curl -LO https://github.com/abhinavxd/libredesk/raw/main/docker-compose.yml
curl -LO https://github.com/abhinavxd/libredesk/raw/main/config.sample.toml

# Copy the config.sample.toml to config.toml and edit it as needed.
cp config.sample.toml config.toml

# Run the services in the background.
docker compose up -d

# Setting System user password.
docker exec -it libredesk_app ./libredesk --set-system-user-password

Go to http://localhost:9000 and login with username System and the password you set using the --set-system-user-password command.

See installation docs


Binary

  • Download the latest release and extract the libredesk binary.
  • Edit config.toml as needed.
  • ./libredesk --install to setup the Postgres DB.
  • Run ./libredesk --set-system-user-password to set the password for the System user.
  • Run ./libredesk and visit http://localhost:9000 and login with email System and the password you set using the --set-system-user-password command.

See installation docs


Developers

The backend is written in Go and the frontend is Vue.js 3 with Shadcn UI.

Translators

You can help translate libredesk into your language on Crowdin.

S
Description
Open-source, self-hosted customer support desk in a single binary. Email and live chat. A lightweight alternative to Intercom, Zendesk, Chatwoot.
Readme AGPL-3.0 34 MiB
Languages
Go 41.9%
Vue 29.8%
JavaScript 23.9%
HTML 1.6%
CSS 1.3%
Other 1.3%