github abhinavxd/libredesk v2.8.0

one hour ago

What's new

Help center (knowledge base)

Demo - https://support.libredesk.io

  • Public articles - write collections of articles and libredesk publishes them as a public site.
  • Two layouts - a documentation sidebar layout or a classic cards layout, with your own theme, logo, CSS and JS.
  • Search - visitors get full-text search with suggestions as they type.
  • Multiple locales - publish articles per locale, and visitors pick their language from the navbar.
  • Custom domain - serve a help center on your own custom domain.
  • AI answers from articles - the AI agent can answer from your published articles, and you pick which ones it is allowed to use.

Others

  • Mobile friendly agent dashboard - the layout and touch targets now fit a phone screen, so you can manage conversations from your phone.
  • Contact deletion and data export - delete a contact, or export everything you hold on them for GDPR.
  • New font - the app now uses Geist.

What's fixed

  • Performance improvements - the app uses less memory and CPU overall.
  • Incoming emails with accented or non-English characters no longer arrive as garbled text.
  • Livechat messages no longer vanish when an attachment takes a long time to upload on a slow connection.
  • The phone number field in the livechat pre-chat form now detects the visitor's country code correctly.
  • The overview report no longer counts private notes or unsent drafts in message volume.
  • Many other quality of life fixes and improvements.

Upgrade notes

  • Always take a database backup before upgrading.
  • Follow the steps here.

Changelog

  • 086b082 Merge pull request #529 from abhinavxd/deflake-general-settings-form-spec
  • 6615867 deflake the general settings form validation tests
  • 2138c6e Merge pull request #528 from abhinavxd/fix-livechat-preview-start-button
  • ce669f0 read the per user type config in the livechat widget preview
  • b2f2821 Merge pull request #527 from abhinavxd/raise-response-body-pool-limit
  • c0c21bc raise the response body pool limit to 1mb
  • cd34ceb Merge pull request #526 from abhinavxd/fix-widget-slow-upload-message
  • 6e9d23a raise the default read timeout to 60s
  • f6ba291 fix widget messages vanishing when upload takes over 10 seconds
  • 26cfa23 Merge pull request #525 from abhinavxd/downscale-avatars-on-upload
  • 5e168ea raise the avatar upload limit to 10mb
  • b8ddd7e resize avatars once on the server at 512px
  • fe243aa downscale avatars to 256px on upload
  • 253efba Merge pull request #524 from abhinavxd/fix-overview-outgoing-count-private-notes
  • 85a404c count only sent outgoing messages in the overview volume
  • cccd2de exclude private notes from the overview message volume counts
  • 8d63f68 Merge pull request #523 from abhinavxd/close-ws-on-shutdown
  • 6ee25df show the visitor label on the widget messages tab
  • 1914654 use the country code label and gate the conversations list button too
  • beb8aea update agents offline count to include 'away' status
  • a6e7812 name the field in pre-chat length errors and hide the start button when blocked
  • 5813ac3 remove comment
  • 40b86c2 check the widget client's closed flag after refreshing the read deadline
  • 8a88190 actually close agent websockets on kick and shutdown
  • 4ddec80 ignore frames from a replaced widget socket
  • e324e13 drop widget sockets when a livechat inbox reloads
  • 35ea94a set the shutdown budget to 8s
  • 2c52e69 reword the shutdown timeout log
  • 1028e68 set the shutdown budget to 10s
  • 3393b6e close websockets and bound the http server shutdown
  • 2b5b73a Merge pull request #521 from abhinavxd/fix-font-gaps
  • 849ebbc set the chart font on body instead of overriding root
  • 102e9fc apply Geist to toasts, charts and form controls
  • 9c219c3 Merge pull request #520 from abhinavxd/fix-participant-insert-log-spam
  • 364d11a stop duplicate key errors when adding conversation participants
  • 9475e6d Merge pull request #516 from abhinavxd/geist-and-hc-page-cache
  • 7b1ca52 Merge pull request #519 from abhinavxd/fix-report-overview-queries
  • 9626d51 count only away_manual agents as away
  • f4cff72 keep days 0 as today in report clamp
  • a9867dc move public help center api under /api/v1 and add security headers
  • 3218f79 fix away agent count, index resolved_at and clamp report days
  • 01c2771 shorten help center cache helper names
  • 4d7c686 Merge remote-tracking branch 'origin/main' into fix-report-overview-queries
  • 51bb8be Merge pull request #510 from abhinavxd/reduce-memory-and-cpu-hotpaths
  • 51f7bac fix and speed up the report overview queries
  • 6c02431 evaluate SLA synchronously on first reply, resolve and reopen
  • 5162125 broadcast the remaining sla fields when a policy is applied
  • ec629ba use slices.Delete to remove a websocket client from the hub
  • 02906ef clear sla deadlines on policy delete and stop double counting next response
  • 6fa5d66 recompute conversation SLA deadline when next response is settled
  • 1aaf021 add id tiebreaker so article reads and view counts pick the same row
  • 6208b29 fix cache misses, wrong view counts, and silent cache errors in the help center
  • 3da864b remove comments that narrate rejected designs
  • ae8c6ba fix stale and broken pages in the help center cache
  • c865748 switch to Geist and cache help center pages
  • 6a6a0a8 simplify websocket client and fix handshake error response
  • 3979958 Merge remote-tracking branch 'origin/main' into reduce-memory-and-cpu-hotpaths
  • a0d9929 Merge pull request #513 from abhinavxd/fix/qp-charset-mojibake
  • 1d9c20f guard websocket client sends against the channel close
  • a1cae0b close and release websocket connections promptly on failure paths
  • 4fce040 reduce websocket per-connection memory and hot-path allocations
  • 44688cb remove nil envelope loop and tidy imap comments
  • a3d2901 fix mojibake in incoming quoted-printable emails
  • de3d5f7 guard against empty pending notifications in resolved-conversation test
  • 16e3a7d recompute conversation next sla deadline on status change
  • 3a9e66d batch the settled sweep deadline recompute and abort re-apply when judging the old sla fails
  • d0daeb8 Merge remote-tracking branch 'origin/main' into reduce-memory-and-cpu-hotpaths
  • 5dbcebe judge outcomes that already happened before superseding an sla
  • d73151a fix sla status labels, notification cleanup, and the deadline overwrite race
  • 81f1deb skip the first-response deadline once the agent has replied
  • fa86582 compute next sla deadline as the earliest open obligation including live next-response countdowns
  • 49459a1 log pending sla counts only when non zero
  • 097585a keep events with a stamped outcome that the tick has not statused yet
  • 05c6e59 add comment explaining the closed cte gate
  • ee82b77 use != instead of <> in sla queries
  • ced045f keep applied slas whose next-response events scored instead of cascading the history away
  • 7816bd1 filter applied slas by date range inside the latest-row cte
  • 976307d count only each conversation's latest applied sla in overview report
  • e0127ce add short comments above each cte in the changed sla queries
  • 5822c09 add starvation, quiet tick and cross-conversation isolation tests
  • 005e6a3 add concurrency, business hours, warning schedule and deadline repair tests
  • 06b949a cover all sla policy metric combinations and clean orphaned events on re-apply
  • c2b8dd7 add resolution-only sla policy test
  • 1a27f23 add postgres-backed tests covering the full sla lifecycle
  • db8cb51 exclude next-response-only slas from the settled sweep so their live deadline is not wiped
  • 52be882 chain apply-sla ctes so the insert runs after the old pending row is closed or deleted
  • 91f897a Merge pull request #509 from abhinavxd/test-coverage
  • b10a854 make settled sla sweep self healing and repair conversation deadline in the same statement
  • c566166 Merge pull request #511 from abhinavxd/fix-private-note-delete-authz
  • 3568aa1 restrict private note deletion to the note author or an admin
  • db60ac0 close settled slas only for rows whose evaluation fully succeeded
  • 8d0aa76 clean up test fixtures and fix the tag name validation wording
  • 4277ff5 fix sla apply atomicity and superseded sla cleanup, read static file bytes once
  • b50f117 tighten test fixtures and assertions from review
  • 3bbbb2c fix ci e2e failures and unreachable zod defaults
  • 71e4649 only upgrade the api secret hash that was just verified
  • 9708f78 reduce memory and cpu use in sla, static asset and api key paths
  • 76d0ef4 cut restating comments from the test suite
  • 8725575 stop webhook form spec depending on a clipped validation message
  • 7cce27d stop livechat inbox form discarding edits when a home app is changed
  • d958806 stop role and business hours forms discarding edits, add inbox and template specs
  • 7a104bf add browser specs for agent, role, status and tag forms
  • f5ce746 add create conversation, incoming message and settings browser specs
  • 44c592d add browser specs for automation, help center and ai forms
  • d206db2 document how to run the e2e suite locally
  • 4eb9297 reword delete skips to note the ambiguity rather than assert a bug
  • d91a724 add conversation lifecycle browser spec
  • 357a259 verify every claimed bug against the live api and rewrite the findings
  • 3ca102b add conversation, contact and view api specs and merge headers in cy.api
  • 8412c90 add browser specs for team, sla, macro, webhook and custom attribute forms
  • cf14aa6 add remaining form schema tests and document findings
  • f4763df add api contract specs, form schema tests and validator unit tests
  • fb4ad5f add cypress api and page sweep tests, fix agent and context link bugs they found
  • eb4a8c4 Merge pull request #507 from abhinavxd/fix-reply-box-block
  • f3efea7 add reindex debug logs and quiet two noisy log lines Fix reply box editor blocking dialogs
  • 9246119 Merge pull request #504 from abhinavxd/fix/team-assignee-hooks-and-helpcenter-theme
  • 5433187 dedup the recipient email loop and apply review fixes
  • 7fd9604 reject whitespace-only article content
  • 758e203 Merge pull request #505 from abhinavxd/feat/pprof-toggle
  • 92ee440 log pprof startup after the listener binds
  • 43f0938 enable block and mutex profile rates via config
  • b1baa6f drop pprof block from sample config
  • f8f0ce2 add optional pprof server behind app.pprof config
  • 6a74d50 send an error response from inbox and settings handlers
  • d7fdc5c log a failed assignee removal on team change
  • a3515c5 drop the unchanged claim from the invalid theme error
  • 997a942 count code points in help center length checks
  • e19a428 harden help center validation and fix automation previous_* values
  • 94b7f8e Merge pull request #501 from abhinavxd/chore/i18n-label-cleanup
  • d0f236a reuse a global link term for editor and help center labels
  • a5dcfa1 Merge pull request #502 from chiliec/fix/update-checker-timeout-body-leak
  • 7163050 simplify update checker fetch and tests
  • 9586a63 fix(updates): add HTTP timeout and always close body in update checker
  • f274643 Update README.md
  • ae4c490 Update README.md
  • d0ff0c6 trim redundant editor and help center labels, reuse global i18n keys
  • 7f5a7e0 Merge pull request #500 from abhinavxd/fix/welcome-email-logo
  • 0c99b01 fix missing logo in emails on a fresh install
  • dd7fc1c Merge pull request #499 from abhinavxd/fix/sidebar-view-kebab-mobile-align
  • 93ed86d fix sidebar view kebab alignment on mobile
  • 78c52bf Merge pull request #473 from pat-s/pr/mobile-dashboard
  • 9106ea1 fix composer closing on a blocked send, note keyboard focus, and sheet close target
  • 2fd104f remove keyboard focus and desktop splitter changes unrelated to mobile
  • daeab85 reveal hover-hidden attachment and attribute controls on keyboard focus
  • dd21f5d fix mobile inbox nav, touch-hidden create view button, and send during inline upload
  • 7c1e681 add a context menu entry to start bulk selection on touch
  • 0e8760a Merge branch 'main' into pr/mobile-dashboard
  • f9fcba8 polish mobile layout and touch targets
  • 8ff3e4b Merge pull request #498 from abhinavxd/fix/phone-country-detection
  • 5c6f443 fix timezone country mappings, phone error overlap and welcome workflow
  • 911fbe5 detect phone country from browser timezone in the pre-chat form
  • 8aa7067 Update README.md
  • 474c275 Add Railway deployment section to README
  • 7d1530a Merge pull request #497 from abhinavxd/pr-welcome-workflow
  • e230573 pin first-interaction action to a commit sha and move to v3
  • e1ed398 add workflow to welcome first time contributors on their first pr
  • 3620ae0 fix(ui): make dialogs fit a narrow viewport
  • ff5e68d fix: keep the selection checkbox visible on keyboard focus
  • d747afa fix: reveal hover-gated controls on touch devices
  • 6250510 Merge pull request #494 from abhinavxd/fix-oidc-login-errors
  • 71f3ba5 simplify oidc login error messages and merge provider error into login failed
  • d4d3699 Merge pull request #426 from abhinavxd/worktree-gdpr
  • 0a38fb7 log the model and file details of each media the sweeper deletes
  • f7a1f96 wait 24 hours before sweeping attachments whose message is gone
  • 12fa383 show blocked badge on contact page and use alert dialogs for block and delete
  • 08d8feb make the widget dev server port configurable
  • ee6bc6e add csat responses to contact export and fix download revoke
  • 5735214 Merge remote-tracking branch 'origin/main' into worktree-gdpr
  • 449e2ee surface specific oidc login errors on the login page
  • 9177813 Merge pull request #440 from abhinavxd/help-center
  • 1ac0c77 harden help center public routes and render a themed 500 page
  • 0d6c169 focus article editor at the end of content when opening an article
  • 0989266 fix locking and depth handling in help center article move and tree
  • 5ad6b4a document rate limit settings in config.sample.toml
  • 2183e81 move help center branding columns into theme and ship Instrument Sans
  • 6e020dd improve help center tree and docs template hierarchy UX
  • 9c1b183 use root url for help center preview links and fix locale hints
  • 7ea3042 remove archived article status and fix help center tree loading
  • b6a3577 add icons and destructive styling to admin dropdown menus
  • b972e14 fix article save scan error, store relative media URLs and delay startup cleaners
  • 2e5ec78 stop logging anonymous no-session requests as errors and add auth method consts
  • 6cc06ed render help center theme text as markdown instead of raw HTML
  • 6aa887f add a locale picker and weighted full-text search to the help center
  • 1feb374 dedupe help center template partials and reuse the markdown link helper
  • 2476ee2 center the article editor toolbar and stop the feedback box resizing
  • cc6193c harden media serving and fix a few help center review findings
  • 11611de fix the second round of help center review findings
  • 5027fe2 fix a batch of help center review findings
  • 7ebec4d move the help center migration to v2.8.0 and drop two unused endpoints
  • c494904 use a lucide chevron for the collapsible marker
  • 57af9bc add syntax highlighting and a copy button to article code blocks
  • 95346c7 Merge branch 'main' into help-center
  • 6083d2f serve help centers at the root of a custom domain
  • b138b22 Merge pull request #487 from abhinavxd/cache-go-build-release
  • 2f8637c warm the go build cache from main so release runs can restore it
  • c611468 use a dedicated always-saving go build cache in the release workflow
  • 8ca05b2 share collection cards between help center templates
  • fbbef49 fix help center feedback counts, empty state, mobile logo and a11y
  • 048eb1a add page template setting for help center with docs and classic layouts
  • 68bb853 fix help center code review findings across public pages and admin
  • aa54bfa fix slug, locale, theme and embedding bugs in help center
  • 1e88b12 Merge remote-tracking branch 'origin/main' into help-center
  • 6f2f046 Merge remote-tracking branch 'origin/main' into help-center
  • ec6a9cd Merge remote-tracking branch 'origin/main' into help-center
  • 0482291 Merge remote-tracking branch 'origin/main' into help-center
  • ee1acc6 fix: mount the contact sidebar collapsed when it is persisted closed
  • ebce66a feat: mobile support for the agent dashboard
  • 0eecef9 scope robots.txt and sitemap index to the requesting host
  • 26f688f Merge branch 'main' into help-center
  • 353558c add a public URL per help center and fix code review issues
  • b4b4251 Merge remote-tracking branch 'origin/main' into help-center
  • 9013928 fix editor, preview and public page issues from code review
  • d9ede86 hide the announcement banner when its text sanitizes to nothing
  • f7a662e allow basic html in help center tagline and announcement text
  • 5e320b8 add article preview, announcement banner, and author selection to help center
  • 341d5b0 show the help center permission on the role form
  • 9cac787 fix preview sources and reindex articles when a collection changes
  • e5bfe79 keep tables and link urls in embedded article text
  • 3b92185 tighten help center permissions and fix editor and public page issues
  • 6089106 add live search suggestions and card icon layouts to help center
  • f861485 add help center preview and fix locale and URL handling
  • 1fc606b fix help center issues and reuse global i18n keys
  • 6aa221a merge origin/main into help-center
  • 7b69690 add SEO, localization, and drag reordering to the help center
  • 38983f1 Merge remote-tracking branch 'origin/main' into help-center
  • 76db5aa fix help center bugs and share the embedding and article-content code
  • baff30f add help center with public pages, admin management and AI article indexing
  • ab2a147 log avatar delete failures and export more contact fields
  • 889e219 move contact actions into a dropdown and share blob download helper
  • bfbcd0a add contact deletion and data export for GDPR compliance

What's Changed (Auto generated)

  • use a dedicated always-saving go build cache in the release workflow by @abhinavxd in #487
  • Help center by @abhinavxd in #440
  • add contact deletion and data export for GDPR compliance by @abhinavxd in #426
  • surface specific oidc login errors on the login page by @abhinavxd in #494
  • add workflow to welcome first time contributors on their first pr by @abhinavxd in #497
  • detect phone country from browser timezone in the pre-chat form by @abhinavxd in #498
  • feat: mobile support for the agent dashboard by @pat-s in #473
  • fix sidebar view kebab alignment on mobile by @abhinavxd in #499
  • fix missing logo in emails on a fresh install by @abhinavxd in #500
  • fix(updates): add HTTP timeout and always close body in update checker (#445) by @chiliec in #502
  • trim redundant editor and help center labels, reuse global i18n keys by @abhinavxd in #501
  • Feat/pprof toggle by @abhinavxd in #505
  • harden help center validation and fix automation previous_* values by @abhinavxd in #504
  • add reindex debug logs and quiet two noisy log lines by @abhinavxd in #507
  • restrict private note deletion to the note author or an admin by @abhinavxd in #511
  • Increase Test coverage by @abhinavxd in #509
  • fix mojibake in incoming quoted-printable emails by @abhinavxd in #513
  • reduce memory and cpu use in sla, static asset and api key paths by @abhinavxd in #510
  • fix and speed up the report overview queries by @abhinavxd in #519
  • switch to Geist and cache help center pages by @abhinavxd in #516
  • stop duplicate key errors when adding conversation participants by @abhinavxd in #520
  • apply Geist to toasts, charts and form controls by @abhinavxd in #521
  • close websockets and bound the http server shutdown by @abhinavxd in #523
  • exclude private notes from the overview message volume counts by @abhinavxd in #524
  • downscale avatars to 256px on upload by @abhinavxd in #525
  • fix widget messages vanishing when upload takes over 10 seconds by @abhinavxd in #526
  • raise the response body pool limit to 1mb by @abhinavxd in #527
  • read the per user type config in the livechat widget preview by @abhinavxd in #528
  • deflake the general settings form validation tests by @abhinavxd in #529

New Contributors

Full Changelog: v2.7.1...v2.8.0

Don't miss a new libredesk release

NewReleases is sending notifications on new releases.