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