Hazelnoot<p></p> <b>Sharkey 2025.4.3 has been released!</b> <span><br>Hi friends! Yesterday we released a minor update to Sharkey with a bunch of important bug fixes, many optimizations, and several new features. </span><b>We strongly recommend that all 2025.4.2 instances update to this version, as the prior release includes serious bugs.</b><span> Instances running older versions should also make plans to update, as this release includes (minor) security fixes.<br><br>Here's a quick summary of the changes. As usual, changes are loosely grouped by category and the "[MK]" suffix means that a particular change was inherited from Misskey.<br><br></span><b>Security fixes:</b><span><br>- Prevent remote instances from interacting with local-only posts<br>- Fix user-list WebSocket channel missing authentication<br>- Harden </span><code>getApId</code><span> against type confusion<br>- Harden </span><code>resolveLocal</code><span> against local URLs to remote content<br>- Add </span><code>X-Robots-Tag</code><span> to protect the API from being abused for SEO manipulation<br>- Fix user charts leaking follower counts<br>- Fix backend crash when processing SVG images that contain text on systems that do not have any fonts installed<br><br></span><b>Performance improvements:</b><span><br>- Optimize videos for web playback<br>- Optimize all queries by disabling TypeORM Redis cache<br>- Optimize Mastodon API note conversion by fetching less additional data<br>- Optimize instance blocks / silences by avoiding O(n^2) string comparison loops<br>- Optimize instance blocks / silences by defining custom database statistics<br>- Optimize most queries by replacing </span><code>WHERE (NOT) IN</code> with <code>WHERE (NOT) EXISTS</code><span><br>- Optimize timeline endpoints by ommitting unnecessary calls to </span><code>nextTick</code><span><br>- Optimize timeline endpoints by using </span><code>nextTick</code><span> to defer user status updates<br>- Optimize timeline endpoints by ommitting unnecessary calls to </span><code>generateVisibilityQuery</code><span><br>- Optimize timeline endpoints by ommitting unnecessary calls to </span><code>userFollowingsCache.fetch</code><span><br>- Optimize timeline endpoints by loading followings in parallel with the main fetch query<br>- Optimize timeline endpoints by adding covering indexes<br>- Optimize timeline endpoints by loading everything in parallel<br>- Optimize timeline endpoints by populating relations on fallback note fetches<br>- Optimize timeline endpoints by de-duplicating the list of notes/users to pack<br>- Optimize timeline endpoints by re-using fetched notes when recursing to reply/renote<br>- Optimize timeline endpoints by avoiding N+1 queries for visibility checks<br>- Optimize timeline endpoints by avoiding N+1 queries for polls<br>- Optimize timeline endpoints by avoiding N+1 queries for channel notes<br>- Optimize websocket connections by caching muted instance metadata<br>- Optimize reports UI by inlining the referenced users / instances into the response<br>- Optimize URL previews by caching alias URLs and bailing earlier<br>- Optimize URL previews by adding an index over </span><code>note.url</code><span><br>- Optimize most backend operations by replacing Redis caches with Quantum caches (Memory caches w/ synchronization IPC)<br>- Optimize many backend operations by replacing N+1 cache updates with single-op bulk updates<br>- Optimize many backend operations by caching user followers<br>- Optimize many backend operations by caching hibernation status separate from following / follower relations<br>- Optimize HTML routines by consolidating multiple different HTML/XML/RSS libraries to just use Cheerio<br><br></span><b>Settings / preference fixes:</b><span><br>- Fix "show soft-muted word" setting not working<br>- Fix folders not working in mute/block settings<br>- Fix missing custom search engine setting<br>- Fix missing Tossface icons setting<br>- Fix font size setting not saving to profile<br>- Fix use system font setting not saving to profile<br>- Fix corner radius setting not saving to profile<br>- Fix language setting not saving to profile<br>- Fix custom CSS setting not saving to profile<br>- Fix "never show again" buttons not working<br>- Fix several bugs in the preference migration logic<br><br></span><b>Other bug fixes:</b><span><br>- Fix migration to avoid failures when an index doesn't exist<br>- Fix errors on instance / user lists caused by chart API rate limit<br>- Fix broken icon alignment<br>- Fix some icons showing in wrong icon font<br>- Fix "would you like to reload" message showing ok/cancel instead of yes/no buttons<br>- Fix discord previews still showing CWed content in some cases<br>- Fix DeepLX translation not working<br>- Fix missing instance banner<br>- Fix timeline dropping / skipping notes<br>- Fix missing space between notes and ads<br>- Fix bubble timeline returning wrong notes under certain conditions<br>- Fix bubble timeline not returning any results<br>- Fix quotes with only a poll being counted as boosts<br>- Fix many logic errors in query helper functions<br>- Fix </span><code>withRenotes</code><span> not working in some timelines<br>- Fix mentions tab, following feed, and antenna timeline not marking the current user as active<br>- Fix inconsistent block, mute, and silence behavior between different timelines and views<br>- Fix potential error when using the local or global timeline channels when not logged in<br>- Fix broken note embeddings when a page references more notes than the rate limit of </span><code>notes/show</code><span> endpoint<br>- Fix duplicate URL previews when a URL is repeated in the note<br>- Fix missing URL previews when the note has more URLs than the </span><code>/url</code><span> rate limit<br>- Fix note actions toolbar overflowing the screen on mobile<br>- Fix URL previews trying to render links to profiles as notes<br>- Fix delayed user/setting updates and moderation actions in instances running with multiple processes<br>- Fix spacer CSS not working reliably on Firefox<br>- Fix hard-muted notes leaving an extra-wide spacer in the timeline<br>- Fix "defederate" rocket icon using the wrong color<br>- Fix S3 errors resulting in silent loss of data<br>- Fix empty HTML nodes converting to invalid MFM markup<br>- Fix stray "RN:" suffix when viewing a note in detail<br>- Fix "reply" indicator showing on its own line<br>- Fix user suspension permanently severing follow relations<br>- Fix notifications not grouping when a different notification happens in between<br>- Fix frontend occasionally rendering boosts as quotes<br><br></span><b>New features and general improvements:</b><span><br>- Allow unauthenticated (guest or logged-out) users to translate notes<br>- Increase default max upload size<br>- Add </span><code>unixtime</code><span> to the MFM cheatsheet<br>- Overhaul trending polls<br>- Implement support for Mastodon's Link Attributions<br>- Add option to prefix reply CWs with "RE:"<br>- Improve Thai localization<br>- Automatically select the first page of reactions when viewing reactions to a post, saving a click<br><br></span><b>Moderation improvements:</b><span><br>- Restructure instance admin screen to look like user admin<br>- Remove vertical height limit on collapisble sections in the reports UI<br>- Add date separation to the reports UI<br>- Display inline instance info in the reports UI<br>- Show signup reason on admin-user<br>- Widen admin user/instance screens to avoid scrolling the tab bar<br><br></span><b>Administration improvements:</b><span><br>- Show raw AP representation on user admin screen<br>- Fix abuse reports being sent to the wrong admin email<br><br></span><b>Sysadmin improvements:</b><span><br>- Log configuration file paths for debugging<br>- Show detailed errors when a configuration file can't be loaded<br>- Add </span><code>MK_HIDE_WORKER_ID</code><span> environment option to exclude worker ID from logs<br>- Increase indent in logging to improve column alignment<br>- Add </span><code>slowQueryThreshold</code><span> setting to configure the "query is slow" warning<br>- Fix TypeORM errors being hidden<br>- Cleanup logging to avoid spam and provide more useful info<br>- Add additional logging for unexpected exits and crashes<br><br></span><b>Federation fixes and improvements:</b><span><br>- Allow fragments in AP object IDs<br>- Fix errors when an incoming activity has missing or invalid actor<br>- Accept following, followers, and pinned notes collections that are inlined into the actor<br>- Implement support for fep-044f "Mastodon" quotes<br>- Implement support for fep-e232 "object tag" quotes<br>- Fix boosts federating as quotes<br><br></span><b>Removed features:</b><span><br>- Remove unsupported legacy implementation of includeMyRenotes, includeRenotedMyNotes, and includeLocalRenotes<br>- Remove uncaught exception handler that could potentially corrupt application state<br><br>Thanks for reading, and I hope you enjoy the update! Please let me know what you think, and especially tell me if you find any new bugs! Thanks for Sharking with us~<br><br></span><a href="https://enby.life/tags/Sharkey" rel="nofollow noopener noreferrer" target="_blank">#Sharkey</a> <a href="https://enby.life/tags/SharkeyAdmins" rel="nofollow noopener noreferrer" target="_blank">#SharkeyAdmins</a> <a href="https://enby.life/tags/FediAdmins" rel="nofollow noopener noreferrer" target="_blank">#FediAdmins</a> <a href="https://enby.life/tags/Changelog" rel="nofollow noopener noreferrer" target="_blank">#Changelog</a> <a href="https://enby.life/tags/Announcement" rel="nofollow noopener noreferrer" target="_blank">#Announcement</a><p></p>