github abhinavxd/libredesk v2.9.0

5 hours ago

Railway

If you are using Railway.com please read this important announcement about moving postgres data to volume.

What's new

WhatsApp channel

  • WhatsApp inbox - connect a WhatsApp Business number through the Meta Cloud API, with templates.

Live chat widget

  • Proactive messages - message visitors first based on the page they are on, their device, business hours or time on the page.

  • Help center in the widget - visitors can browse help center articles inside the widget.

  • Widget language from the host page - set language in the widget settings or call Libredesk.setLanguage() to switch it.

    Example

    Set the inbox language to automatic detection, then add language to your existing widget settings:

    <script>
      window.LibredeskSettings = {
        baseURL: 'https://support.example.com',
        inboxID: 'YOUR_INBOX_UUID',
        language: 'de-DE'
      };
    </script>
    <script async src="https://support.example.com/widget.js"></script>

    After the widget initializes, switch languages when the visitor changes your website's language:

    window.Libredesk.setLanguage('fr-FR');

Email

  • Email aliases - an inbox can receive mail at several addresses, and agents pick the reply From address.

  • Earlier messages in email templates - use {{ .PreviousMessages }} in outgoing email templates to quote messages the contact already saw.

    Example to add to your outgoing email template
    {{ if .PreviousMessages }}
      <div style="margin-top: 28px; padding-top: 20px; border-top: 1px solid #ddd;">
        <div style="margin-bottom: 16px; font-size: 13px; color: #888;">Previous messages</div>
        {{ range .PreviousMessages }}
          <blockquote style="margin: 0 0 20px; padding: 0 0 0 14px; border-left: 2px solid #ddd;">
            <div style="margin-bottom: 6px; font-size: 12px; line-height: 20px; color: #888;">
              On {{ .CreatedAt.Format "02 Jan 2006 at 15:04 MST" }},
              {{ if .SenderName }}{{ .SenderName }}{{ else }}{{ .SenderEmail }}{{ end }} wrote:
            </div>
            <div style="font-size: 14px; line-height: 24px; color: #444; overflow-wrap: anywhere;">
              {{ .Content }}
            </div>
          </blockquote>
        {{ end }}
      </div>
    {{ end }}
  • Recipient filter in automation rules - match rules on the To addresses of new email conversations.

Agent dashboard

  • AI tools in copilot - copilot and generate reply can call custom AI tools, with agent approval.
  • Notification preferences - agents choose which notifications they get in the app, by email and as browser push.
  • Install as an app - install libredesk on desktop or phone and get push notifications.
  • Command palette - jump to any page, find conversations and contacts, and assign, tag or change status in bulk.
  • Search filters - filter, sort and page conversation search results.

Help center

  • Dark mode - show the help center in light, dark or the visitor's system setting.
  • Linked translations - link an article to another as its translation.

What's fixed

  • Much lower memory and CPU use. An instance with about 5,000 conversations a day and 500 agents logged in stays between 300 MB and 560 MB of memory over the day.
  • Uploaded SVG files can no longer run scripts.
  • Agent sessions now end when the password changes or the account is disabled.
  • Replies in long email threads are no longer rejected by SMTP servers.
  • AI tool calls with Gemini 3 models no longer fail.
  • Many other quality of life fixes and improvements.

Upgrade notes

  • Always take a database backup before upgrading.
  • If you deployed with the Railway template before 1 October 2026, read this announcement about moving Postgres data to a volume.
  • Heads up if you built your own chat UI on the widget backend API (/api/v1/widget/*). This release changes some of its responses to support light and dark branding, proactive messages and the help center. Check your UI against v2.9.0 before upgrading.
  • Follow the steps here.

Changelog

  • 5668a2a Merge pull request #734 from abhinavxd/fix/campaign-repeat-label
  • d0d6daf simplify the campaign repeat label
  • 0debc8d Merge pull request #731 from abhinavxd/fix/inbox-card-alignment
  • 890cdb7 exclude holiday shifts from overnight campaign working hours
  • f8af161 reject stale campaign responses from earlier page visits
  • a1c44cc fix campaign navigation and overnight hours
  • fa31a75 fix system email layout assertions
  • 1b2d0ae polish shared controls and compact system email layouts
  • 83c6761 update widget JavaScript API examples
  • 627d377 fix settings footers and preview tabs
  • c8463d1 fix reply editor focus after draft loading
  • f0eb223 align inbox channel card headings
  • 2dc96fc Merge pull request #730 from abhinavxd/fix/release-ui-spacing
  • f7d8ed5 show all permitted sidebar sections when reordering
  • 8385b6b fix login layout and agent control spacing

What's Changed (Auto generated)

  • Fixes thumbnail rotation issues by @eozsahin1993 in #539
  • feat: add separate permission for private conversation notes by @LaQuay in #549
  • api: accept source_id on conversation and message endpoints by @malpou in #544
  • oidc: resolve redirect URL live so Root URL changes without a restart (preferred option) by @malpou in #548
  • Fix: disable mentions for replies in tiptap by @eozsahin1993 in #543
  • Feat: read receipt indicator by @eozsahin1993 in #540
  • search and paginate agents, teams, tags and macros instead of loading them all at boot by @abhinavxd in #537
  • feat: show open conversation counts in the inbox sidebar by @amb1 in #534
  • Update translations [2026-09-02] by @jleroy in #555
  • rebuild the command palette and add keyboard shortcuts for conversation actions by @abhinavxd in #556
  • Bump qs from 6.15.2 to 6.16.0 in /frontend by @dependabot[bot] in #559
  • Add conversation reference links to private notes by @fredrikblau in #475
  • Implement create contact functionality by @Gumbraise in #312
  • move new contact button to the right of the contacts toolbar by @abhinavxd in #572
  • CRUD for editor ai prompts. by @abhinavxd in #577
  • feat(auth): add SSO-only login mode by @pat-s in #492
  • Bump vitest from 4.1.0 to 4.1.11 in /frontend by @dependabot[bot] in #594
  • Conversation list: show a priority marker on each row by @pmslava in #578
  • fix: truncate CSAT feedback by runes to preserve valid UTF-8 by @anvme in #601
  • fix: don't render raw driver errors on CSAT submit by @anvme in #602
  • fix: prevent duplicate CSAT submissions under concurrency by @anvme in #603
  • Fix: Ensure email text visibility in Dark Mode (#449) by @IzzaldinSamir in #452
  • add per-agent notification preferences by @abhinavxd in #607
  • remove icon from new contact button by @abhinavxd in #610
  • add Kathmandu timezone option by @abhinavxd in #615
  • add filters, pagination and richer results to conversation search by @abhinavxd in #612
  • Custom AI tools to copilot and generate reply with human approval by @abhinavxd in #620
  • show idle agents as online instead of away by @abhinavxd in #621
  • speed up builds and load app layouts on demand by @abhinavxd in #622
  • Widget improvements by @abhinavxd in #619
  • fix mobile layouts by @abhinavxd in #618
  • move the reply box minimize line to the bottom of its button by @abhinavxd in #637
  • fix content spilling out of panels and dialogs when zoomed in or out by @abhinavxd in #642
  • stop uploaded SVG files from running scripts by @abhinavxd in #641
  • use the IsEncrypted helper in crypto package by @h3ssan in #652
  • Feat whatsapp by @abhinavxd in #496
  • feat: add recipient filter to automation rules by @Norbiros in #488
  • Bump axios from 1.18.0 to 1.20.0 in /frontend by @dependabot[bot] in #669
  • tune animations across the app and widget by @abhinavxd in #666
  • ignore case sensitive match on contact email automation rules by @abhinavxd in #671
  • fix notification and conversation read state by @abhinavxd in #672
  • fix security issues found in repository review by @abhinavxd in #645
  • feat(inbox): Implement inbox aliases for sending and receiving by @Sanielia in #558
  • fix chat scrolling and related article spacing by @abhinavxd in #679
  • add help article citations to AI replies by @abhinavxd in #680
  • Fix replies rejected for long SMTP headers by @abhinavxd in #682
  • trim long notification text so bell notifications save by @abhinavxd in #686
  • fix(frontend): expose macros on mobile by @samuelsogbesan in #684
  • Preserve tool call extra_content so Gemini thought signatures round-trip by @fredrikblau in #678
  • raise macro content limit to 100000 characters by @abhinavxd in #690
  • use a parameterized query to record migration versions by @abhinavxd in #689
  • Conversation: expose the inbox to the outgoing email template by @pmslava in #587
  • fix Unicode text truncation by @abhinavxd in #691
  • polish app layouts and fix UI regressions by @abhinavxd in #687
  • Live chat widget: let the host page choose the UI language by @sunyinghao5438 in #668
  • fix reply notifications and repeated agent lookups by @abhinavxd in #703
  • capitalize contact names taken from the email address by @abhinavxd in #708
  • Bug fix: fall back to reference number as subject for empty-subject email conversations by @sneha-thyagarajan in #709
  • add earlier messages as a variable in the outgoing email template by @abhinavxd in #710
  • Update translations [2026-10-19] by @jleroy in #711
  • sidebar: list all of the contact's conversations, highlight the current one by @maximilize in #714
  • fix issues found during release testing by @abhinavxd in #712
  • improve admin table layout by @abhinavxd in #716
  • Bump vite from 6.4.3 to 6.4.4 in /frontend by @dependabot[bot] in #718
  • Bump github.com/klauspost/compress from 1.18.0 to 1.18.7 by @dependabot[bot] in #717
  • fix login layout and agent control spacing by @abhinavxd in #730
  • align inbox channel card headings by @abhinavxd in #731
  • simplify the campaign repeat label by @abhinavxd in #734

New Contributors

Full Changelog: v2.8.0...v2.9.0

Don't miss a new libredesk release

NewReleases is sending notifications on new releases.