Discourse 2.4.0.beta8 Release Notes

New features in 2.4.0.beta8

Tag Synonyms

Discourse now supports tag synonyms, as well as tag merging. Similar tags, common tag mis-spellings, colloquialisms, and more can now be combined into a single tag. Further, if the tag being set as a synonym already exists, the tags will be merged automatically, with all topics being retagged with the primary tag.

Theme Management Improvements

The Discourse theme system has evolved tremendously over the last few Discourse releases. Theme components were introduced, allowing site designers to create a single design or feature that can be easily added to any existing themes through the user interface. As sites grow, and more themes and components created, it can become difficult to remember to include every component in every theme, and time consuming when it is remembered.

Site designers can now easily add a component to a theme without leaving the theme component page, as well as quickly add a component to all active themes. Designers can also easily add all active components to a single theme, without the need to select each component individually.

Note that the add all feature only adds active themes/components. If a theme or component is not used by any other themes/components, it will not be added via add all. Such themes/components will need to be added individually at least once first.

Poll Improvements

Two new features have been added to Discourse polls. Previously, poll results were displayed as bar graphs. Now, poll creators can also choose a pie chart display. Note that it is not possible to show who voted (public votes) with the pie chart display.

Polls (bar and pie) can also now be quickly exported by admins, direct from the post. When exported, admins receive a CSV with the complete poll results, which can then be further analyzed as needed. Note that the Data Explorer plugin must be installed and enabled for this feature to work.

suppress from latest category setting removed

Suppress from latest allowed site admins to remove a category’s topics from the site’s default homepage, whether /latest, /categories, or something else. However, this feature caused confusion for admins and users when users changed their homepage preference. We also received requests to hide categories more thoroughly, rather than just on the homepage. It was also a site-wide setting, so users who did want to see the category on their homepage had no option to do so.

All categories set to suppress_from_latest will be automatically set as muted for all users. Users can then choose to unmute the category if they prefer to see it on their homepage, as well as other views within Discourse. Further, a new site setting mute all categories by default has been added for sites with large numbers of categories, most of which they don’t need users seeing by default. When mute all categories by default is enabled, admins should configure categories in the default_categories_tracking and default_categories_watching settings to override the mute, and ensure new users see something when they sign up for the site.

Trust Level 2 PM

Users reaching TL2 will now receive an automatic PM congratulating them on their promotion, and encouraging them to start the advanced user tutorial. Like all text in Discourse, this PM can be customized by admins as needed.

Even more!

But wait, there’s more! We do our best to highlight new features and changes for you, but there’s always too many changes to detail. We’ve highlighted a few more new features below, but for a full list of new features, bug fixes, UX improvements, and more, be sure to review the Additional Features and Fixes listed below.

  • Support pasting a list of usernames into a PM
  • Improve suspect user discovery
  • Consolidate group membership request notifications.
  • Limit the number of active sessions for a user
  • Hide posts from incoming email based on dmarc verdict
  • Improve email change workflow
  • Filter reviewables by date range
  • Dismiss new per category
  • Automatically redirect to authenticator when there is only one
  • Notify tag watchers when tag was added to post

Plugin improvements


  • Track Akismet state for users
  • Bug fixes


  • Bug fixes


  • Add support for sending emails only when assigned by a different user (no self-assign emails)
  • Support filtering review queue by assigned user
  • Bug fixes


Initial release. See:


  • Update KaTeX render to v0.11.1


  • Add Vietnamese support with Microsoft translator


  • Bug fixes

Chat integration

  • Bug fix


  • Bug fix


  • Bug fix

Yearly Review

  • Misc improvements


  • Support for syncing moderator, trust level, and groups by SAML attribute
  • Support additional SAML configuration like frame width/height, button title, and more.


  • Bug fixes


  • Use new core timezone user option instead of plugin user option.

Data Explorer

  • Adds poll result query to support new core poll export feature
  • Bug fixes


  • Bug fixes

Group Tracker

  • Bug fix

Code Review

  • Prefer newer topics over older when showing next unreviewed topic
  • Bug fixes


  • Bug fix

RSS Polling

  • Bug fix

Additional Features and Fixes

Click to expand

New Features

  • Add topic_filtered_posts_count attribute to web hook post serializer.
  • Add hidden setting to allow unsafe-eval in CSP
  • Plugin outlet adjacent to new topic btn
  • Make site texts controller handle pages and locales
  • Add timezone to core user_options
  • New API to apply custom filters to the review queue
  • Support RS256 algorithm for webauthn
  • Normalize the service worker route
  • Block screaming frog SEO spider by default
  • Introduce default application level rate limiting by IP
  • Allow scoping search to tag
  • Allow FinalDestination to use custom user agent for specific hosts

Bug Fixes

  • Keep ruby & rt tags in html to markdown conversion.
  • Secure Upload URLs in lightbox
  • BufferedValuesString.split is not a function
  • Prevents multiple jumps to happen with LockOn
  • Allow for nil upload record when migrating to S3
  • Ensures the element is on the page before scroll with lockon
  • Use filtered posts when determining the next page
  • Add a component to all themes takes only active ones
  • Move select components/themes to top
  • Improve defaultIsAvailable
  • Add filter(Boolean) and remove btn class
  • Inbound link when the only slug available
  • Don’t allow category slugs to be entirely digits
  • Respect enable_inline_emoji_translation setting in titles
  • Prepends whitespace when inserting via emoji picker
  • Linting
  • Filter readers avatars correctly when the post is a whisper
  • Call the right method
  • Guarantee order to correctly defer replies in review queue
  • 500 error for missing badge grouping
  • Hide pie legend when results are grouped
  • Poll pie container was too large
  • Do not autocomplete categories or emojis in code blocks
  • Generate redirect URL correctly when using a subdirectory
  • Handle none path correctly with three levels
  • Ensures censor has always at least an empty string to handle
  • Delay the ‘send_advanced_tutorial_message’ job to prevent race conditions
  • Optimize quoted images
  • Add a unique index to developers table
  • Fix typo
  • Make sure the suspended status is up to date
  • Adds data-topic-id to quick-access-item
  • Improvement after code review
  • Improvement after code review2
  • Use mapBy and filterBy directly
  • Make Google Groups scraper work for G Suite users
  • Cache failed onebox URL request server-side
  • Mark secure media upload insecure automatically if used for theme component
  • Serve crawler view to Google PageSpeed
  • Correctly ignore/approve replies when acting on a flagged post
  • Do not start the login flow when logging out from SSO/Authenticator
  • Use dedicated Vimeo onebox for all video types
  • Correctly resize lazy loaded images in Oneboxes
  • Correct hostname in vimeo.com
  • Bypass finaldestination check for Vimeo links.
  • Do not validate topic when resetting bumped_at
  • Show updated_at for invite sent date.
  • Draft not clearing when replying to new topic
  • Oneboxer.js infinitely retrying failed requests
  • Improves recurring by ensuring DST is computed correctly
  • Don’t error when the empty current value in dif
  • The build; ran prettier
  • Update site data when we receive a list of categories
  • Only trigger upload ACL update when needed
  • Show quoted images correctly.
  • Be more tactical with replacing markdown chars
  • Replace %20 with space in markdown file name for uploads
  • When dismissing category inform via MessageBus
  • Prevents exception and more duplicates
  • Prevents timezone to show duplicated zones in preview
  • Method names incorrect
  • Always return secure_proxy_without_cdn url for secure media
  • Remove uneeded from discourse loader
  • Aliases for require functioning
  • Allow private media uploads to be reused in login_required sites
  • Replace this.get(“foo”) with this.foo to fix linting checks
  • Followup to a8d58c3b
  • Handle german quotes in discourse local-dates
  • Mobile top topic list with a period and a category or tag
  • Do not log if an invalid mime type is passed to app
  • EventTarget error
  • Add skip_validations in one more place for narrative bot plugin
  • Allow advanced tutorial when title emojis are disabled
  • Use correct MIME type for theme exports
  • Abort CensoredWordsValidator early if censored_words_regexp nil
  • Amazon video oneboxes were not working.
  • Allow secure uploads if global s3 setting active and enable_s3_uploads validations
  • More Promise uses that were not imported
  • For a single authenticator, do not interrupt registration flow
  • Email excerpts for posts starting with a quote were displaying a username
  • Turn off auto bumping for topics with scheduled bumps
  • Parallel spec system needs needs a dedicated upload folder for each worker.
  • ‘default_categories_muted’ site setting not working for anonymous users.
  • Do not insert conflict rows into category user
  • Automatically recover from bad sprockets cache in development
  • Unable to remove required tag group from a category
  • Errors when using tags with colons in their name
  • Ensure load-more considers current position
  • Better handling of Group model state
  • Enter key should submit password reset form, not refresh the page
  • PM glyph in user-menu should always be shown to staff
  • We don’t need to refresh dates so often
  • Attempts to be correct about dst when using recurrence
  • A pmOnly tag should link to messages
  • Don’t error CleanUpInactiveUserJob when user is missing
  • Ensure revisions are made to store edit reasons and no reasons get wiped
  • Support for rake db:rollback with plugins
  • Include 5 participants in topic summary
  • Use this.content.category instead of this.category on navigation-item
  • Confirm new email with backup codes enabled
  • Don’t show bots as post readers
  • Revert mobile jump to last post behaviour
  • SVG Sprite version hash should be based on bundle result
  • Tag topic lists should pass on noSubcategories when building the top menu
  • Tracking Topic State know about category_seen_at
  • Need to require open-uri for discourse-narrative-bot plugin
  • Allow importing themes with subdirectories in extra_js
  • Missing User objects in Utilities
  • Failing tests
  • Missing braces
  • Computed is part of @ember/object not @ember/object/computed
  • Allow forceActive without a customHref
  • Do not strip nil string
  • Do not deactivate admin accounts with recent posts or api keys
  • Update quotes after moving posts
  • Topic lists filtered by tag and a specified filter don’t work
  • Tag and category watchers regression
  • Better error handling for invalid locale bundle versions
  • In case @ember/object hasn’t been loaded yet
  • Do not skip some emails in user search
  • Keep emoji images in group bio excerpt
  • More missing RSVP imports
  • Was using a native browser Promise instead of RSVP
  • Use correct class variable to get notification levels.
  • Remove magic numbers in notification levels.
  • Update api_key rake task for recent changes
  • Return a deprecation for Discourse.Session
  • Add deprecation for Discourse.NavItem in case themes are using it
  • Ran prettier to fix build
  • Alias modules that are required AND imported
  • Count current penalty if it started more than 6 months ago
  • Use ‘about.json’ endpoint instead of using ember model to get the data.
  • Badge and user title interaction fixes
  • Ensure enforce 2FA for staff satisfied by security keys
  • Drafts are unique by draft_key and user_id
  • Correct display of last used date in API key details UI
  • Prettier to fix build
  • Downcase SSO external email before checking against Discourse email
  • Include onebox default options in development environment
  • The internal position on the topic timeline is a scroll position
  • Regression not showing excerpts in mobile timeline
  • Use long version of month names in date formats
  • Unicode group names encoded for url
  • Too much blank padding in video oneboxes

UX Changes

  • Prevent scrollbars on initial panel load
  • Adjusts wizard step margins
  • Skip leading spaces in selection when adding a link.
  • Show group full name even when title is same.
  • Do not show shadow on hover images on touch devices
  • Show obvious message when backup restoration is disabled
  • Adds hover effect on lightboxed images
  • Rename ‘Hide results’ to ‘Show vote’ in polls
  • Set selected scale to 100% if scale is undefined
  • Make share icons consistent color for dark themes
  • Increase fade on long sign-up form content for more evident scroll
  • More obvious alt auth link
  • Allow enter key to submit test email in admin panel
  • Instead of total user count display only the count of users going to be affected.
  • Adds +n indicator in PM topic list
  • Add CSP documentation link to content_security_policy_script_src setting
  • Do not add leading/trailing spaces when copying API key in Firefox


  • Do fewer queries when converting posts.
  • Cache static assets in NGINX for longer