Files
reader/outputs/freshrss/candidates/batch/item-05.article-candidate.json
T

129 lines
57 KiB
JSON

{
"candidate_id": "cand:sha256:6b36071bbd22c58692c039e172669ae28ac1ec8a6a6bce150c22d80af29761fc",
"item": {
"item_id": "sha256:6b36071bbd22c58692c039e172669ae28ac1ec8a6a6bce150c22d80af29761fc",
"source_id": "freshrss:2987af960359c5c0",
"external_id": "tag:google.com,2005:reader/item/00064dc18f09d915",
"title": "FreshRSS 1.28.0",
"url": "https://github.com/FreshRSS/FreshRSS/releases/tag/1.28.0",
"author": "Alkarex",
"published_at": "2025-12-24T19:27:23Z",
"discovered_at": "2026-03-25T08:40:22.917124Z",
"content_kind": "article",
"language": null,
"raw_summary": "<ul>\n<li><a href=\"https://github.com/FreshRSS/FreshRSS/milestones/1.28.0\">Milestone</a></li>\n</ul>\n<p>This is a major release, just in time for the holidays 🎄</p>\n<p>Selected new features ✨:</p>\n<ul>\n<li>New sorting and filtering by date of <em>User modified</em>, with corresponding search operator, e.g. <code>userdate:PT1H</code> for the past hour</li>\n<li>New sorting by article length</li>\n<li>New advanced search form</li>\n<li>New overview of dates with most unread articles</li>\n<li>New ability to share feed visibility through API (implemented by e.g. <a href=\"https://github.com/jocmp/capyreader\">Capy Reader</a>)\n<ul>\n<li>Bonus: Capy Reader is also the first open source Android app to support <em>user labels</em></li>\n</ul>\n</li>\n<li>Better transitions UI between groups of articles</li>\n<li>New links in UI for transitions between groups of articles, and jump to next transition</li>\n<li>Docker default image updated to Debian 13 Trixie with PHP 8.4.11</li>\n<li>And much more…</li>\n</ul>\n<p>Improved performance 🏎️:</p>\n<ul>\n<li>Scaling of user statistics in Web UI and CLI, to help instances with 1k+ users</li>\n<li>Improve SQL speed for some critical requests for large databases</li>\n<li>API performance optimisation thanks to streaming of large responses</li>\n</ul>\n<p>Selected bug fixes 🐛:</p>\n<ul>\n<li>Fix OpenID Connect with Debian 13</li>\n<li>Fix MySQL / MariaDB bug wrongly sorting new articles</li>\n<li>Fix SQLite bind bug when adding tag</li>\n</ul>\n<p>Breaking changes 💥:</p>\n<ul>\n<li>Move unsafe autologin to an extension</li>\n<li>Potential breaking changes for some extensions (which have to rename some old functions)</li>\n</ul>\n<p>This release has been made by <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/Alkarex/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/Alkarex\" data-sanitized-class=\"user-mention notranslate\">@Alkarex</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/Frenzie/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/Frenzie\" data-sanitized-class=\"user-mention notranslate\">@Frenzie</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/Inverle/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/Inverle\" data-sanitized-class=\"user-mention notranslate\">@Inverle</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/aledeg/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/aledeg\" data-sanitized-class=\"user-mention notranslate\">@aledeg</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/andris155/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/andris155\" data-sanitized-class=\"user-mention notranslate\">@andris155</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/horvi28/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/horvi28\" data-sanitized-class=\"user-mention notranslate\">@horvi28</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/math-GH/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/math-GH\" data-sanitized-class=\"user-mention notranslate\">@math-GH</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/minna-xD/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/minna-xD\" data-sanitized-class=\"user-mention notranslate\">@minna-xD</a> and newcomers <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/Darkentia/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/Darkentia\" data-sanitized-class=\"user-mention notranslate\">@Darkentia</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/FollowTheWizard/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/FollowTheWizard\" data-sanitized-class=\"user-mention notranslate\">@FollowTheWizard</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/GreyChame1eon/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/GreyChame1eon\" data-sanitized-class=\"user-mention notranslate\">@GreyChame1eon</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/McFev/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/McFev\" data-sanitized-class=\"user-mention notranslate\">@McFev</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/jocmp/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/jocmp\" data-sanitized-class=\"user-mention notranslate\">@jocmp</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/larsks/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/larsks\" data-sanitized-class=\"user-mention notranslate\">@larsks</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/martinhartmann/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/martinhartmann\" data-sanitized-class=\"user-mention notranslate\">@martinhartmann</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/matthew-neavling/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/matthew-neavling\" data-sanitized-class=\"user-mention notranslate\">@matthew-neavling</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/pudymody/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/pudymody\" data-sanitized-class=\"user-mention notranslate\">@pudymody</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/raspo/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/raspo\" data-sanitized-class=\"user-mention notranslate\">@raspo</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/scharmach/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/scharmach\" data-sanitized-class=\"user-mention notranslate\">@scharmach</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/scollovati/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/scollovati\" data-sanitized-class=\"user-mention notranslate\">@scollovati</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/stag-enterprises/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/stag-enterprises\" data-sanitized-class=\"user-mention notranslate\">@stag-enterprises</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/vandys/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/vandys\" data-sanitized-class=\"user-mention notranslate\">@vandys</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/xtmd/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/xtmd\" data-sanitized-class=\"user-mention notranslate\">@xtmd</a>, <a data-hovercard-type=\"user\" data-hovercard-url=\"/users/yzx9/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"https://github.com/yzx9\" data-sanitized-class=\"user-mention notranslate\">@yzx9</a>.</p>\n<p>Full <a href=\"https://github.com/FreshRSS/FreshRSS/blob/1.28.0/CHANGELOG.md\">changelog</a>:</p>\n<ul>\n<li>Features\n<ul>\n<li>New sorting and filtering by date of <em>User modified</em> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7886\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7886/hovercard\">#7886</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8090\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8090/hovercard\">#8090</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8105\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8105/hovercard\">#8105</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8118\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8118/hovercard\">#8118</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8130\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8130/hovercard\">#8130</a>\n<ul>\n<li>Corresponding search operator, e.g. <code>userdate:PT1H</code> for the past hour <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8093\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8093/hovercard\">#8093</a></li>\n<li>Allows finding articles marked by the local user as read/unread or starred/unstarred at specific dates for e.g. undo action.</li>\n</ul>\n</li>\n<li>New sorting by article length <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8119\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8119/hovercard\">#8119</a></li>\n<li>New advanced search form <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8103\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8103/hovercard\">#8103</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8122\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8122/hovercard\">#8122</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8226\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8226/hovercard\">#8226</a></li>\n<li>Add compatibility with PCRE word boundary <code>\\b</code> and <code>\\B</code> for regex search using PostgreSQL <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8141\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8141/hovercard\">#8141</a></li>\n<li>More uniform SQL search and PHP search for accents and case-sensitivity (e.g. for automatically marking as read) <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8329\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8329/hovercard\">#8329</a></li>\n<li>New overview of dates with most unread articles <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8089\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8089/hovercard\">#8089</a></li>\n<li>Allow marking as read articles older than 1 or 7 days also when sorting by publication date <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8163\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8163/hovercard\">#8163</a></li>\n<li>New option to show user labels instead of tags in RSS share <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8112\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8112/hovercard\">#8112</a></li>\n<li>Add new feed visibility (priority) <em>Show in its feed</em> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7972\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7972/hovercard\">#7972</a></li>\n<li>New ability to share feed visibility through API (implemented by e.g. Capy Reader) <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7583\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7583/hovercard\">#7583</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8158\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8158/hovercard\">#8158</a></li>\n<li>Configurable notification timeout <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7942\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7942/hovercard\">#7942</a></li>\n<li>OPML export/import of unicity criteria <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8243\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8243/hovercard\">#8243</a></li>\n<li>Ensure stable IDs (categories, feeds, labels) during export/import <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7988\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7988/hovercard\">#7988</a></li>\n<li>Add username and timestamp to SQLite export from Web UI <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8169\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8169/hovercard\">#8169</a></li>\n<li>Add option to apply filter actions to existing articles <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7959\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7959/hovercard\">#7959</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8259\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8259/hovercard\">#8259</a></li>\n<li>Support CSS selector <code>~</code> <em>subsequent-sibling</em> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8154\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8154/hovercard\">#8154</a>\n<ul>\n<li>Upstream PR <a href=\"https://github.com/phpgt/CssXPath/pull/231\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/phpgt/CssXPath/pull/231/hovercard\">phpgt/CssXPath#231</a></li>\n</ul>\n</li>\n<li>Rework saving of configuration files for more reliability in case of e.g. full disk <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8220\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8220/hovercard\">#8220</a></li>\n<li>Web scraping support date format as milliseconds for Unix epoch <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8266\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8266/hovercard\">#8266</a></li>\n<li>Allow negative category sort numbers <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8330\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8330/hovercard\">#8330</a></li>\n</ul>\n</li>\n<li>Performance\n<ul>\n<li>Improve SQL speed for updating cached information <a href=\"https://github.com/FreshRSS/FreshRSS/pull/6957\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/6957/hovercard\">#6957</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8207\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8207/hovercard\">#8207</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8255\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8255/hovercard\">#8255</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8254\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8254/hovercard\">#8254</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8255\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8255/hovercard\">#8255</a></li>\n<li>Fix SQL performance issue with MySQL, using an index hint <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8211\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8211/hovercard\">#8211</a></li>\n<li>Scaling of user statistics in Web UI and CLI, to help instances with 1k+ users <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8277\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8277/hovercard\">#8277</a></li>\n<li>API streaming of large responses for reducing memory consumption and increasing speed <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8041\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8041/hovercard\">#8041</a></li>\n</ul>\n</li>\n<li>Security\n<ul>\n<li>💥 Move unsafe autologin to an extension <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7958\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7958/hovercard\">#7958</a></li>\n<li>Fix some CSRFs <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8035\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8035/hovercard\">#8035</a></li>\n<li>Strengthen some crypto (login, tokens, nonces) <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8061\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8061/hovercard\">#8061</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8320\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8320/hovercard\">#8320</a></li>\n<li>Create separate HTTP <code>Retry-After</code> rules for proxies <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8029\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8029/hovercard\">#8029</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8218\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8218/hovercard\">#8218</a></li>\n<li>Add <code>data:</code> to CSP in subscription controller <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8253\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8253/hovercard\">#8253</a></li>\n<li>Improve anonymous authentication logic <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8165\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8165/hovercard\">#8165</a></li>\n<li>Enable GitHub <a href=\"https://github.blog/changelog/2025-10-28-immutable-releases-are-now-generally-available/\">release immutability</a> <a href=\"https://github.com/FreshRSS/FreshRSS/issues/8205\" data-hovercard-type=\"issue\" data-hovercard-url=\"/FreshRSS/FreshRSS/issues/8205/hovercard\">#8205</a></li>\n</ul>\n</li>\n<li>Bug fixing\n<ul>\n<li>Exclude local networks for domain-wide HTTP <code>Retry-After</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8195\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8195/hovercard\">#8195</a></li>\n<li>Fix OpenID Connect with Debian 13 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8032\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8032/hovercard\">#8032</a></li>\n<li>Fix MySQL / MariaDB bug wrongly sorting new articles <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8223\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8223/hovercard\">#8223</a></li>\n<li>Fix MySQL / MariaDB database size calculation <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8282\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8282/hovercard\">#8282</a></li>\n<li>Fix SQLite bind bug when adding tag <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8101\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8101/hovercard\">#8101</a></li>\n<li>Fix SQL auto-update of field <code>f.kind</code> to ease migrations from FreshRSS versions older than 1.20.0 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8148\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8148/hovercard\">#8148</a></li>\n<li>Fix search encoding and quoting <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8311\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8311/hovercard\">#8311</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8324\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8324/hovercard\">#8324</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8338\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8338/hovercard\">#8338</a></li>\n<li>Fix handling of database unexpected null content (during migrations) <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8319\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8319/hovercard\">#8319</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8321\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8321/hovercard\">#8321</a></li>\n<li>Fix drag &amp; drop of user query losing information <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8113\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8113/hovercard\">#8113</a></li>\n<li>Fix DOM error while filtering retrieved full content <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8132\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8132/hovercard\">#8132</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8161\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8161/hovercard\">#8161</a></li>\n<li>Fix <code>config.custom.php</code> during install <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8033\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8033/hovercard\">#8033</a></li>\n<li>Fix do not mark important feeds as read from category <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8067\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8067/hovercard\">#8067</a></li>\n<li>Fix regression of warnings in Web browser console due to lack of <code>window.bcrypt</code> object <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8166\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8166/hovercard\">#8166</a></li>\n<li>Fix chart resize regression due to <code>chart.js</code> v4 update <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8298\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8298/hovercard\">#8298</a></li>\n<li>Fix CLI user creation warning when language is not given <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8283\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8283/hovercard\">#8283</a></li>\n<li>Fix merging of custom HTTP headers <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8251\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8251/hovercard\">#8251</a></li>\n<li>Fix bug in the case of duplicated mark-as-read filters <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8322\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8322/hovercard\">#8322</a></li>\n</ul>\n</li>\n<li>SimplePie\n<ul>\n<li>Fix support of HTTP trailer headers <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7983\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7983/hovercard\">#7983</a>, <a href=\"https://github.com/simplepie/simplepie/pull/943\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/simplepie/simplepie/pull/943/hovercard\">simplepie#943</a></li>\n<li>Apply HTTPS policy also on GUIDs and permalinks <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8037\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8037/hovercard\">#8037</a>, <a href=\"https://github.com/simplepie/simplepie/pull/951\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/simplepie/simplepie/pull/951/hovercard\">simplepie#951</a>\n<ul>\n<li>Fix <code>WordPress.com</code> HTTP duplicates with WebSub <a href=\"https://github.com/Automattic/pushpress/pull/16\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/Automattic/pushpress/pull/16/hovercard\">Automattic/pushpress#16</a></li>\n</ul>\n</li>\n<li>Implement HTML whitelist for SimplePie sanitizer <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7924\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7924/hovercard\">#7924</a>, <a href=\"https://github.com/simplepie/simplepie/pull/947\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/simplepie/simplepie/pull/947/hovercard\">simplepie#947</a></li>\n<li>Various upstream contributions <a href=\"https://github.com/simplepie/simplepie/pull/940\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/simplepie/simplepie/pull/940/hovercard\">simplepie#940</a>, <a href=\"https://github.com/simplepie/simplepie/pull/944\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/simplepie/simplepie/pull/944/hovercard\">simplepie#944</a></li>\n</ul>\n</li>\n<li>Deployment\n<ul>\n<li>Docker default image updated to Debian 13 Trixie with PHP 8.4.11 and Apache 2.4.65 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8032\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8032/hovercard\">#8032</a></li>\n<li>Docker alternative image updated to Alpine 3.23 with PHP 8.4.15 and Apache 2.4.65 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8285\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8285/hovercard\">#8285</a></li>\n<li>Fix Docker healthcheck <code>cli/health.php</code> compatibility with OpenID Connect <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8040\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8040/hovercard\">#8040</a></li>\n<li>Improve Docker for compatibility with other base images such as Arch Linux <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8299\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8299/hovercard\">#8299</a>\n<ul>\n<li>Improve <code>cli/access-permissions.sh</code> to detect the correct permission Web group such as <code>www-data</code>, <code>apache</code>, or <code>http</code></li>\n</ul>\n</li>\n<li>Update PostgreSQL volume for Docker <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8216\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8216/hovercard\">#8216</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8224\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8224/hovercard\">#8224</a></li>\n<li>Catch lack of <code>exec()</code> function for git update <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8228\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8228/hovercard\">#8228</a></li>\n<li>Work around <code>DOMDocument::saveHTML()</code> scrambling charset encoding in some versions of libxml2 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8296\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8296/hovercard\">#8296</a></li>\n<li>Improve configuration checks for PHP extensions (in Web UI and CLI), including recommending e.g. <code>php-intl</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8334\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8334/hovercard\">#8334</a></li>\n</ul>\n</li>\n<li>UI\n<ul>\n<li>New button for toggling sidebar on desktop view <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8201\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8201/hovercard\">#8201</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8286\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8286/hovercard\">#8286</a></li>\n<li>Better transitions between groups of articles <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8174\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8174/hovercard\">#8174</a></li>\n<li>New links in transitions and jump to next transition <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8294\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8294/hovercard\">#8294</a></li>\n<li>More visible selected article <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8230\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8230/hovercard\">#8230</a></li>\n<li>Show the parsed search query instead of the original user input <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8293\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8293/hovercard\">#8293</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8306\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8306/hovercard\">#8306</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8341\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8341/hovercard\">#8341</a></li>\n<li>Show search query in the page title <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8217\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8217/hovercard\">#8217</a></li>\n<li>Scroll into filtered feed/category on page load in the sidebar <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8281\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8281/hovercard\">#8281</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8307\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8307/hovercard\">#8307</a></li>\n<li>Fix autocomplete issues in change password form <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7812\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7812/hovercard\">#7812</a></li>\n<li>Fix navigating between read feeds using shortcut <kbd>shift</kbd>+<kbd>j</kbd>/<kbd>k</kbd> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8057\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8057/hovercard\">#8057</a></li>\n<li>Dark background in Web app manifest to avoid white flash when opening <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8140\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8140/hovercard\">#8140</a></li>\n<li>Increase button visibility in UI to change theme <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8149\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8149/hovercard\">#8149</a></li>\n<li>Replace arrow navigation in theme switcher with <code>&lt;select&gt;</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8190\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8190/hovercard\">#8190</a></li>\n<li>Improve scroll of article after load of user labels <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7962\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7962/hovercard\">#7962</a></li>\n<li>Keep scroll state of page when closing the slider <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8295\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8295/hovercard\">#8295</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8301\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8301/hovercard\">#8301</a></li>\n<li>Scroll into filtered feed/category on page load <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8281\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8281/hovercard\">#8281</a></li>\n<li>Display sidebar dropdowns above if no space below <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8335\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8335/hovercard\">#8335</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8336\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8336/hovercard\">#8336</a></li>\n<li>Use native CSS instead of SCSS <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8200\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8200/hovercard\">#8200</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8241\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8241/hovercard\">#8241</a>\n<ul>\n<li>Using <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Nesting\">CSS nesting</a> and <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Colors/Using_relative_colors\">relative colours</a>.</li>\n</ul>\n</li>\n<li>Various UI and style improvements: <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8171\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8171/hovercard\">#8171</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8185\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8185/hovercard\">#8185</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8196\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8196/hovercard\">#8196</a></li>\n<li>JavaScript finalise migration from <code>Promise</code> to <code>async</code>/<code>await</code>: <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8182\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8182/hovercard\">#8182</a></li>\n</ul>\n</li>\n<li>API\n<ul>\n<li>API performance optimisation: streaming of large responses <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8041\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8041/hovercard\">#8041</a></li>\n<li>Fever API: Add <code>with_ids</code> parameter to mass-change read/unread/saved/unsaved on lists of articles <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8312\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8312/hovercard\">#8312</a></li>\n<li>Misc API: better REST error semantics <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8232\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8232/hovercard\">#8232</a></li>\n</ul>\n</li>\n<li>Extensions\n<ul>\n<li>Add support for extension priority <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8038\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8038/hovercard\">#8038</a></li>\n<li>Add support for extension compatibility <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8081\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8081/hovercard\">#8081</a></li>\n<li>Improve PHP code with hook enums <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8036\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8036/hovercard\">#8036</a></li>\n<li>New hook <code>nav_entries</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8054\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8054/hovercard\">#8054</a></li>\n<li>Rename <a href=\"https://github.com/FreshRSS/Extensions\">Extensions</a> default branch from <em>master</em> to <em>main</em> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8194\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8194/hovercard\">#8194</a></li>\n</ul>\n</li>\n<li>I18n\n<ul>\n<li>Translation status as text in README <a href=\"https://github.com/FreshRSS/FreshRSS/pull/7842\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/7842/hovercard\">#7842</a></li>\n<li>Add new translate CLI commands <code>move</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8214\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8214/hovercard\">#8214</a></li>\n<li>Change some regional language codes to comply with RFC 5646 / IETF BCP 47 / ISO 3166 / ISO 639-1 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8065\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8065/hovercard\">#8065</a></li>\n<li>Improve German <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8028\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8028/hovercard\">#8028</a></li>\n<li>Improve Greek <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8146\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8146/hovercard\">#8146</a></li>\n<li>Improve Finnish <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8073\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8073/hovercard\">#8073</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8092\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8092/hovercard\">#8092</a></li>\n<li>Improve Hungarian <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8244\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8244/hovercard\">#8244</a></li>\n<li>Improve Italian <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8115\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8115/hovercard\">#8115</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8186\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8186/hovercard\">#8186</a></li>\n<li>Improve Polish <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8134\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8134/hovercard\">#8134</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8135\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8135/hovercard\">#8135</a></li>\n<li>Improve Russian <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8155\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8155/hovercard\">#8155</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8197\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8197/hovercard\">#8197</a></li>\n<li>Improve Simplified Chinese <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8308\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8308/hovercard\">#8308</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8313\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8313/hovercard\">#8313</a></li>\n</ul>\n</li>\n<li>Misc.\n<ul>\n<li>Add code to modify a search expression <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8293\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8293/hovercard\">#8293</a></li>\n<li>Remove <em>Pocket</em> sharing service <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8127\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8127/hovercard\">#8127</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8128\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8128/hovercard\">#8128</a></li>\n<li>Update to PHPMailer 7.0.1 <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8048\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8048/hovercard\">#8048</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8180\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8180/hovercard\">#8180</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8272\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8272/hovercard\">#8272</a></li>\n<li>💥 Housekeeping of <code>lib_rss.php</code> with potential breaking changes for some extensions <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8193\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8193/hovercard\">#8193</a>,</li>\n<li>Use native PHP <code>#[Deprecated]</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8325\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8325/hovercard\">#8325</a></li>\n<li>Improve PHP code <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8156\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8156/hovercard\">#8156</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8203\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8203/hovercard\">#8203</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8284\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8284/hovercard\">#8284</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8292\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8292/hovercard\">#8292</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8297\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8297/hovercard\">#8297</a></li>\n<li>GitHub Actions: <code>--no-progress</code> <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8315\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8315/hovercard\">#8315</a></li>\n<li>Update dev dependencies <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8043\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8043/hovercard\">#8043</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8044\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8044/hovercard\">#8044</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8045\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8045/hovercard\">#8045</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8046\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8046/hovercard\">#8046</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8047\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8047/hovercard\">#8047</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8052\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8052/hovercard\">#8052</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8176\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8176/hovercard\">#8176</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8177\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8177/hovercard\">#8177</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8178\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8178/hovercard\">#8178</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8179\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8179/hovercard\">#8179</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8210\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8210/hovercard\">#8210</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8270\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8270/hovercard\">#8270</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8271\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8271/hovercard\">#8271</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8273\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8273/hovercard\">#8273</a>,<br>\n<a href=\"https://github.com/FreshRSS/FreshRSS/pull/8274\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8274/hovercard\">#8274</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8275\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8275/hovercard\">#8275</a>, <a href=\"https://github.com/FreshRSS/FreshRSS/pull/8276\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/FreshRSS/FreshRSS/pull/8276/hovercard\">#8276</a></li>\n</ul>\n</li>\n</ul><figure class=\"enclosure\">\n\t<p class=\"enclosure-content\">\n\t\t<img class=\"enclosure-thumbnail\" src=\"https://avatars.githubusercontent.com/u/1008324?s=60&amp;v=4\" alt=\"\" />\n\t</p>\n</figure>",
"raw_content": null,
"metadata": {
"upstream": "freshrss",
"origin": {
"streamId": "feed/1",
"htmlUrl": "https://github.com/FreshRSS/FreshRSS/",
"title": "FreshRSS releases"
},
"categories": [
"未分类",
"user/-/state/org.freshrss/main"
],
"crawled_at": "2026-03-24T09:13:04.078000Z",
"published_epoch": 1766604443
},
"fetch_state": "pending"
},
"article": {
"extract_id": "sha256:398657bc79f4c8d43f1f695f772f296c9a0fc28df30758562c6cc2fbcc277ab9",
"item_id": "sha256:6b36071bbd22c58692c039e172669ae28ac1ec8a6a6bce150c22d80af29761fc",
"source_id": "freshrss:2987af960359c5c0",
"url": "https://github.com/FreshRSS/FreshRSS/releases/tag/1.28.0",
"title": "FreshRSS 1.28.0",
"author": "Alkarex",
"published_at": "2025-12-24T19:27:23Z",
"language": null,
"content_kind": "article",
"plain_text": "FreshRSS 1.28.0\nAlkarex\nreleased this\n24 Dec 19:27\n·\n134 commits\nto edge\nsince this release\nImmutable\nrelease. Only release title and notes can be modified.\nThis is a major release, just in time for the holidays 🎄\nSelected new features ✨:\n- New sorting and filtering by date of User modified, with corresponding search operator, e.g.\nuserdate:PT1H\nfor the past hour - New sorting by article length\n- New advanced search form\n- New overview of dates with most unread articles\n- New ability to share feed visibility through API (implemented by e.g. Capy Reader)\n- Bonus: Capy Reader is also the first open source Android app to support user labels\n- Better transitions UI between groups of articles\n- New links in UI for transitions between groups of articles, and jump to next transition\n- Docker default image updated to Debian 13 Trixie with PHP 8.4.11\n- And much more…\nImproved performance 🏎️:\n- Scaling of user statistics in Web UI and CLI, to help instances with 1k+ users\n- Improve SQL speed for some critical requests for large databases\n- API performance optimisation thanks to streaming of large responses\nSelected bug fixes 🐛:\n- Fix OpenID Connect with Debian 13\n- Fix MySQL / MariaDB bug wrongly sorting new articles\n- Fix SQLite bind bug when adding tag\nBreaking changes 💥:\n- Move unsafe autologin to an extension\n- Potential breaking changes for some extensions (which have to rename some old functions)\nThis release has been made by @Alkarex, @Frenzie, @Inverle, @aledeg, @andris155, @horvi28, @math-GH, @minna-xD and newcomers @Darkentia, @FollowTheWizard, @GreyChame1eon, @McFev, @jocmp, @larsks, @martinhartmann, @matthew-neavling, @pudymody, @raspo, @scharmach, @scollovati, @stag-enterprises, @vandys, @xtmd, @yzx9.\nFull changelog:\n- Features\n- New sorting and filtering by date of User modified #7886, #8090,\n#8105, #8118, #8130- Corresponding search operator, e.g.\nuserdate:PT1H\nfor the past hour #8093 - Allows finding articles marked by the local user as read/unread or starred/unstarred at specific dates for e.g. undo action.\n- Corresponding search operator, e.g.\n- New sorting by article length #8119\n- New advanced search form #8103, #8122, #8226\n- Add compatibility with PCRE word boundary\n\\b\nand\\B\nfor regex search using PostgreSQL #8141 - More uniform SQL search and PHP search for accents and case-sensitivity (e.g. for automatically marking as read) #8329\n- New overview of dates with most unread articles #8089\n- Allow marking as read articles older than 1 or 7 days also when sorting by publication date #8163\n- New option to show user labels instead of tags in RSS share #8112\n- Add new feed visibility (priority) Show in its feed #7972\n- New ability to share feed visibility through API (implemented by e.g. Capy Reader) #7583, #8158\n- Configurable notification timeout #7942\n- OPML export/import of unicity criteria #8243\n- Ensure stable IDs (categories, feeds, labels) during export/import #7988\n- Add username and timestamp to SQLite export from Web UI #8169\n- Add option to apply filter actions to existing articles #7959, #8259\n- Support CSS selector\n~\nsubsequent-sibling #8154- Upstream PR phpgt/CssXPath#231\n- Rework saving of configuration files for more reliability in case of e.g. full disk #8220\n- Web scraping support date format as milliseconds for Unix epoch #8266\n- Allow negative category sort numbers #8330\n- New sorting and filtering by date of User modified #7886, #8090,\n- Performance\n- Improve SQL speed for updating cached information #6957, #8207,\n#8255, #8254, #8255 - Fix SQL performance issue with MySQL, using an index hint #8211\n- Scaling of user statistics in Web UI and CLI, to help instances with 1k+ users #8277\n- API streaming of large responses for reducing memory consumption and increasing speed #8041\n- Improve SQL speed for updating cached information #6957, #8207,\n- Security\n- 💥 Move unsafe autologin to an extension #7958\n- Fix some CSRFs #8035\n- Strengthen some crypto (login, tokens, nonces) #8061, #8320\n- Create separate HTTP\nRetry-After\nrules for proxies #8029, #8218 - Add\ndata:\nto CSP in subscription controller #8253 - Improve anonymous authentication logic #8165\n- Enable GitHub release immutability #8205\n- Bug fixing\n- Exclude local networks for domain-wide HTTP\nRetry-After\n#8195 - Fix OpenID Connect with Debian 13 #8032\n- Fix MySQL / MariaDB bug wrongly sorting new articles #8223\n- Fix MySQL / MariaDB database size calculation #8282\n- Fix SQLite bind bug when adding tag #8101\n- Fix SQL auto-update of field\nf.kind\nto ease migrations from FreshRSS versions older than 1.20.0 #8148 - Fix search encoding and quoting #8311, #8324, #8338\n- Fix handling of database unexpected null content (during migrations) #8319, #8321\n- Fix drag & drop of user query losing information #8113\n- Fix DOM error while filtering retrieved full content #8132, #8161\n- Fix\nconfig.custom.php\nduring install #8033 - Fix do not mark important feeds as read from category #8067\n- Fix regression of warnings in Web browser console due to lack of\nwindow.bcrypt\nobject #8166 - Fix chart resize regression due to\nchart.js\nv4 update #8298 - Fix CLI user creation warning when language is not given #8283\n- Fix merging of custom HTTP headers #8251\n- Fix bug in the case of duplicated mark-as-read filters #8322\n- Exclude local networks for domain-wide HTTP\n- SimplePie\n- Fix support of HTTP trailer headers #7983, simplepie#943\n- Apply HTTPS policy also on GUIDs and permalinks #8037, simplepie#951\n- Fix\nWordPress.com\nHTTP duplicates with WebSub Automattic/pushpress#16\n- Fix\n- Implement HTML whitelist for SimplePie sanitizer #7924, simplepie#947\n- Various upstream contributions simplepie#940, simplepie#944\n- Deployment\n- Docker default image updated to Debian 13 Trixie with PHP 8.4.11 and Apache 2.4.65 #8032\n- Docker alternative image updated to Alpine 3.23 with PHP 8.4.15 and Apache 2.4.65 #8285\n- Fix Docker healthcheck\ncli/health.php\ncompatibility with OpenID Connect #8040 - Improve Docker for compatibility with other base images such as Arch Linux #8299\n- Improve\ncli/access-permissions.sh\nto detect the correct permission Web group such aswww-data\n,apache\n, orhttp\n- Improve\n- Update PostgreSQL volume for Docker #8216, #8224\n- Catch lack of\nexec()\nfunction for git update #8228 - Work around\nDOMDocument::saveHTML()\nscrambling charset encoding in some versions of libxml2 #8296 - Improve configuration checks for PHP extensions (in Web UI and CLI), including recommending e.g.\nphp-intl\n#8334\n- UI\n- New button for toggling sidebar on desktop view #8201, #8286\n- Better transitions between groups of articles #8174\n- New links in transitions and jump to next transition #8294\n- More visible selected article #8230\n- Show the parsed search query instead of the original user input #8293,\n#8306, #8341 - Show search query in the page title #8217\n- Scroll into filtered feed/category on page load in the sidebar #8281, #8307\n- Fix autocomplete issues in change password form #7812\n- Fix navigating between read feeds using shortcut shift+j/k #8057\n- Dark background in Web app manifest to avoid white flash when opening #8140\n- Increase button visibility in UI to change theme #8149\n- Replace arrow navigation in theme switcher with\n<select>\n#8190 - Improve scroll of article after load of user labels #7962\n- Keep scroll state of page when closing the slider #8295, #8301\n- Scroll into filtered feed/category on page load #8281\n- Display sidebar dropdowns above if no space below #8335, #8336\n- Use native CSS instead of SCSS #8200, #8241\n- Using CSS nesting and relative colours.\n- Various UI and style improvements: #8171, #8185, #8196\n- JavaScript finalise migration from\nPromise\ntoasync\n/await\n: #8182\n- API\n- Extensions\n- I18n\n- Translation status as text in README #7842\n- Add new translate CLI commands\nmove\n#8214 - Change some regional language codes to comply with RFC 5646 / IETF BCP 47 / ISO 3166 / ISO 639-1 #8065\n- Improve German #8028\n- Improve Greek #8146\n- Improve Finnish #8073, #8092\n- Improve Hungarian #8244\n- Improve Italian #8115, #8186\n- Improve Polish #8134, #8135\n- Improve Russian #8155, #8197\n- Improve Simplified Chinese #8308, #8313\n- Misc.\n- Add code to modify a search expression #8293\n- Remove Pocket sharing service #8127, #8128\n- Update to PHPMailer 7.0.1 #8048, #8180, #8272\n- 💥 Housekeeping of\nlib_rss.php\nwith potential breaking changes for some extensions #8193, - Use native PHP\n#[Deprecated]\n#8325 - Improve PHP code #8156, #8203, #8284,\n#8292, #8297 - GitHub Actions:\n--no-progress\n#8315 - Update dev dependencies #8043, #8044,\n#8045, #8046, #8047,\n#8052, #8176, #8177,\n#8178, #8179, #8210,\n#8270, #8271, #8273,\n#8274, #8275, #8276",
"quality_flags": {
"is_paywalled": false,
"is_truncated": false,
"is_low_content": false
},
"metadata": {
"content_source": "fetched_html",
"extractor": "trafilatura",
"char_count": 8644
},
"pipeline_state": "extracted"
},
"summary": {
"title": "FreshRSS 1.28.0",
"url": "https://github.com/FreshRSS/FreshRSS/releases/tag/1.28.0",
"summary": "FreshRSS 1.28.0 是一个主要版本更新,引入了按用户修改日期排序、高级搜索表单等新功能,并改进了性能和安全性。此版本还包含多项错误修复,并更新了Docker默认镜像。",
"highlights": [
"新增按用户修改日期排序和过滤功能,并支持对应的搜索操作符。",
"引入了新的高级搜索表单和文章长度排序选项。",
"改进了用户统计的扩展性,以支持拥有1000名以上用户的实例。",
"修复了OpenID Connect在Debian 13上的兼容性问题。",
"Docker默认镜像已更新至Debian 13 Trixie和PHP 8.4.11。"
],
"keywords": [
"FreshRSS",
"用户修改日期排序",
"高级搜索表单",
"Docker",
"Debian 13",
"PHP 8.4",
"OpenID Connect",
"性能优化"
],
"topics": [
"开源软件",
"RSS阅读器",
"版本发布",
"软件开发",
"系统部署"
],
"category": "资讯",
"worth_keeping": true,
"reason": "该文章详细记录了FreshRSS一个重要版本的功能更新、性能改进和错误修复,对用户和开发者具有明确的参考价值。"
},
"filter_decision": {
"decision": "review",
"matched_rules": [
"review-worth-keeping-other"
],
"reasons": [
"Worth-keeping signal is positive but no stronger keep rule matched."
],
"labels": [
"needs-review",
"summary"
],
"priority": 60,
"matches": [
{
"rule_id": "review-worth-keeping-other",
"decision": "review",
"reason": "Worth-keeping signal is positive but no stronger keep rule matched.",
"labels": [
"summary",
"needs-review"
],
"priority": 60
}
]
},
"digest_section_hint": null,
"digest_rank": 60,
"review_state": "pending",
"source_refs": {
"raw_item_path": "outputs\\freshrss\\items\\batch\\item-05.item.json",
"extracted_path": "outputs\\freshrss\\extracted\\batch\\item-05.extracted.json",
"summary_path": "outputs\\freshrss\\summary\\batch\\item-05\\result.loop.json",
"filter_path": "outputs\\freshrss\\filter\\batch\\item-05.filter.json"
},
"rendered_markdown": null,
"metadata": {
"generated_at": "2026-03-25T08:48:46.092261Z",
"pipeline_version": "v1",
"producer": "run_article_candidate.py",
"run_id": "candidate-20260325-084846"
}
}