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
languagein the widget settings or callLibredesk.setLanguage()to switch it.Example
Set the inbox language to automatic detection, then add
languageto 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 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
Toaddresses 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
IsEncryptedhelper 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
- @eozsahin1993 made their first contribution in #539
- @LaQuay made their first contribution in #549
- @malpou made their first contribution in #544
- @amb1 made their first contribution in #534
- @fredrikblau made their first contribution in #475
- @Gumbraise made their first contribution in #312
- @pmslava made their first contribution in #578
- @anvme made their first contribution in #601
- @IzzaldinSamir made their first contribution in #452
- @h3ssan made their first contribution in #652
- @Norbiros made their first contribution in #488
- @Sanielia made their first contribution in #558
- @samuelsogbesan made their first contribution in #684
- @sunyinghao5438 made their first contribution in #668
- @sneha-thyagarajan made their first contribution in #709
- @maximilize made their first contribution in #714
Full Changelog: v2.8.0...v2.9.0