Skip to content

v3.0.0

Compare
Choose a tag to compare
@Gargron Gargron released this 03 Oct 20:53
83d3e77

Mastodon

Breaking changes

  • Remove OStatus support
    • Please use ActivityPub instead
  • Remove deprecated REST API GET /api/v1/search API
    • Please use GET /api/v2/search instead
  • Remove deprecated REST API GET /api/v1/statuses/:id/card
    • Please use the card attribute on statuses instead
  • Remove deprecated REST API POST /api/v1/notifications/dismiss?id=:id
    • Please use POST /api/v1/notifications/:id/dismiss instead
  • Remove deprecated REST API GET /api/v1/timelines/direct
    • Please use GET /api/v1/conversations instead

Changelog

Added

  • Add "not available" label to unloaded media attachments in web UI (Gargron, Gargron)
  • Add profile directory to web UI (Gargron, mayaeh)
    • Add profile directory opt-in federation
    • Add profile directory REST API
  • Add special alert for throttled requests in web UI (ThibG)
  • Add confirmation modal when logging out from the web UI (ThibG)
  • Add audio player in web UI (Gargron, Gargron, Gargron, ThibG, Gargron)
  • Add autosuggestions for hashtags in web UI (Gargron, ThibG, Gargron, Gargron, Gargron)
  • Add media editing modal with OCR tool in web UI (Gargron, Gargron, ThibG, ThibG, Gargron, Gargron, Gargron)
  • Add indicator of unread notifications to window title when web UI is out of focus (Gargron, Gargron)
  • Add indicator for which options you voted for in a poll in web UI (ThibG)
  • Add search results pagination to web UI (Gargron, ThibG)
  • Add option to disable real-time updates in web UI ("slow mode") (Gargron, ykzts, ThibG, Gargron, ThibG)
  • Add option to disable blurhash previews in web UI (ThibG)
  • Add native smooth scrolling when supported in web UI (ThibG)
  • Add scrolling to the search bar on focus in web UI (Kjwon15)
  • Add refresh button to list of rebloggers/favouriters in web UI (Gargron)
  • Add error description and button to copy stack trace to web UI (Gargron)
  • Add search and sort functions to hashtag admin UI (mayaeh, Gargron, mayaeh)
  • Add setting for default search engine indexing in admin UI (brortao)
  • Add account bio to account view in admin UI (ThibG)
  • Add option to include reported statuses in warning e-mail from admin UI (Gargron, Gargron, Gargron, Gargron, mayaeh)
  • Add number of pending accounts and pending hashtags to dashboard in admin UI (Gargron)
  • Add account migration UI (Gargron, noellabo, noellabo, noellabo, noellabo)
  • Add table of contents to about page (Gargron, ykzts, ykzts, Kjwon15)
  • Add password challenge to 2FA settings, e-mail notifications (Gargron)
  • Add optional public list of domain blocks with comments (ThibG, ThibG, Gargron)
  • Add an RSS feed for featured hashtags (noellabo)
  • Add explanations to featured hashtags UI and profile (Gargron)
  • Add hashtag trends with admin and user settings (Gargron, Gargron, Gargron, Gargron, Gargron, mayaeh, Gargron, Gargron, Gargron, Gargron, Gargron, Gargron, ThibG, Sasha-Sorokin, Gargron, Gargron)
    • Add hashtag usage breakdown to admin UI
    • Add batch actions for hashtags to admin UI
    • Add trends to web UI
    • Add trends to public pages
    • Add user preference to hide trends
    • Add admin setting to disable trends
  • Add categories for custom emojis (Gargron, Gargron, Gargron, highemerly)
    • Add custom emoji categories to emoji picker in web UI
    • Add category to custom emojis in REST API
    • Add batch actions for custom emojis in admin UI
  • Add max image dimensions to error message (raboof)
  • Add aac, m4a, 3gp, amr, wma to allowed audio formats (Gargron, umonaca)
  • Add search syntax for operators and phrases (Gargron)
  • Add REST API for managing featured hashtags (noellabo)
  • Add REST API for managing timeline read markers (Gargron)
  • Add exclude_unreviewed param to GET /api/v2/search REST API (Gargron)
  • Add reason param to POST /api/v1/accounts REST API (Gargron)
  • Add ActivityPub secure mode (Gargron, ThibG, ThibG)
  • Add HTTP signatures to all outgoing ActivityPub GET requests (Gargron, ThibG)
  • Add support for ActivityPub Audio activities (ThibG)
  • Add ActivityPub actor representing the entire server (ThibG, rtucker, ThibG, Gargron)
  • Add whitelist mode (Gargron, mayaeh)
  • Add config of multipart threshold for S3 (ykzts, ykzts)
  • Add health check endpoint for web (ykzts, ykzts)
  • Add HTTP signature keyId to request log (Gargron)
  • Add SMTP_REPLY_TO environment variable (hugogameiro)
  • Add tootctl preview_cards remove command (mayaeh)
  • Add tootctl media refresh command (Gargron)
  • Add tootctl cache recount command (Gargron)
  • Add option to exclude suspended domains from tootctl domains crawl (dariusk)
  • Add parallelization to tootctl search deploy (noellabo)
  • Add soft delete for statuses for instant deletes through API (Gargron, Gargron)
  • Add rails-level JSON caching (Gargron, Gargron)
  • Add request pool to improve delivery performance (Gargron, ykzts)
  • Add concurrent connection attempts to resolved IP addresses (ThibG)
  • Add index for remember_token to improve login performance (abcang)
  • Add more accurate hashtag search (Gargron, Gargron, Gargron)
  • Add more accurate account search (Gargron, Gargron)
  • Add a spam check (Gargron, Gargron, ThibG)
  • Add new languages (Gargron)
    • Breton
    • Spanish (Argentina)
    • Estonian
    • Macedonian
    • New Norwegian
  • Add NodeInfo endpoint (Gargron, Gargron)

Changed

  • Change conversations UI (Gargron)
  • Change dashboard to short number notation (noellabo, noellabo)
  • Change REST API GET /api/v1/timelines/public to require authentication when public preview is off (ThibG)
  • Change REST API POST /api/v1/follow_requests/:id/(approve|reject) to return relationship (ThibG)
  • Change rate limit for media proxy (ykzts)
  • Change unlisted custom emoji to not appear in autosuggestions (Gargron)
  • Change max length of media descriptions from 420 to 1500 characters (Gargron, ThibG)
  • Change deletes to preserve soft-deleted statuses in unresolved reports (Gargron)
  • Change tootctl to use inline parallelization instead of Sidekiq (Gargron)
  • Change account deletion page to have better explanations (Gargron, Gargron)
  • Change hashtag component in web UI to show numbers for 2 last days (Gargron, Gargron, Gargron)
  • Change OpenGraph description on sign-up page to reflect invite (Gargron)
  • Change layout of public profile directory to be the same as in web UI (Gargron)
  • Change detailed status child ordering to sort self-replies on top (ThibG)
  • Change window resize handler to switch to/from mobile layout as soon as needed (ThibG)
  • Change icon button styles to make hover/focus states more obvious (ThibG)
  • Change contrast of status links that are not mentions or hashtags (ThibG)
  • Change hashtags to preserve first-used casing (Gargron, Gargron, Gargron, Gargron, Gargron)
  • Change unconfirmed user login behaviour (Gargron, ThibG, Gargron)
  • Change single-column mode to scroll the whole page (Gargron, Gargron, Gargron, ThibG, Gargron, Gargron, ThibG, Gargron)
  • Change tootctl accounts follow to only work with local accounts (angristan)
  • Change Dockerfile (Shleeble, ykzts, Shleeble)
  • Change supported Node versions to include v12 (abcang)
  • Change Portuguese language from pt to pt-PT (Gargron)
  • Change domain block silence to always require approval on follow (ThibG)
  • Change link preview fetcher to not perform a HEAD request first (Gargron)
  • Change tootctl domains purge to accept multiple domains at once (Gargron)

Removed

  • Remove OStatus support (Gargron, Gargron, Gargron, ThibG, ThibG)
  • Remove Atom feeds and old URLs in the form of GET /:username/updates/:id (Gargron)
  • Remove WebP support (angristan)
  • Remove deprecated config options from Heroku and Scalingo (ykzts)
  • Remove deprecated REST API GET /api/v1/search API (Gargron)
  • Remove deprecated REST API GET /api/v1/statuses/:id/card (Gargron)
  • Remove deprecated REST API POST /api/v1/notifications/dismiss?id=:id (Gargron)
  • Remove deprecated REST API GET /api/v1/timelines/direct (Gargron)

Fixed

  • Fix manifest warning (ykzts)
  • Fix admin UI for custom emoji not respecting GIF autoplay preference (ThibG)
  • Fix page body not being scrollable in admin/settings layout (Gargron)
  • Fix placeholder colors for inputs not being explicitly defined (Gargron)
  • Fix incorrect enclosure length in RSS (tsia)
  • Fix TOTP codes not being filtered from logs during enabling/disabling (Gargron)
  • Fix webfinger response not returning 410 when account is suspended (Gargron)
  • Fix ActivityPub Move handler queuing jobs that will fail if account is suspended (Gargron)
  • Fix SSO login not using existing account when e-mail is verified (Gargron)
  • Fix web UI allowing uploads past status limit via drag & drop (Gargron)
  • Fix expiring polls not being displayed as such in web UI (ThibG)
  • Fix 2FA challenge and password challenge for non-database users (Gargron, Gargron)
  • Fix profile fields overflowing page width in web UI (Gargron)
  • Fix web push subscriptions being deleted on rate limit or timeout (Gargron)
  • Fix display of long poll options in web UI (ThibG, ThibG)
  • Fix search API not resolving URL when type is given (Gargron)
  • Fix hashtags being split by ZWNJ character (Gargron)
  • Fix scroll position resetting when opening media modals in web UI (Gargron)
  • Fix duplicate HTML IDs on about page (ThibG)
  • Fix admin UI showing superfluous reject media/reports on suspended domain blocks (ThibG)
  • Fix ActivityPub context not being dynamically computed (ThibG)
  • Fix Mastodon logo style on hover on public pages' footer (ThibG)
  • Fix height of dashboard counters (ThibG)
  • Fix custom emoji animation on hover in web UI directory bios (ThibG)
  • Fix non-numbers being passed to Redis and causing an error (Gargron)
  • Fix error in REST API for an account's statuses (Gargron)
  • Fix uncaught error when resource param is missing in Webfinger request (Gargron)
  • Fix uncaught domain normalization error in remote follow (Gargron)
  • Fix uncaught 422 and 500 errors (Gargron, Gargron)
  • Fix uncaught parameter missing exceptions and missing error templates (Gargron)
  • Fix encoding error when checking e-mail MX records (Gargron)
  • Fix items in StatusContent render list not all having a key (ThibG)
  • Fix remote and staff-removed statuses leaving media behind for a day (Gargron)
  • Fix CSP needlessly allowing blob URLs in script-src (ThibG)
  • Fix ignoring whole status because of one invalid hashtag (Gargron)
  • Fix hidden statuses losing focus (ThibG)
  • Fix loading bar being obscured by other elements in web UI (Gargron)
  • Fix multiple issues with replies collection for pages further than self-replies (ThibG)
  • Fix blurhash and autoplay not working on public pages (Gargron)
  • Fix 422 being returned instead of 404 when POSTing to unmatched routes (Gargron, Gargron)
  • Fix client-side resizing of image uploads (ThibG)
  • Fix short number formatting for numbers above million in web UI (Gargron)
  • Fix ActivityPub and REST API queries setting cookies and preventing caching (ThibG, ThibG, ThibG, ThibG)
  • Fix some emojis in profile metadata labels are not emojified. (kedamaDQ)
  • Fix account search always returning exact match on paginated results (Gargron)
  • Fix acct URIs with IDN domains not being resolved (Gargron)
  • Fix admin dashboard missing latest features (Gargron)
  • Fix jumping of toot date when clicking spoiler button (ariasuni)
  • Fix boost to original audience not working on mobile in web UI (ThibG)
  • Fix handling of webfinger redirects in ResolveAccountService (ThibG)
  • Fix URLs appearing twice in errors of ActivityPub::DeliveryWorker (Gargron)
  • Fix support for HTTP proxies (ThibG)
  • Fix HTTP requests to IPv6 hosts (ThibG)
  • Fix error in ElasticSearch index import (mayaeh)
  • Fix duplicate account error when seeding development database (ysksn)
  • Fix performance of session clean-up scheduler (abcang)
  • Fix older migrations not running (zunda)
  • Fix URLs counting towards RTL detection (ahangarha)
  • Fix unnecessary status re-rendering in web UI (ThibG)
  • Fix http_parser.rb gem not being compiled when no network available (petabyteboy)
  • Fix muted text color not applying to all text (trwnh)
  • Fix follower/following lists resetting on back-navigation in web UI (Gargron)
  • Fix n+1 query when approving multiple follow requests (abcang)
  • Fix records not being indexed into ElasticSearch sometimes (Gargron)
  • Fix needlessly indexing unsearchable statuses into ElasticSearch (Gargron)
  • Fix new user bootstrapping crashing when to-be-followed accounts are invalid (ThibG)
  • Fix featured hashtag URL being interpreted as media or replies tab (Gargron)
  • Fix account counters being overwritten by parallel writes (Gargron)

Security

  • Fix performance of GIF re-encoding and always strip EXIF data from videos (Gargron)

Upgrade notes

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

Non-Docker only:

  • The recommended Ruby version has been bumped to 2.6.5. You can upgrade, or you can continue using the old version by overwriting the .ruby-version file with e.g. 2.6.1 or 2.5.3 which were recommended previously
  • Install dependencies: bundle install and yarn install

Both Docker and non-Docker:

  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. Clear cache:
    • Non-Docker: RAILS_ENV=production bin/tootctl cache clear
    • Docker: docker-compose run --rm web bin/tootctl cache clear
  5. 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
  6. Restart all Mastodon processes
  7. If you are using ElasticSearch, there are new indices to be deployed (this step is likely to take a considerable amount of time, so running it through screen or tmux is advisable):
    • Non-Docker: RAILS_ENV=production bin/tootctl search deploy
    • Docker: docker-compose run --rm web bin/tootctl search deploy

Translators

  • Zoltán Gera (Hungarian)
  • Kristijan Tkalec (Slovenian)
  • Evert Prants (Estonian)
  • borys_sh (Ukrainian)
  • Muha Aliss (Turkish)
  • 唐宗勛 (Chinese Simplified)
  • oɹʇuʞ (Spanish, Argentina)
  • Jeong Arm (Korean; Esperanto; Japanese)
  • ButterflyOfFire (French; Arabic)
  • Roboron (Spanish)
  • Osoitz (Basque)
  • Ramdziana F Y (Indonesian)
  • Alix Rossi (Corsican; French)
  • Aditoo17 (Czech)
  • Masoud Abkenar (Persian)
  • koyu (German)
  • spla (Catalan)
  • Maya Minatsuki (Japanese)
  • Oguz Ersen (Turkish)
  • Xosé M. (Galician)
  • Jeroen (Dutch)
  • Marek Ľach (Slovak; Polish)
  • d5Ziif3K (Ukrainian)
  • Thai Localization (Thai)
  • lamnatos (Greek)
  • Diluns (Occitan)
  • atarashiako (Chinese Simplified)
  • 101010 (Polish)
  • Yi-Jyun Pan (Chinese Traditional)
  • silkevicious (Italian)
  • FédiQuébec (French)
  • Jaz-Michael King (Welsh)
  • tykayn(French)
  • Alessandro Levati (Italian)
  • carolinagiorno (Portuguese, Brazilian)
  • taoxvx (Danish)
  • shioko (Chinese Simplified)
  • Emyn Nant Nefydd (Welsh)
  • Sasha Sorokin (Russian)
  • Tiago Epifânio (Portuguese)
  • dxwc (Bengali)
  • liffon (Swedish)
  • Evgeny Petrov (Russian)
  • Vanege (Esperanto)
  • Johan Schiff (Swedish)
  • kat (Ukrainian; Russian)
  • oti4500 (Hungarian; Ukrainian)
  • Juan José Salvador Piedra (Spanish)
  • diazepan (Spanish)
  • SHeija (Finnish)
  • christalleras (Norwegian Nynorsk)
  • Jack R (Spanish)
  • Saederup92 (Danish)
  • sabri (Spanish)
  • Stasiek Michalski (Polish)
  • Dewi (Breton; French)
  • ariasuni (French; Esperanto)
  • AW Unad (Indonesian)
  • cybergene (Japanese)
  • Andrea Lo Iacono (Italian)
  • Ray (Spanish)
  • Unmual (Spanish)
  • Ryo (Korean)
  • juanda097 (Spanish)
  • Anunnakey (Macedonian)
  • Cutls (Japanese)
  • ruine (Japanese)
  • MadeInSteak (Finnish)
  • Sokratis Alichanidis (Greek)
  • dragnucs2 (Arabic)
  • frumble (German)
  • erikstl (Esperanto)
  • Rikard Linde (Swedish)
  • PPNplus (Thai)
  • EPEMA YT (German)
  • Rhys Harrison (Esperanto)
  • KEINOS (Japanese)
  • JzshAC (Chinese Simplified)
  • Rintan1 (Japanese)
  • hiphipvargas (Portuguese)
  • Ch. (Korean)
  • tctovsli (Norwegian Nynorsk)
  • vjasiegd (Polish)
  • SamitiMed (Thai)
  • umelard (Hebrew)
  • 硫酸鶏 (Japanese)
  • Adrián Lattes (Spanish)
  • Hinaloe (Japanese)
  • Renato "Lond" Cerqueira (Portuguese, Brazilian)
  • Marcin Mikołajczak (Polish)
  • filippodb (Italian)
  • 森の子リスのミーコの大冒険 (Japanese)
  • Sahak Petrosyan (Armenian)
  • Marcepanek_ (Polish)
  • Daniel Dimitrov (Bulgarian)
  • Hugh Liu (Chinese Simplified)
  • Rakino (Chinese Simplified)
  • hussama (Portuguese, Brazilian)
  • eichkat3r (German)
  • SnDer (Dutch)
  • Karol Kosek (Polish)
  • Akarshan Biswas (Bengali)
  • Tradjincal (French)
  • sergioaraujo1 (Portuguese, Brazilian)
  • mmokhi (Persian)
  • skaaarrr (German)
  • Lukas Fülling (German)
  • JackXu (Chinese Simplified)
  • Zoé Bőle (German)
  • Dremski (Bulgarian)
  • OpenAlgeria (Arabic)
  • waweic (German)
  • Benjamin Cobb (German)
  • さっかりんにーさん (Japanese)
  • Abijeet Patro (Basque)