Discourse 2.3.0.beta9 Release Notes

New features in 2.3.0.beta9

Unicode username support

While Discourse has long supported Unicode Full Names for users, usernames had been restricted to ASCII characters only. Site admins can now allow use of Unicode characters is usernames and group names via the unicode usernames site setting. Admins can also limit which unicode characters can be used with the unicode username character whitelist site setting.

Staff Notices

In Discourse 2.3.0.beta4 we added a special call-out notice for new/returning users. Staff can now add custom call-outs above posts, which appear similar to the new user first post call-out.

Review Queue Improvements

First released in Discourse 2.3.0.beta7, the review queue has continued to see improvements and bug fixes. Recent changes include improved clarity for user and post approval actions vs flags, fixes for previously approved users appearing in the queue, fixes for incorrect reviewable scores, an improved review queue layout for small screens and more. On the user side, we’ve added a new notification when their pending post is approved, and also show the pending post in the topic view for the post author so it no longer “disappears”.

Digest email unsubscribe improvements

We don’t want users to receive emails that they do not want. We make unsubscribing easy, with a link in the footer as well as by replying with the word unsubscribe in the body. Sometimes, however, users just want less emails, not none. Now they are given the option of how frequently they want to receive digest emails, in addition to the option to fully unsubscribe.

Suggested unread topics are now restricted to 90 day old topics

See the linked #feature:announcements topic from Sam for full details:

Multiple SCSS file support for themes

See the linked #howto:devs topic from David for full details:

User preference for title counter mode

Previously, when a Discourse site was in a background tab, the tab title is updated with a counter of new topics/posts within the tab. Now, the count indicated the number of notifications. Users can update choose whichever option they prefer with the new Background page title displays count of user preference (interface tab).

Account Activation Reminder email

Users who do not activate their accounts now receive a single reminder email 2 days after they first sign up.

New groups page layout

We’ve updated the layout the groups page to feel less like an admin page (which it previously was). Groups are now displayed in a card layout, and displays the group full name, group icon, and description. Groups can also be quickly searched for, and filtered by type.

Improved local-dates form

Need to insert a date/time into your post, but have users in different timezones? Take advantage of local-dates, which displays the date/time in the local timezone for the user viewing the post. No need to list the date is 5 timezones, let Discourse do the work for you! Dates/times can be a single point in time, or a range from one time to another. For complicated cases, users can enable advanced mode to modify the date/time display format, enable recurrence, and more.

To insert a local-date, click the calendar icon from the composer toolbar. image

Sample local date: 2019-04-26T20:00:00Z (April 26, 4PM EDT)


Improved category setting organization

Categories have a large number of settings out of the box, and many Discourse plugins add even more. Category settings are now organized into categories to make finding the right setting easier. The settings tab layout has also been standardized so all input fields are the same size.


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. For a full list of new features, bug fixes, UX improvements, and more, be sure to review the Additional Features and Fixes listed below.

Security Updates

This beta includes 3 security fixes for issues reported by our community and HackerOne.

  • Jquery CVE-2019-11358
  • Update nokogiri
  • Update Handlebars to 4.1

Plugin improvements


  • Bug fix


  • Bug fix


  • Add header for category settings


  • Bug fix

Code review

  • Bug fixes: handle force pushes and prevent double approval


  • Bug fixes
  • Improved review queue support


  • Add header for category settings


  • Use localized date format

Ad plugin

  • Bug fixes
  • Carbon Ads support


  • Add Google Drive support
  • Bug fix: support instagram links that contain username profile

Chat Integration

Spoiler Alert

  • Hide spoilers from push notification excerpts

Data Explorer

  • New query: list all assigned topics

Docker Manager

  • Bug fixes
  • Upgrade Ember to 3.8


  • Bug fixes

Additional Features and Fixes

Click to expand

New Features

  • Generic theme component bbcode wrapper (#7400)
  • Add data-original-href attribute to Vimeo iframes
  • Use failed_to_login for SSO error (#7394)
  • Stop running migrate to new scheme once done
  • Always track clicks using AJAX. (#7373)
  • Add import script for Friends+Me Google+ Exporter JSON archives (#7334)
  • Remove user IDs from internal URLs. (#7406)
  • Better wizard privacy controls (#7391)
  • Native app banner improvements
  • Create new helper method ‘Discourse.stats’ (#7388)
  • Allow API requests to specify the DISCOURSE_VISIBLE header
  • Add setting to strip whitespaces from incoming emails. (#7375)
  • Display the reason for many reviewable items
  • Extract ‘invite only’ setting in a separate checkbox control
  • Enable NGINX brotli support unconditionally
  • Remove “COMPRESS_BROTLI” optional behavior
  • Support searching custom staff actions (#7346)
  • Remove ignore feature SiteSetting and enable ignore by default (#7349)
  • Refresh MaxmindDb during assets:precompile. (#7340)
  • Mark last notification unread when removing timings

Bug Fixes

  • Do not replace text of collapsed ignore posts (#7422)
  • Disable input zoom on search in iOS
  • Error when trying to move the same file to tombstone.
  • Prefer data-original-href attribute to get iframe URL
  • Ensure image tracking custom fields have no dupes
  • Old Upload#url scheme support for Upload.get_from_url.
  • Approved posts were not enqueueing alerts
  • Do not track a elements with no href.
  • Do not track user mentions.
  • Safer scoring with concurrency
  • Don’t add the reviewable score twice
  • Broken plugin spec
  • Improves locale support in tag-drop (#7418)
  • Improves share/invite behavior on mobile and especially iOS (#7416)
  • Hide ignoring users in preference for users with TL less than a member
  • Return the right response code for invalid theme id.
  • Remove like_count and <hr> tag from post crawler layout (#7413)
  • Detect SNS notifications for SES correctly (#7284)
  • Add unique index on group_requests(group_id, user_id). (#7399)
  • nil error in list, incorrect count in reviewable pending
  • Use last_activity_date instead of created_at for crawler view
  • Automatic scrolling in PM not working.
  • Prevents exception when the node doesnt exist anymore (#7408)
  • Retrieve posts in order by id.
  • Url in Russian translation
  • Lint
  • Replace references to flags in the header with review
  • Disable webhooks on 410 and 404 HTTP responses (#7392)
  • Show when a post has been deleted in the flag review queue
  • Use saved_change_to_value? in site_setting_saved event
  • Prevent anonymous users from changing their email/username/name (#7311)
  • Better handling for toggling must_approve_users
  • Add the last missing translation for push notifications
  • Attempts to fix a regression making touchs on emojis less reliable (#7383)
  • Restoring backup shouldn’t change disable_emails from “yes” to “non-staff”
  • Do not strip email lines having lists.
  • Publish web hooks when topic archetype is converted.
  • Missing topic edited web hook when publishing a topic.
  • Bulk invite should skip invite and add existing users to groups.
  • Bulk invite should not add users to automatic groups.
  • Prevent exception in rescue block.
  • Group requests page missing wrapper
  • Prevent input zooming in iOS
  • Set text title for desktop push notifications
  • Do not error when importing a theme with empty files
  • Show available details when rescuing error
  • Properly log webhook errors in UI on rescue (#7376)
  • Fixed category reordering using arrow icons (#7374)
  • ‘have_uploads’ scope should include all uploads without multisite ‘upload_path’ prefix
  • Change to correct bundled version
  • Skip <br> inside <p> if next character is \n
  • Rescue avatars:refresh rake task
  • Detect local assets for subfolder installs
  • Save registration IP address for invited users
  • If creating an active user via the API, create reviewables
  • Only consider pending queued posts for cleaning up uploads
  • Linting
  • Our rspec suite should not require a network connection to github
  • Strip spoilers in notification excerpts
  • Show email for staged users in user cards. (#7354)
  • Display conextual count on favicon if selected
  • Better to put a ReviewableUser back into pending than silently fail
  • Disagree and Restore should not revert edits
  • Don’t try to create a reviewable user twice
  • Correctly retrieve ‘login required’ setting value on wizard (#7355)
  • Correctly retrieve ‘login required’ setting value on wizard
  • Fallback to last post when the in-view post cannot be detected.
  • Missing translations
  • Should be able to recover a user deleted post if raw didn’t change
  • Fixed deleted posts layout (#7348)
  • Sites with SSO that required approval were not creating reviewables
  • Don’t send activation reminder to staged users
  • Always allow us to reject users, even if they are deleted
  • Use ‘freeze’ method again to fix ‘cant modify frozen string’ error
  • Fix assets:precompile rake task.
  • Ensure TarReader is closed.
  • Should look through posts for image markdown
  • When banner is removed update all clients
  • Empty the missing list on each post loop
  • Pending users email went to the wrong place
  • Keep highlighted text for quoted replies by ignored users (#7345)
  • Only show “Approve” button for the admin user if reviewable
  • Should find records by sha1 only in Upload model
  • Broken tests
  • Optimize query and avoid bloating memory in Jobs::MigrateUploadScheme.
  • Web_crawlers had been mistakenly removed (#7342)
  • Removes link to old dashboard (#7341)
  • Use new changed method name and remove whitespaces
  • Display the username instead of {{username}}
  • Missing translation key for Reviewable ->` Deleted
  • Take action should agree with all pending flags
  • Remove quoted post text and block realtime replies from ignored users (#7336)
  • Assign decoratorHelper (#7338)
  • Clean up topic_search_data of trashed topics.
  • Don’t try and reindex posts that have been trashed.

UX Changes

  • User card loading (#7404)
  • Replace staff notice icon with user-shield.
  • Editing theme name stays active when switching themes.
  • Add link to e-mail troubleshooting guide on the finish-installation/confirm-email dialog
  • Do not close login modal and search menu on outside mouse up event. (#7366)
  • Reorder post admin actions for greater consistency.
  • Don’t clip staff shield in user cards (#7398)
  • Show user card on load (#7380)
  • Changed error draft status to icon (#7369)
  • Move total user count
  • Replace lightbox loading text with spinner (#7393)
  • Detect DiscourseHub user agent in recently used devices
  • Add translations for lightbox
  • Switch ellipsis direction when expanding web hook event details.
  • When editing a reviewable, show created_by
  • Add a description for scores
  • Render wizard previews for high-DPI displays
  • Tone down user card email color
  • Switched composer draft saving to animations (#7356)
  • Sets min date on calendar when initial date is set (#7361)
  • Unify admin intro styles for badges/customize, improve mobile
  • Unify reviewable scores + history
  • Mobile - fix editor button space, divider, extra upload icon
  • Move up profile picture field next to the username
  • Don’t show the username of the first user in the conversation
  • Show the score status
  • Display signup cta even if ‘must_approve_users’ setting enabled.


  • Speed up Upload.migrate_to_new_scheme by limiting remap scope.
  • Use ‘delete_all’ method instead of ‘destroy_all’
  • Very post upload’s existence by preloaded upload sha1s array
  • Flush topic timings less frequently
  • Avoid looking up the same group multiple times during bulk invite.
  • Add index_reply_id_on_post_replies.
  • Correct clean up inactive so it does not clog scheduler
  • Add index_for_rebake_old to posts.
  • Simplify query of UserStat#update_topic_reply_count.
  • Do not create staged users for most rejected incoming emails (#7301)
  • Add index for post_search_data and topic_search_data.
  • Add index id DESC, baked_version ON posts.