Skip to content
Choose a tag to compare


@ClearlyClaire ClearlyClaire released this
· 61 commits to main since this release
Choose a tag to compare


Upgrade overview

This release contains upgrade notes that deviate from the norm:

ℹ️ Requires two-step database migration process for zero-downtime deployment
ℹ️ Some migrations may take a long time to run

For more information, scroll down to the upgrade instructions section.



  • Add warning on direct messages screen in web UI (Gargron)
    • We already had a warning when composing a direct message, it has now been reworded to be more clear
    • Same warning is now displayed when viewing sent and received direct messages
  • Add ability to set approval-based registration through tootctl (ClearlyClaire)
  • Add pre-filling of domain from search filter in domain allow/block admin UI (ClearlyClaire)


  • Change name of “Direct” visibility to “Mentioned people only” in web UI (Gargron, Gargron, ClearlyClaire)
  • Change trending posts to only show one post from each account (Gargron)
  • Change half-life of trending posts from 6 hours to 2 hours (Gargron)
  • Change full-text search feature to also include polls you have voted in (tribela)
  • Change Redis from using one connection per process, to using a connection pool (Gargron, ClearlyClaire, Gargron)
    • Different threads no longer have to wait on a mutex over a single connection
    • However, this does increase the number of Redis connections by a fair amount
    • We are planning to optimize Redis use so that the pool can be made smaller in the future


  • Remove IP matching from e-mail domain blocks (Gargron)
    • The IPs of the blocked e-mail domain or its MX records are no longer checked
    • Previously it was too easy to block e-mail providers by mistake


  • Fix compatibility with Friendica's pinned posts (ClearlyClaire, ClearlyClaire)
  • Fix error when looking up handle with surrounding spaces in REST API (ClearlyClaire)
  • Fix double render error when authorizing interaction (Gargron)
  • Fix error when a post references an invalid media attachment (ClearlyClaire)
  • Fix error when trying to revoke OAuth token without supplying a token (Gargron)
  • Fix error caused by missing subject in Webfinger response (Gargron)
  • Fix error on attempting to delete an account moderation note (ClearlyClaire)
  • Fix light-mode emoji borders in web UI (Gaelan)
  • Fix being able to scroll away from the loading bar in web UI (Gargron)
  • Fix error when a bookmark or favorite has been reported and deleted (ClearlyClaire)
  • Fix being offered empty “Server rules violation” report option in web UI (ClearlyClaire)
  • Fix temporary network errors preventing from authorizing interactions with remote accounts (ClearlyClaire)
  • Fix incorrect link in "new trending tags" email (cdzombak)
  • Fix missing indexes on some foreign keys (ClearlyClaire)
  • Fix n+1 query on feed merge and populate operations (Gargron)
  • Fix feed unmerge worker being exceptionally slow in some conditions (ClearlyClaire)
  • Fix PeerTube videos appearing with an erroneous “Edited at” marker (ClearlyClaire)
  • Fix instance actor being created incorrectly when running through migrations (ClearlyClaire)
  • Fix web push notifications containing HTML entities (ClearlyClaire)
  • Fix inconsistent parsing of TRUSTED_PROXY_IP (ykzts)
  • Fix error when fetching pinned posts (tribela)
  • Fix wrong optimization in feed populate operation (dogelover911)
  • Fix error in alias settings page (ClearlyClaire)

Upgrade notes

To get the code for v3.5.2, use git fetch && git checkout v3.5.2.

As always, make sure you have backups of the database before performing any upgrades. If you are using docker-compose, this is how a backup command might look: docker exec mastodon_db_1 pg_dump -Fc -U postgres postgres > name_of_the_backup.dump


Dependencies have not changed. To summarize, the dependency requirements for v3.5.2 are:

  • Ruby: 2.6 up to 3.1
  • PostgreSQL: 9.5 or newer
  • Elasticsearch (optional, for full-text search): 7.x
  • Redis: 4 or newer
  • Node: 12 or newer

Update steps

Non-Docker only:

  • Install dependencies: bundle install and yarn install

Both Docker and non-Docker:

ℹ️ Some of the migrations in this update may take a while to run. This is normal, just be prepared.

  1. Run the pre-deployment database migrations by specifying the SKIP_POST_DEPLOYMENT_MIGRATIONS=true environment variable:
    • Non-Docker: SKIP_POST_DEPLOYMENT_MIGRATIONS=true RAILS_ENV=production bundle exec rails db:migrate
    • Docker: docker-compose run --rm -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true web rails db:migrate
  2. Precompile the assets:
    • Non-Docker: RAILS_ENV=production bundle exec rails assets:precompile
    • Docker: The assets are already precompiled during the build step
  3. Restart all Mastodon processes
  4. Now that the new code is running, we can finish the database migrations. This will run the post-deployment ones:
    • Non-Docker: RAILS_ENV=production bundle exec rails db:migrate
    • Docker: docker-compose run --rm web rails db:migrate