Skip to content

@Gargron Gargron released this May 28, 2017


  • Fix boost icon: center vertically (#2690)
  • Fix to completely hide NSFW-tagged images (#2724)
  • Fix width of .confirmation-modal on narrow screens (#2743)
  • Always respond with 200 to PuSH payloads (#2733)
  • Language improvements, replace whatlanguage with CLD (#2753, #2949)
  • Handle out-of-order deletes for statuses (#2734)
  • Replace best_in_place editor on admin settings page (#2789)
  • Performance: Delete records in smaller transaction (#2802)
  • More robust PuSH subscription refreshes (#2799)
  • Use Twitter::Extractor for creating links (#2502)
  • Performance: Optimize follower_accounts and following_accounts (#2820)
  • Performance: Fix slow query in notifications api (#2851)
  • Performance: Add asynchronous emojione-picker (code-splitting) (#2863)
  • Fix a aspect ratio for the embedded video (#2872)
  • Fix local fonts and change font-face values (#2877)
  • Add content-type in pubsubhubhub request header (#2943)
  • Disabled auto focus on toot form when search results are shown. (#2942)
  • Performance: Add account_id DESC to optimize PrecomputeFeedService (#2967)
  • Send HEAD request ahead of GET when fetching URL previews (#2972)
  • Fix mention regex to support unicode (#2420)
  • When avatar/header are missing, do not include the missing file into Atom (#2988)
  • Accept own ID for remote follow with and without preceding @ (#2991)
  • Delete associated notifications when a status is deleted (#2994)
  • Trim long usernames in public follower/following lists (#2993)
  • Fix not rejecting remote URIs when parsing out local IDs (#3012)
  • Prepend reblogs' wrapper content with "RT @original_author", (#3013)
  • Do not cancel PuSH subscriptions after encountering "permanent" error (#3046)
  • Do not override ctrl/cmd+click on permalinks (#3073)
  • Hide signup path unless the instance allows registration. (#3055)
  • Performance: Optimize Status#permitted_for 24x (#3069)
  • Performance: Improve Account#triadic_closures (#3079)
  • Performance: Make faster ProcessFeedService (#3080)
  • Enable to handle app immediately after closing modal (#3082)
  • Performance: Make .column-collapse animation simple (#3086)
  • Resolve preview cards for remote statuses as well as local ones (#3088)
  • Do not hardcode the exclamation in "toot!", wrap it in an extra locale key (#3089)
  • Performance: Avoid useless renders (#3141)
  • Performance: Improvements (#3168)
  • Run processes in Docker as non-root user (#3159)
  • Performance: Use joins for account properties (#3167)
  • Performance: Remove unnecessary div (#3172)
  • Performance: Faster boot time (#3176)
  • Replace mastodon:media:clear and mastodon:feeds:clear rake tasks with sidekiq scheduler (#3180)
  • Add boop sounds in Vorbis format (#2963)
  • Focus tab of Mastodon when clicking notification (#2989)
  • Fix regression in mutes API and similar (#3202)
  • Allow access token in URI in the EventSource streaming API (#3208)
  • Language attribute in statuses JSON (#3209)
  • Fix "Edit profile" on the account action bar (#3222)
  • Fix cache not being configured correctly (#3219)
  • Keep children of the column-collapsable until animation is completed (#3218)
  • Fix locale regression that made logged-out public pages crash (#3231)
  • Fix "saved" message in wrong locale after updating preferences (#3232)
  • Put creation of remote statuses in a transaction to prevent incomplete statuses from being returned in the API (#3233)
  • Fix more locale regressions from #3055 (#3242)
  • Focus the submit button (#3253)
  • Fix Devise destroy method being available to delete user record (#3266)
  • Fix following/followers API to return correct link headers (#3268)
  • Skip formatting for cashtag in status text (#3275)
  • Fix hovering default value for avatar component (#3290)
  • Fix settings model sometimes returning nil (#3213)
  • Add flex: 0 0 auto to some components to avoid bugs on iOS9 (#3313)
  • Fix "contains" CSS for Chromium <57 (#3317)
  • Fix style regression of buttons not inheriting document font by default (#3310)
  • Fix load more feature on the Account media gallery (#3293)
  • Remove status context construction in the React side (#3331)
  • Remove redundant call of recent scope in AccountsController (#3330)
  • Introduce react-textarea-autosize instead of using style.height side effects (#3334)
  • Add "meta" attribute to return of POST /api/v1/media method as well (#3333)
  • Replace onboarding elephant with friendlier graphic, shorter animation (#3337)
  • Fix some nil errors (#3338)
  • Language filtering in streaming API (#3339)
  • Add missing background center on public profile headers (#3340)
  • Avoid comparing domains when looking for an exact match of a local account (#3336)
  • Fix empty flash message on the settings page (#3345)
  • Fix #2922 - Load stylesheet from "custom.css" entrypoint when present (#3332)
  • Reject revoked access_token on Streaming API. (#3367)
  • Improve streaming API cluster logging, fix streaming API hanging up (#3370)
  • Fix Webpack Bundle Analyzer output for Webpacker (#3374)
  • Simplify isIntersecting in status_list.js (#3371)
  • Fix IntersectionObserver isIntersecting in Edge (#3365)
  • Update bootsnap to 0.3.0 (fix xattr.h error) (#3390)
  • Fix video having black border on top (#3392)


  • Filter out languages from public timelines based on preferences (#2361, #3175)
  • Admins can disable 2FA for users (#2584)
  • Webpack (#2617)
  • Show boosted user's avatar (#2518)
  • Show emoji shortname in a tooltip (#2784)
  • Decode IDN URLs in PreviewCard (#2781)
  • When streaming API is disconnected, poll home/notifications (#2776)
  • Replace ws with uws (#2807)
  • Sidekiq dashboard displays scheduled tasks (#2898)
  • Add <ostatus:conversation /> to Atom feeds (#3016)
  • Make direct statuses stand out more (#3025)
  • Ability to mute notifications for an entire conversation (#3017)
  • Admins can filter accounts based on username/display name/e-mail/IP (#2968)
  • Ability to hide all content from a domain (#2381)
  • Media gallery view on profiles (#3120)
  • Allow alternate domains to be recognized by Webfinger, while still returning a canonical acct (#3187)
  • Only load i18n data for current language in web UI (#3130)
  • Toggle sensitive from admin page (#3261)
  • Don't notify me when my toot is faved by someone i muted (#3245)
  • Performance: Use node instead of babel-node for streaming API (#3269)
  • Fix DM being highlighted when it's inside a favourite notification (#3267)
  • Show error message to suspended user (#3281)
  • Performance: Lazy load toots using IntersectionObserver (#3191)
  • Go to root after login in single user mode (#3289)

Upgrade notes:

Non-Docker only:

  • This release switches the minimum supported Node.js version from 4 to 6
  • Three additional system packages are required: pkg-config libprotobuf-dev protobuf-compiler
  • Dependency updates: bundle install and yarn install


  • Processes inside Docker no longer run as root. Existing installations will require you to change directory ownership of the uploads volume to a different UID/GID: something like sudo chown -R 991:991 public/system (the default UID/GID of the new in-Docker user is 991/991)

Both Docker and non-Docker:

  • If you have CDN_HOST set, make sure it contains the protocol part (http:// or https://), if it does not, adjust it before doing the next step
  • If you set a non-default STREAMING_API_BASE_URL, change the protocol part to ws:// or wss:// respectively
  • This release includes changes to assets, that means you need to run RAILS_ENV=production bundle exec rails assets:precompile (in Docker: docker-compose run --rm web rails assets:precompile)
  • Generated assets now live under public/packs instead of public/assets. This is mostly irrelevant but might affect some custom proxying configurations.
  • This release includes database migrations, that means you need to run RAILS_ENV=production bundle exec rails db:migrate (in Docker: docker-compose run --rm web rails db:migrate)

Contributors to this release:


Assets 2