# Changelog All notable changes to this project will be documented in this file. ## [4.5.0] - UNRELEASED ### Added - **Add support for allowing and authoring quotes** (#35355, #35578, #35614, #35618, #35624, #35626, #35652, #35629, #35665, #35653, #35670, #35677, #35690, #35697, #35689, #35699, #35700, #35701, #35709, #35714, #35713, #35715, #35725, #35749, #35769, #35780, #35762, #35804, #35808, #35805, #35819, #35824, #35828, #35822, #35835, #35865, #35860, #35832, #35891, #35894, #35895, #35820, #35917, #35924, #35925, #35914, #35930, #35941, #35939, #35948, #35955, #35967, #35990, #35991, #35975, #35971, #36002, #35986, #36031, #36034, #36038, #36054, #36052, #36055, #36065, #36068, #36083, #36087, #36080, #36091, #36090, #36118, #36119, #36128, #36094, #36129, #36138, #36132, #36151, #36158, #36171, #36194, #36220, #36169, #36130, #36249, #36153, #36299, #36291, #36301, #36315, #36317, #36364, #36383, #36381, #36459, #36464, #36461, #36516, #36528, #36549, #36550 and #36559 by @ChaosExAnima, @ClearlyClaire, @Lycolia, @diondiondion, and @tribela)\ This includes a revamp of the composer interface.\ See https://blog.joinmastodon.org/2025/09/introducing-quote-posts/ for a user-centric overview of the feature, and https://docs.joinmastodon.org/client/quotes/ for API documentation. - **Add support for fetching and refreshing replies to the web UI** (#35210, #35496, #35575, #35500, #35577, #35602, #35603, #35654, #36141, #36237, #36172, #36256, #36271, #36334, #36382, #36239, #36484, #36481, #36583, #36627 and #36547 by @ClearlyClaire, @diondiondion, @Gargron and @renchap) - **Add ability to block words in usernames** (#35407, #35655, and #35806 by @ClearlyClaire and @Gargron) - Add ability to individually disable local or remote feeds for visitors or logged-in users `disabled` value to server setting for live and topic feeds, as well as user permission to bypass that (#36338, #36467, #36497, #36563, #36577, #36585, and #36607 by @ClearlyClaire)\ This splits the `timeline_preview` setting into four more granular settings controlling live feeds and topic (hashtag, trending link) feeds, with 3 values each: `public`, `authenticated`, `disabled`.\ When `disabled`, users with the “View live and topic feeds” will still be able to view them. - Add support for displaying of quote posts in Moderator UI (#35964 by @ThisIsMissEm) - Add support for displaying link previews for Admin UI (#35958 by @ThisIsMissEm) - Add a new server setting to choose the server landing page (#36588 and #36602 by @ClearlyClaire and @renchap) - Add support for `Update` activities on converted object types (#36322 by @ClearlyClaire) - Add support for dynamic viewport height (#36272 by @e1berd) - Add support for numeric-based URIs for new local accounts (#32724, #36304, #36316, and #36365 by @ClearlyClaire) - Add Traditional Mongolian to posting languages (#36196 by @shimon1024) - Add example post with manual quote approval policy to `dev:populate_sample_data` (#36099 by @ClearlyClaire) - Add server-side support for handling posts with a quote policy allowing followers to quote (#36093 and #36127 by @ClearlyClaire) - Add schema.org markup to SEO-enabled posts (#36075 by @Gargron) - Add migration to fill unset default quote policy based on default post privacy (#36041 by @ClearlyClaire) - Add support for exposing conversation context for new public conversations according to FEP-7888 (#35959 and #36064 by @ClearlyClaire and @jesseplusplus) - Add digest re-check before removing followers in synchronization mechanism (#34273 by @ClearlyClaire) - Add “Posting defaults” setting page, moving existing settings from “Other” (#35896, #36033, #35966, #35969, and #36084 by @ClearlyClaire and @diondiondion) - Add support for displaying Valkey version on admin dashboard (#35785 by @ykzts) - Add delivery failure tracking and handling to FASP jobs (#35625, #35628, and #35723 by @oneiros) - Add example of quote post with a preview card to development sample data (#35616 by @ClearlyClaire) - Add second set of blocked text that applies to accounts regardless of account age for spam-blocking (#35563 by @ClearlyClaire) - Added emoji from Twemoji v16 (#36501 and #36530 by @ChaosExAnima) - Add feature to select custom emoji rendering (#35229, #35282, #35253, #35424, #35473, #35483, #35505, #35568, #35605, #35659, #35664, #35739, #35985, #36051, #36071, #36137, #36165, #36248, #36262, #36275, #36293, #36341, #36342, #36366, #36377, #36378, #36385, #36393, #36397, #36403, #36413, #36410, #36454, #36402, #36503, #36502, #36532, #36603, #36409 and #36638 by @ChaosExAnima, @ClearlyClaire and @braddunbar)\ This also completely reworks the processing and rendering of emojis and server-rendered HTML in statuses and other places. ### Changed - Change confirmation dialogs for follow button actions “unfollow”, “unblock”, and “withdraw request” (#36289 by @diondiondion) - Change “Follow” button labels (#36264 by @diondiondion) - Change appearance settings to introduce new Advanced settings section (#36496 and #36506 by @diondiondion) - Change display of blocked and muted quoted users (#36619 by @ClearlyClaire)\ This adds `blocked_account`, `blocked_domain` and `muted_account` values to the `state` attribute of `Quote` and `ShallowQuote` REST API entities. - Change display of content warnings in Admin UI (#35935 by @ThisIsMissEm) - Change styling of column banners (#36531 by @ClearlyClaire) - Change recommended Node version to 24 (LTS) (#36539 by @renchap) - Change min. characters required for logged-out account search from 5 to 3 (#36487 by @Gargron) - Change browser target to Vite legacy plugin defaults (#36611 by @larouxn) - Change index on `follows` table to improve performance of some queries (#36374 by @ClearlyClaire) - Change links to accounts in settings and moderation views to link to local view unless account is suspended (#36340 by @diondiondion) - Change redirection for denied registration from web app to sign-in page with error message (#36384 by @ClearlyClaire) - Change support for RFC9421 HTTP signatures to be enabled unconditionally (#36610 by @oneiros) - Change wording and design of interaction dialog to simplify it (#36124 by @diondiondion) - Change dropdown menus to allow disabled items to be focused (#36078 by @diondiondion) - Change modal background colours in light mode (#36069 by @diondiondion) - Change “Posting defaults” settings page to enforce `nobody` quote policy for `private` default visibility (#36040 by @ClearlyClaire) - Change description of “Quiet public” (#36032 by @ClearlyClaire) - Change “Boost with original visibility” to “Share again with your followers” (#36035 by @ClearlyClaire) - Change handling of push subscriptions to automatically delete invalid ones on delivery (#35987 by @ThisIsMissEm) - Change design of quote posts in web UI (#35584 and #35834 by @Gargron) - Change auditable accounts to be sorted by username in admin action logs interface (#35272 by @breadtk) - Change order of translation restoration and service credit on post card (#33619 by @colindean) - Change position of ‘add more’ to be inside table toolbar on reports (#35963 by @ThisIsMissEm) - Change docker-compose.yml sidekiq health check to work for both 4.4 and 4.5 (#36498 by @ClearlyClaire) ### Fixed - Fix relationship not being fetched to evaluate whether to show a quote post (#36517 by @ClearlyClaire) - Fix rendering of poll options in status history modal (#35633 by @ThisIsMissEm) - Fix “mute” button being displayed to unauthenticated visitors in hashtag dropdown (#36353 by @mkljczk) - Fix URL comparison for mentions in case of empty path (#36613 and #36626 by @ClearlyClaire) - Fix hashtags not being picked up when full-width hash sign is used (#36103 and #36625 by @ClearlyClaire and @Gargron) - Fix layout of severed relationships when purged events are listed (#36593 by @mejofi) - Fix vacuum tasks being interrupted by a single batch failure (#36606 by @Gargron) - Fix handling of unreachable network error for search services (#36587 by @mjankowski) - Fix bookmarks export when a bookmarked status is soft-deleted (#36576 by @ClearlyClaire) - Fix text overflow alignment for long author names in News (#36562 by @diondiondion) - Fix discovery preamble missing word in admin settings (#36560 by @belatedly) - Fix overflow handling of `.more-from-author` (#36310 by @edent) - Fix unfortunate action button wrapping in admin area (#36247 by @diondiondion) - Fix translate button width in Safari (#36164 and #36216 by @diondiondion) - Fix login page linking to other pages within OAuth authorization flow (#36115 by @Gargron) - Fix stale search results being displayed in Web UI while new query is in progress (#36053 by @ChaosExAnima) - Fix YouTube iframe not being able to start at a defined time (#26584 by @BrunoViveiros) - Fix banned text being able to be circumvented via unicode (#35978 by @Gargron) - Fix batch table toolbar displaying under status media (#35962 by @ThisIsMissEm) - Fix incorrect RSS feed MIME type in gzip_types directive (#35562 by @iioflow) - Fix 404 error after deleting status from detail view (#35800) (#35881 by @crafkaz) - Fix feeds keyboard navigation issues (#35853, #35864, and #36267 by @braddunbar and @diondiondion) - Fix layout shift caused by “Who to follow” widget (#35861 by @diondiondion) - Fix Vagrantfile (#35765 by @ClearlyClaire) - Fix reply indicator displaying wrong avatar in rare cases (#35756 by @ClearlyClaire) - Fix `Chewy::UndefinedUpdateStrategy` in `dev:populate_sample_data` task when Elasticsearch is enabled (#35615 by @ClearlyClaire) - Fix unnecessary account note addition for already-muted moved-to users (#35566 by @mjankowski) - Fix seeded admin user creation failing on specific configurations (#35565 by @oneiros) - Fix media modal images in Web UI having redundant `title` attribute (#35468 by @mayank99) - Fix inconsistent default privacy post setting when unset in settings (#35422 by @oneiros) - Fix glitchy status keyboard navigation (#35455 and #35504 by @diondiondion) - Fix post being submitted when pressing “Enter” in the CW field (#35445 by @diondiondion) ### Removed - Remove support for PostgreSQL 13 (#36540 by @renchap) ## [4.4.8] - 2025-10-21 ### Security - Fix quote control bypass ([GHSA-8h43-rcqj-wpc6](https://github.com/mastodon/mastodon/security/advisories/GHSA-8h43-rcqj-wpc6)) ## [4.4.7] - 2025-10-15 ### Fixed - Fix forwarder being called with `nil` status when quote post is soft-deleted (#36463 by @ClearlyClaire) - Fix moderation warning e-mails that include posts (#36462 by @ClearlyClaire) - Fix allow_referrer_origin typo (#36460 by @ShadowJonathan) ## [4.4.6] - 2025-10-13 ### Security - Update dependencies `rack` and `uri` - Fix streaming server connection not being closed on user suspension (by @ThisIsMissEm, [GHSA-r2fh-jr9c-9pxh](https://github.com/mastodon/mastodon/security/advisories/GHSA-r2fh-jr9c-9pxh)) - Fix password change through admin CLI not invalidating existing sessions and access tokens (by @ThisIsMissEm, [GHSA-f3q3-rmf7-9655](https://github.com/mastodon/mastodon/security/advisories/GHSA-f3q3-rmf7-9655)) - Fix streaming server allowing access to public timelines even without the `read` or `read:statuses` OAuth scopes (by @ThisIsMissEm, [GHSA-7gwh-mw97-qjgp](https://github.com/mastodon/mastodon/security/advisories/GHSA-7gwh-mw97-qjgp)) ### Added - Add support for processing quotes of deleted posts signaled through a `Tombstone` (#36381 by @ClearlyClaire) ### Fixed - Fix quote post state sometimes not being updated through streaming server (#36408 by @ClearlyClaire) - Fix inconsistent “pending tags” count on admin dashboard (#36404 by @mjankowski) - Fix JSON payload being potentially mutated when processing interaction policies (#36392 by @ClearlyClaire) - Fix quotes not being displayed in email notifications (#36379 by @diondiondion) - Fix redirect to external object when URL is missing or malformed (#36347 by @ClearlyClaire) - Fix quotes not being displayed in the featured carousel (#36335 by @diondiondion) ## [4.4.5] - 2025-09-23 ### Security - Update dependencies ### Added - Add support for `has:quote` in search (#36217 by @ClearlyClaire) ### Changed - Change quoted posts from silenced accounts to use a click-through rather than being hidden (#36166 and #36167 by @ClearlyClaire) ### Fixed - Fix processing of out-of-order `Update` as implicit updates (#36190 by @ClearlyClaire) - Fix getting `Create` and `Update` out of order (#36176 by @ClearlyClaire) - Fix quotes with Content Warnings but no text being shown without Content Warnings (#36150 by @ClearlyClaire) ## [4.4.4] - 2025-09-16 ### Security - Update dependencies ### Fixed - Fix missing memoization in `Web::PushNotificationWorker` (#36085 by @ClearlyClaire) - Fix unresponsive areas around GIFV modals in some cases (#36059 by @ClearlyClaire) - Fix missing `beforeUnload` confirmation when a poll is being authored (#36030 by @ClearlyClaire) - Fix processing of remote edited statuses with new media and no text (#35970 by @unfokus) - Fix polls not being displayed in moderation interface (#35644 and #35933 by @ThisIsMissEm) - Fix WebUI handling of deleted quoted posts (#35909 and #35918 by @ClearlyClaire and @diondiondion) - Fix “Edit” and “Delete & Redraft” on a poll not inserting empty option (#35892 by @ClearlyClaire) - Fix loading of some compatibility CSS on some configurations (#35876 by @shleeable) - Fix HttpLog not being enabled with `RAILS_LOG_LEVEL=debug` (#35833 by @mjankowski) - Fix self-destruct scheduler behavior on some Redis setups (#35823 by @ClearlyClaire) - Fix `tootctl admin create` not bypassing reserved username checks (#35779 by @ClearlyClaire) - Fix interaction policy changes in implicit updates not being saved (#35751 by @ClearlyClaire) - Fix quote revocation not being streamed (#35710 by @ClearlyClaire) - Fix export of large user archives by enabling Zip64 (#35850 by @ClearlyClaire) ### Changed - Change labels for quote policy settings (#35893 by @ClearlyClaire) - Change standalone “Share” page to redirect to web interface after posting (#35763 by @ChaosExAnima) ## [4.4.3] - 2025-08-05 ### Security - Update dependencies - Fix incorrect rate-limit handling [GHSA-84ch-6436-c7mg](https://github.com/mastodon/mastodon/security/advisories/GHSA-84ch-6436-c7mg) ### Fixed - Fix race condition caused by ActiveRecord query cache in `Create` critical path (#35662 by @ClearlyClaire) - Fix race condition caused by quote post processing (#35657 by @ClearlyClaire) - Fix WebUI crashing for accounts with `null` URL (#35651 by @ClearlyClaire) - Fix friends-of-friends recommendations suggesting already-requested accounts (#35604 by @ClearlyClaire) - Fix synchronous recursive fetching of deeply-nested quoted posts (#35600 by @ClearlyClaire) - Fix “Expand this post” link including user `@undefined` (#35478 by @ClearlyClaire) ### Changed - Change `StatusReachFinder` to consider quotes as well as reblogs (#35601 by @ClearlyClaire) - Add restrictions on which quote posts can trend (#35507 by @ClearlyClaire) - Change quote verification to not bypass authorization flow for mentions (#35528 by @ClearlyClaire) ## [4.4.2] - 2025-07-23 ### Security - Update dependencies ### Fixed - Fix menu not clickable in Firefox (#35390 and #35414 by @diondiondion) - Add `lang` attribute to current composer language in alt text modal (#35412 by @diondiondion) - Fix quote posts styling on notifications page (#35411 by @diondiondion) - Improve a11y of custom select menus in notifications settings (#35403 by @diondiondion) - Fix selected item in poll select menus is unreadable in Firefox (#35402 by @diondiondion) - Update age limit wording (#35387 by @diondiondion) - Fix support for quote verification in implicit status updates (#35384 by @ClearlyClaire) - Improve `Dropdown` component accessibility (#35373 by @diondiondion) - Fix processing some incoming quotes failing because of missing JSON-LD context (#35354 and #35380 by @ClearlyClaire) - Make bio hashtags open the local page instead of the remote instance (#35349 by @ChaosExAnima) - Fix styling of external log-in button (#35320 by @ClearlyClaire) ## [4.4.1] - 2025-07-09 ### Fixed - Fix nearly every sub-directory being crawled as part of Vite build (#35323 by @ClearlyClaire) - Fix assets not building when Redis is unavailable (#35321 by @oneiros) - Fix replying from media modal or pop-in-player tagging user `@undefined` (#35317 by @ClearlyClaire) - Fix support for special characters in various environment variables (#35314 by @mjankowski and @ClearlyClaire) - Fix some database migrations failing for indexes manually removed by admins (#35309 by @mjankowski) ## [4.4.0] - 2025-07-08 ### Added - **Add “Followers you know” widget to user profiles and hover cards** (#34652, #34678, #34681, #34697, #34699, #34769, #34774 and #34914 by @diondiondion) - **Add featured tab to profiles on web UI and rework pinned posts** (#34405, #34483, #34491, #34754, #34855, #34858, #34868, #34869, #34927, #34995, #35056 and #34931 by @ChaosExAnima, @ClearlyClaire, @Gargron, and @diondiondion) - Add endorsed accounts to featured tab in web UI (#34421 and #34568 by @Gargron)\ This also includes the following new REST API endpoints: - `GET /api/v1/accounts/:id/endorsements`: https://docs.joinmastodon.org/methods/accounts/#endorsements - `POST /api/v1/accounts/:id/endorse`: https://docs.joinmastodon.org/methods/accounts/#endorse - `POST /api/v1/accounts/:id/unendorse`: https://docs.joinmastodon.org/methods/accounts/#unendorse - Add ability to add and remove hashtags from featured tags in web UI (#34489, #34887, and #34490 by @ClearlyClaire and @Gargron)\ This is achieved through the new REST API endpoints: - `POST /api/v1/tags/:id/feature`: https://docs.joinmastodon.org/methods/tags/#feature - `POST /api/v1/tags/:id/unfeature`: https://docs.joinmastodon.org/methods/tags/#unfeature - Add reminder when about to post without alt text in web UI (#33760 and #33784 by @Gargron) - Add a warning in Web UI when composing a post when the selected and detected language are different (#33042, #33683, #33700, #33724, #33770, and #34193 by @ClearlyClaire and @Gargron) - Add support for verifying and displaying remote quote posts (#34370, #34481, #34510, #34551, #34480, #34479, #34553, #34584, #34623, #34738, #34766, #34770, #34772, #34773, #34786, #34790, #34864, #34957, #34961, #35016, #35022, #35036, #34946, #34945 and #34958 by @ClearlyClaire and @diondiondion)\ Support for verifying remote quotes according to [FEP-044f](https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md) and displaying them in the Web UI has been implemented.\ Quoting other people is not implemented yet, and it is currently not possible to mark your own posts as allowing quotes. However, a new “Who can quote” setting has been added to the “Posting defaults” section of the user settings. This setting allows you to set a default that will be used for new posts made on Mastodon 4.5 and newer, when quote posts will be fully implemented.\ In the REST API, quote posts are represented by a new `quote` attribute on `Status` and `StatusEdit` entities: https://docs.joinmastodon.org/entities/StatusEdit/#quote https://docs.joinmastodon.org/entities/Status/#quote - Add ability to reorder and translate server rules (#34637, #34737, #34494, #34756, #34820, #34997, #35170, #35174 and #35174 by @ChaosExAnima and @ClearlyClaire)\ Rules are now shown in the user’s language, if a translation has been set.\ In the REST API, `Rule` entities now have a new `translations` attribute: https://docs.joinmastodon.org/entities/Rule/#translations - Add emoji from Twemoji 15.1.0, including in the emoji picker/completion (#33395, #34321, #34620, and #34677 by @ChaosExAnima, @ClearlyClaire, @TheEssem, and @eramdam) - Add option to remove account from followers in web UI (#34488 by @Gargron) - Add relationship tags to profiles and hover cards in web UI (#34467 and #34792 by @Gargron and @diondiondion) - Add ability to open posts in a new tab by middle-clicking in web UI (#32988, #33106, #33419, and #34700 by @ClearlyClaire, @Gargron, and @tribela) - Add new filter action to blur media (#34256 by @ClearlyClaire)\ In the REST API, this adds a new possible value of `blur` to the `filter_action` attribute: https://docs.joinmastodon.org/entities/Filter/#filter_action - Add dropdown menu to hashtag links in web UI (#34393 by @Gargron) - **Add server setting to allow referrer** (#33214, #33239, #33903, and #34731 by @ChaosExAnima, @ClearlyClaire, @Gargron, and @renchap)\ In order to protect the privacy of users of small or thematic servers, Mastodon previously avoided transmitting referrer information when clicking outside links, which unfortunately made Mastodon completely invisible to other websites, even though the privacy implications on large generic servers are very limited.\ Server administrators can now chose to opt in to transmit referrer information when following an external link. Only the domain name is transmitted, not the referrer path. - Add double tap to zoom and swipe to dismiss to media modal in web UI (#34210 by @Gargron) - Add link from Web UI for Hashtags to the Moderation UI (#31448 by @ThisIsMissEm) - **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527, #35053, #35115, #35126, #35127 and #35233 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\ Server administrators can now fill in Terms of Service and notify their users of upcoming changes. - Add optional bulk mailer settings (#35191 and #35203 by @oneiros)\ This adds the optional environment variables `BULK_SMTP_PORT`, `BULK_SMTP_SERVER`, `BULK_SMTP_LOGIN` and so on analogous to `SMTP_PORT`, `SMTP_SERVER`, `SMTP_LOGIN` and related SMTP configuration environment variables.\ When `BULK_SMTP_SERVER` is set, this group of variables is used instead of the regular ones for sending announcement notification emails and Terms of Service notification emails. - **Add age verification on sign-up** (#34150, #34663, and #34636 by @ClearlyClaire and @Gargron)\ Server administrators now have a setting to set a minimum age requirement for creating a new server, asking users for their date of birth. The date of birth is checked against the minimum age requirement server-side but not stored.\ The following REST API changes have been made to accommodate this: - `registrations.min_age` has been added to the `Instance` entity: https://docs.joinmastodon.org/entities/Instance/#registrations-min_age - the `date_of_birth` parameter has been added to the account creation API: https://docs.joinmastodon.org/methods/accounts/#create - Add ability to dismiss alt text badge by tapping it in web UI (#33737 by @Gargron) - Add loading indicator to timeline gap indicators in web UI (#33762 by @Gargron) - Add interaction modal when trying to interact with a poll while logged out (#32609 by @ThisIsMissEm) - **Add experimental FASP support** (#34031, #34415, #34765, #34965, #34964, #34033, #35218, #35262 and #35263 by @oneiros)\ This is a first step towards supporting “Fediverse Auxiliary Service Providers” (https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications). This is mostly interesting to developers who would like to implement their own FASP, but also includes the capability to share data with a discovery provider (see https://www.fediscovery.org). - Add ability for admins to send announcements to all users via email (#33928 and #34411 by @ClearlyClaire)\ This is meant for critical announcements only, as this will potentially send a lot of emails and cannot be opted out of by users. - Add Server Moderation Notes (#31529 by @ThisIsMissEm) - Add loading spinner to “Post” button when sending a post (#35153 by @diondiondion) - Add option to use system scrollbar styling (#32117 by @vmstan) - Add hover cards to follow suggestions (#33749 by @ClearlyClaire) - Add `t` hotkey for post translations (#33441 by @ClearlyClaire) - Add timestamp to all announcements in Web UI (#18329 by @ClearlyClaire) - Add dropdown menu with quick actions to lists of accounts in web UI (#34391, #34709, and #34767 by @Gargron, @diondiondion, and @mkljczk) - Add support for displaying “year in review” notification in web UI (#32710, #32765, #32709, #32807, #32914, #33148, and #33882 by @Gargron and @mjankowski)\ Note that the notification is currently not generated automatically, and at the moment requires a manual undocumented administrator action. - Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814, #35033, #35109 and #35278 by @oneiros)\ For now, this needs to be explicitly enabled through the `http_message_signatures` feature flag (`EXPERIMENTAL_FEATURES=http_message_signatures`). This currently only covers verifying such signatures (inbound HTTP requests), not issuing them (outbound HTTP requests). - Add experimental Async Refreshes API (#34918 by @oneiros) - Add experimental server-side feature to fetch remote replies (#32615, #34147, #34149, #34151, #34615, #34682, and #34702 by @ClearlyClaire and @sneakers-the-rat)\ This experimental feature causes the server to recursively fetch replies in background tasks whenever a user opens a remote post. This happens asynchronously and the client is currently not notified of the existence of new replies, which will thus only be displayed the next time this post’s context gets requested.\ This feature needs to be explicitly enabled server-side by setting `FETCH_REPLIES_ENABLED` environment variable to `true`. - Add simple feature flag system through the `EXPERIMENTAL_FEATURES` environment variable (#34038 and #34124 by @oneiros)\ This allows enabling comma-separated feature flags for experimental features.\ The current supported feature flags are `inbound_quotes`, `fasp` and `http_message_signatures`. - Add `dev:populate_sample_data` rake task to populate test data (#34676, #34733, #34771, #34787, and #34791 by @ClearlyClaire and @diondiondion) - Add support for displaying fallback representation when receiving MathML (#27107 by @4e554c4c) - Add warning for Elasticsearch index analyzers mismatch (#34515 and #34567 by @ClearlyClaire and @Gargron) - Add `-only-mapping` option to `tootctl search deploy` (#34466 and #34566 by @Gargron) - Add server-side support for grouping account sign-up notifications (#34298 by @ClearlyClaire) - Add `registrations.reason_required` attribute to `/api/v2/instance` response (#34280 by @ClearlyClaire)\ This is documented at https://docs.joinmastodon.org/entities/Instance/#registrations-reason_required - Add `EXTRA_MEDIA_HOSTS` environment variable to add extra hosts to Content-Security-Policy (#34184 by @shleeable) - Add `Deprecation` headers on deprecated API endpoints (#34262 and #34397 by @ClearlyClaire)\ This is documented at https://docs.joinmastodon.org/api/guidelines/#deprecations - Add `about`, `privacy_policy` and `terms_of_service` URLs to `/api/v2/instance` (#33849 by @ClearlyClaire) - Add API to delete media attachments that are not in use (#33991 and #34035 by @ClearlyClaire and @ThisIsMissEm)\ `DELETE /api/v1/media/:id`: https://docs.joinmastodon.org/methods/media/#delete - Add optional `delete_media` parameter to `DELETE /api/v1/statuses/:id` (#33988 by @ClearlyClaire)\ This is documented at https://docs.joinmastodon.org/methods/statuses/#delete - Add `og:locale` to expose status language in OpenGraph previews (#34012 by @ThisIsMissEm) - Add `-skip-filled-timeline` option to `tootctl feed build` to skip half-filled feeds (#33844 by @ClearlyClaire) - Add support for changing the base Docker registry with the `BASE_REGISTRY` `ARG` (#33712 by @wolfspyre) - Add an optional metric exporter (#33734, #33840, #34172, #34192, #34223, and #35005 by @oneiros and @renchap)\ Optionally enable the `prometheus_exporter` ruby gem (see https://github.com/discourse/prometheus_exporter) to collect and expose metrics. See the documentation for all the details: https://docs.joinmastodon.org/admin/config/#prometheus - Add `attribution_domains` attribute to `PATCH /api/v1/accounts/update_credentials` (#32730 by @c960657)\ This is documented at https://docs.joinmastodon.org/methods/accounts/#update_credentials - Add support for standard WebPush in addition to previous draft (#33572, #33528, and #33587 by @ClearlyClaire and @p1gp1g) - Add support for Active Record query log tags (#33342 by @renchap) - Add OTel trace & span IDs to logs (#33339 and #33362 by @renchap) - Add missing `on_delete: :cascade` foreign keys option to various database columns (#33175 by @mjankowski) - Add explicit migration breakpoints (#33089 by @ClearlyClaire) - Add rel alternate rss/json links to pages for tags (#33179 by @mjankowski) - Add media attachment description limit to instance API response (#33153 by @mjankowski)\ This adds the `configuration.media_attachments.description_limit` attribute to the `Instance` entity, documented at https://docs.joinmastodon.org/entities/Instance/#description_limit - Add `maxlength` to registration reason input (#33162 by @mjankowski) - Add `REPLICA_PREPARED_STATEMENTS` and `REPLICA_DB_TASKS` environment variables (#32908 by @shleeable)\ See documentation at https://docs.joinmastodon.org/admin/scaling/#read-replicas - Add a range of reserved usernames to reduce potential misuse by malicious actors (#32828 by @jmking-iftas) - Add operations on relays to the admin audit log (#32819 by @ThisIsMissEm) - Add userinfo OAuth endpoint (#32548 by @ThisIsMissEm) - Add the standard VCS attributes to OpenTelemetry spans (#32904 by @renchap) - Add endpoint to remove web push subscription (#32626 by @oneiros)\ Mastodon now sets a new `Unsubscribe-URL` request header when performing WebPush requests. This URL can be used by the WebPush server to disable the WebPush subscription on Mastodon’s side in case of unfixable errors. - Add missing content warning text to RSS feeds (#32406 by @mjankowski) - Add Swiss German to languages dropdown (#29281 by @FlohEinstein) ### Changed - Change design of navigation panel in Web UI, change layout on narrow screens (#34910, #34987, #35017, #34986, #35029, #35065, #35067, #35072, #35074, #35075, #35101, #35173, #35183, #35193 and #35225 by @ClearlyClaire, @Gargron, and @diondiondion) - Change design of lists in web UI (#32881, #33054, and #33036 by @Gargron) - Change design of edit media modal in web UI (#33516, #33702, #33725, #33725, #33771, and #34345 by @Gargron) - Change design of audio player in web UI (#34520, #34740, #34865, #34929, #34933, and #35034 by @ClearlyClaire, @Gargron, and @diondiondion) - Change design of interaction modal in web UI (#33278 by @Gargron) - Change list timelines to reflect added and removed users retroactively (#32930 by @Gargron) - Change account search to be more forgiving of spaces (#34455 by @Gargron) - Change unfollow button label from “Mutual” to “Unfollow” in web UI (#34392 by @Gargron) - Change “Specific people” to “Private mention” in menu in web UI (#33963 by @Gargron) - Change "Explore" to "Trending" and remove explanation banners (#34985 by @Gargron) - Change media attachments of moderated posts to not be accessible (#34872 by @Gargron) Moderators will still be able to access them while they are kept, but they won't be accessible to the public in the meantime. - Change language names in compose box language picker to be localized (#33402 by @c960657) - Change onboarding flow in web UI (#32998, #33119, #33471 and #34962 by @ClearlyClaire and @Gargron) - Change Advanced Web UI to use the new main menu instead of the “Getting started” column (#35117 by @diondiondion) - Change emoji categories in admin interface to be ordered by name (#33630 by @ShadowJonathan) - Change design of rich text elements in web UI (#32633 by @Gargron) - Change wording of “single choice” to “pick one” in poll authoring form (#32397 by @ThisIsMissEm) - Change returned favorite and boost counts to use those provided by the remote server, if available (#32620, #34594, #34618, and #34619 by @ClearlyClaire and @sneakers-the-rat) - Change label of favourite notifications on private mentions (#31659 by @ClearlyClaire) - Change wording of "discard draft?" confirmation dialogs (#35192 by @diondiondion) - Change `libvips` to be enabled by default in place of ImageMagick (#34741 and #34753 by @ClearlyClaire and @diondiondion) - Change avatar and header size limits from 2MB to 8MB when using libvips (#33002 by @Gargron) - Change search to use query params in web UI (#32949 and #33670 by @ClearlyClaire and @Gargron) - Change build system from Webpack to Vite (#34454, #34450, #34758, #34768, #34813, #34808, #34837, #34732, #35007, #35035 and #35177 by @ChaosExAnima, @ClearlyClaire, @mjankowski, and @renchap) - Change account creation API to forbid creation from user tokens (#34828 by @ThisIsMissEm) - Change `/api/v2/instance` to be enabled without authentication when limited federation mode is enabled (#34576 by @ClearlyClaire) - Change `DEFAULT_LOCALE` to not override unauthenticated users’ browser language (#34535 by @ClearlyClaire)\ If you want to preserve the old behavior, you can add `FORCE_DEFAULT_LOCALE=true`. - Change size of profile picture on profile page from 90px to 92px (#34807 by @larouxn) - Change passthrough video processing to emit `moov` atom at start of video (#34726 by @ClearlyClaire) - Change kerning to be disabled for Japanese text to preserve monospaced alignment for readability (#34448 by @nagutabby) - Change error handling of various endpoints to return 422 instead of 500 on invalid parameters (#29308, #34434, and #34452 by @danielmbrasil and @mjankowski) - Change Web UI to use `