This is a fourth security release in the continuation of 1.30.x, mostly to address some severe PHP vulnerabilities and update our official alternative Docker images (Alpine) (our default Docker images based on Debian were already fixed).
Note that our rolling-release channel (edge) is recommended for faster security patches.
Bug fixes highlights 🐛:
This release has been made by @Alkarex, @Frenzie and newcomer @icco
Full changelog:
This is a third security release in the continuation of 1.30.x, mostly to address some severe PHP vulnerabilities and update our official default Docker images (Debian) (but not our alternative Alpine images yet, which are delayed).
Note that our rolling-release channel (edge) is recommended for faster security patches.
Bug fixes highlights 🐛:
This release has been made by @Alkarex, @Inverle and newcomer @Ricardo-Simoes
Full changelog:
This is a second security and bug-fixing release in the continuation of 1.30.x.
Note that our rolling-release channel (edge) is recommended for faster security patches.
Bug fixes highlights 🐛:
data: URI scheme in some casesPerformance highlights 🏎️:
This release has been made by @Alkarex, @Inverle and newcomers @abp002, @Arslan-TR, @Emredinho61, @HawkForge, @lordmarrik, @spa77k, @tomac4t, @tpq2030
Full changelog:
This is a security-oriented release with several security patches and bug fixes in the continuation of 1.30.0.
Note that our rolling-release channel (edge) is recommended for faster security patches.
Bug fixes highlights 🐛:
Retry-AfterFeature highlights✨:
actualize-user.phpThis release has been made by @Alkarex, @andris155, @fzlzjerry, @Inverle, @jamalkamaladdin, @jtracey, @Otolock and newcomers @akine, @colons, @ethanstoner, @gigioneggiando, @Juice-de-Orange, @pavel-miniutka, @qwist1233-cpu, @Sharawey74, @shcheglovnd, @TapuGithub, @yuchenshi, @ZainnQureshii
Full changelog:
#[\SensitiveParameter] #9322Retry-After #9390SCRIPT_NAME in PATH_INFO #9282, #9287actualize-user.php #9319check_url_before_add hook when previewing a feed #9343This is a security-oriented major release with several important security patches, so users are encouraged to update without delay.
From this release, we are also making it clear that our rolling-release channel (edge) is recommended for faster security patches.
Breaking change 💥:
127.0.0.1 by default, for security reasonsFeature highlights✨:
Bug fixes highlights 🐛:
This release has been made by @Alkarex, @andris155, @ColonelMoutarde, @Frenzie, @IEEE-754, @Inverle, @math-GH, @nykula, @polybjorn, @Stunkymonkey and newcomers @0xdeadrelay, @AdamKorcz, @aligundogar, @bossaarebecca-alt, @Cactys12, @chrislongros, @Divinelink, @Elgeryy1, @featurecreep-cron, @Fripix, @fzlzjerry, @georatas, @gshimo, @iatman ,@ihsanarifr, @jamalkamaladdin, @JamBalaya56562, @jbrayton, @jeremy-code, @juherr, @kobihikri, @LeeXiaolan, @masskrdjn, @mohammadlashkari, @nathanpixodeo, @Otolock, @payaci, @salvador-castro, @SamCyber001, @satyvm, @senti-man, @simitana, @ThomasVermeer, @Totara-thib, @TowyTowy, @utkutibet, @XiaoSong1223
Full changelog:
127.0.0.1 by default, for security reasons (breaking change) #8400,INTERNAL_HOST_ALLOWLIST environment variable* allows all networks like before (unsafe)CURLOPT_PROXY #8950rss and opml actions #8912greader (JSON) user query share format behind Share by OPML #9248hash_equals() for GReader API token comparison #9183./p/ #9010javascript: URI scheme (protocol) #8263XML_OPTION_PARSE_HUGE #8894, simplepie#977media:group #9009log_level system setting #9185json #9058
simplepie_syslog_enabled for the uses cache logs #8986--db-prefix silently drops following CLI flags #9042<media:credit> being written to the RSS output #9174:newest with PHP 8.6 #9155CONN_REMOTE_ADDR in logs when mod_remoteip is available, for compatibility with LiteSpeed Web Server #8890.dockerignore being ignored during build in CI #9001ENABLE_ACCESS_LOG environment variable to disable access logs #9191.nav_menu in Alternative-Dark, Flat, and Nord themes #8901color variable #9266Event() constructor instead of deprecated initEvent() #9035:user-invalid instead of :invalid for CSS form field styling #9025Minz_Extension typing #8952freshrss:entryStateChange when an entry finishes being marked read/unread #9031markdownlint-cli to markdownlint-cli2 #8987This is bug-fix release for 1.29.0.
Feature highlights✨:
.txt import of feed URLs in additional to e.g. OPMLBug fixes highlights 🐛:
UI highlights 🖼:
This release has been made by @Alkarex, @Frenzie, @IEEE-754, @Inverle, @McFev, @ciro-mota, @cweiske, @polybjorn and newcomer @mzl2233
Full changelog:
lib_opml library #8652, #8853,This is a major release.
Feature highlights✨:
cli/purge.php to apply purge policy from command lineBug fixes highlights 🐛:
Security highlights 🛡:
UI highlights 🖼:
Extensions highlights 🧩:
This release has been made by @Alkarex, @Inverle, @Kiblyn11, @math-GH, @rupakbajgain, @xtmd and newcomers @polybjorn, @olivluca, @tomasodehnal, @PeterVavercak, @mrtnrdl, @ale-rt, @cweiske, @rid3r45, @gabbihive, @drosell271, @Kachelkaiser, @zanivann, @nanos, @bowencool, @pe1uca, @matheusroberson, @DenuxPlays, @rlrs, @chanse-syres, @IEEE-754, @umaidshahid, @michi-onl
Full changelog:
mdate:P1D for finding articles modified by the author / server during the past day.toString in case of regex-looking string #8479<iframe> referrer allow list #8672allowfullscreen to <iframe> #8467Set-Cookie using native PHP support of SameSite #8447, #8778
session.cookie-lifetime in php.ini<meta name="referrer" content="no-referrer" /> from deprecated never #8725.content pre code #8620Minz_HookType::ActionExecute #8599, #8603Minz_HookType as hook name in registerHook() #8600httpGet() #8700httpGet() cache nullable #8705select-input-changer JavaScript helper #8721get_icon_url() for feed favicon simplepie#974get_thumbnail() #8634, simplepie#970cli/purge.php to apply purge policy #8740timeago() #8670AGENTS.md, SKILLS.md, instructions.md #8478This is a release focussing on bug fixing, in particular regressions from the release 1.28.0.
Selected new features ✨:
Improved performance 🏎️:
Many bug fixes 🐛
This release has been made by @Alkarex, @Frenzie, @Inverle and newcomers @ciro-mota, @eveiscoull, @hackerman70000, @Hufschmidt, @johan456789, @martgnz, @mmeier86, @netsho, @neuhaus, @RobLoach, @rupakbajgain.
Full changelog:
transliterator_transliterate fallback (when the php-intl extension is unavailable) #8427lastUserModified database column also during mark-as-read action #8346session.cookie-lifetime #8446CURLOPT_ACCEPT_ENCODING #8376, simplepie#960, simplepie#962<template> element #8443.gitignore to ignore installed extensions #8372This is a major release, just in time for the holidays 🎄
Selected new features ✨:
userdate:PT1H for the past hourImproved performance 🏎️:
Selected bug fixes 🐛:
Breaking changes 💥:
This 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.
Full changelog:
userdate:PT1H for the past hour #8093\b and \B for regex search using PostgreSQL #8141~ subsequent-sibling #8154
Retry-After rules for proxies #8029, #8218data: to CSP in subscription controller #8253Retry-After #8195f.kind to ease migrations from FreshRSS versions older than 1.20.0 #8148config.custom.php during install #8033window.bcrypt object #8166chart.js v4 update #8298WordPress.com HTTP duplicates with WebSub Automattic/pushpress#16cli/health.php compatibility with OpenID Connect #8040cli/access-permissions.sh to detect the correct permission Web group such as www-data, apache, or httpexec() function for git update #8228DOMDocument::saveHTML() scrambling charset encoding in some versions of libxml2 #8296php-intl #8334<select> #8190Promise to async/await: #8182move #8214lib_rss.php with potential breaking changes for some extensions #8193,#[Deprecated] #8325--no-progress #8315This is a security-fix and bug-fix release for FreshRSS 1.27.x.
A few highlights ✨:
healthcheckframe-ancestorsThis release has been made by @Alkarex, @Frenzie, @Inverle, @aledeg, @math-GH and newcomers @beerisgood, @nykula, @horvi28, @nhirokinet, @rnkln, @scmaybee.
Full changelog:
Retry-After #7875no-cache.txt #7907.yml and SERVER_DNS example #7858overflow-wrap instead of word-wrap #7898make target to generate the translation progress #7905entry_before_update and entry_before_add hooks for extensions #7977A few highlights ✨:
429 Too Many Requests and 503 Service Unavailable, obey Retry-Afterc: for categories like c:23,34 or !c:45,56Content-Security-Policy: frame-ancestorsThis release has been made by @Alkarex, @Inverle, @the7thNightmare and newcomers @Deioces120, @Fraetor, @Tarow, @dotsam, @hilariousperson, @pR0Ps, @triatic, @tryallthethings
Full changelog:
429 Too Many Requests and 503 Service Unavailable, obey Retry-After #7760c: for categories like c:23,34 or !c:45,56 #7696s parameter of streamId #7695Content-Security-Policy: frame-ancestors #7677referrerpolicy, ping #7770clean_hash() #7813, FreshRSS/simplepie#48:newest updated to PHP 8.5-alpha and Apache 2.4.65 #7773FRESHRSS_INSTALL and FRESHRSS_USER variables #7725onbeforeunload #7554<video poster="..."> and <image> #7636<code> inside of <pre> #7797data-auto-leave-validation #7785chart.js to 4.5.0 #7752, #7816This is a bug-fix release for FreshRSS 1.26.x
A few highlights ✨:
This release has been made by @Alkarex, @Inverle and newcomers @CarelessCaution, @the7thNightmare
Full changelog:
bgcolor, text, background, link, alink, vlink #7606This is a security-focussed release for FreshRSS 1.26.x, addressing several CVEs (thanks @Inverle) 🛡
A few highlights ✨:
Notes ℹ:
This release has been made by @Alkarex, @Frenzie, @hkcomori, @loviuz, @math-GH
and newcomers @dezponia, @glyn, @Inverle, @Machou, @mikropsoft
Full changelog:
<iframe srcdoc=""> #7494, CVE-2025-32015<button formaction=""> #7506Content-Security-Policy HTTP headers to favicons #7471, CVE-2025-31136Referrer-Policy: same-origin #6303, #7478ext.php #7479, CVE-2025-31134mod_filter to ensure that AddOutputFilterByType works #7419This is a bugfix release for 1.26.0, addressing some regressions 🐛
A few highlights ✨:
This release has been made by @Alkarex, @FromTheMoon85, @marienfressinaud, @math-GH
and newcomers @abackstrom, @BryanButlerGit, @culbrethj, @EricDiao, @Karvel, @ViPeR5000
Full changelog:
In this release, we have restarted to focus on features. A long-awaited feature has been added, namely sorting articles by various criteria: received date (existing, default), publication date, title, link, random.
A few highlights ✨:
&get=A, and also those archived with &get=Z
This release has been made by @Alkarex, @b-reich, @hkcomori, @math-GH, @UserRoot-Luca
and newcomers @a6software, @aftix, @bl00dy1837, @brtmax, @Roan-V, @ShaddyDC, @UncleArya
Full changelog:
&get=A, and also those archived with &get=Z #7144
intext: #7228force-https.txt #7259In this release, the coding focus has been on moving to PHP 8.1+ and refactoring the integration of the SimplePie library (which was long due). At the same time, plenty of new features have been added. Enjoy! 🎄
Breaking changes 💥:
A few highlights ✨:
search:UserQueryA date:P1dCache-Control: max-age and ExpiresThis release has been made by @aledeg, @Alkarex, @Art4, @ColonelMoutarde, @Frenzie, @math-GH, @ramazansancar
and newcomers @DevGrohl, @UserRoot-Luca, @aarnej, @andrey-utkin, @bhj, @christophehenry, @davralin, @drego85, @ev-gor, @killerog, @kwarraich, @minna-xD, @mtalexan, @oshaposhnyk, @patHyatt
Full changelog:
search:UserQueryA date:P1d #6851Cache-Control: max-age and Expires #6812, FreshRSS/simplepie#26Authorization) #6820&state=96 (no UI button yet)phpgt/cssxpath library with improved CSS selectors #6618
:last-child, :first-of-type, :last-of-type, ^=, |=("a b") or (!c) #6818v mode #7009+ #7033
Referer #6822, FreshRSS/simplepie#27
Referer: https://example.net/ to the custom HTTP headers of the feed #6820windows.open noopener (to avoid flash of white page in dark mode) #7077, #7089aria-hidden bug, and use HTML5 hidden #6910<pre> and <code> #6770<template> instead of duplicated HTML code #6751, #7113<template> #6864? to show shortcut page and help #6981simplepie_after_init #7007Minz_Request::paramArray() #6800booleansInConditions #6793phpstan.dist.neon to allow custom configuration in phpstan.neon #6892ControlSignature #6896This is a quality-focussed release for the 1.24.x series meant to provide a good product to people blocked on PHP 7.4, while we will increase the requirements to PHP 8.1+ from the next release.
A few highlights ✨:
This release has been made by @Alkarex, @math-GH and newcomer @pando85
Full changelog:
This is a quality-focussed release for the 1.24.x series meant to provide a good product to people blocked on PHP 7.4, while we will increase the requirements to PHP 8.1+ from the next 1.25.x series.
A few highlights ✨:
This release has been made by @Alkarex, @ColonelMoutarde, @den13501, @hkcomori, @math-GH
and newcomers @dservian, @crisukbot, @TomW1605
Full changelog:
OR Boolean search expressions #6672Last-Modified when content is not modified #6723cli/db-backup.php #6593This is a bug-fix release for the 1.24.0 release, addressing several regressions.
A few highlights ✨:
This release has been made by @Alkarex, @math-GH, and newcomers @ramazansancar, @robinmetral
Full changelog:
A few highlights ✨:
This release has been made by several contributors: @aledeg, @Alkarex, @andris155, @CilgaIscan, @cn-tools, @den13501, @eta-orionis, @Frenzie, @FromTheMoon85, @gmgall, @hkcomori, @jakopo87, @laxmanpradhan, @loviuz, @math-GH, @MayMeow, @OctopusET, @PedroPMS, @roughnecks, @soniyaprasad77, @th0mcat, @thomasrenes, @tiborepcek, @wolfpld, @yzqzss, @zukizukizuki
and several newcomers @eta-orionis, @gmgall, @hkcomori, @jakopo87, @jgtorcal, @krm-shrftdnv, @laxmanpradhan, @loviuz, @PedroPMS, @roughnecks, @soniyaprasad77, @th0mcat, @zukizukizuki
Full changelog:
CURLOPT_USERPWD) #6177data/config.php for number of feeds to refresh in parallel from UI #6124./cli/db-backup.php ; ./cli/db-restore.phpcli/manipulate.translation.php ignore behaviour #6041./cli/db-backup.php ; ./cli/db-restore.php --force-overwriteCURLOPT_PROXYTYPE #6439iframe allow attribute #6274composer run-script phpstan-third-partyMinz_Extension::amendCsp() for extensions to modify HTTP headers for Content Security Policy #6246FreshRSS_Entry::isUpdated() for extensions to know whether an entry is new or updated #6334This is a bug-fix release for the 1.23.0 release, addressing several regressions.
This release has been made by @Alkarex, @andris155, @math-GH, @yzqzss, @zhzy0077
Full changelog:
base_url being cleared when saving settings #5992.dockerignore #5996A few highlights ✨:
Breaking changes 💥:
amd64, arm32v7, arm64v8 with automatic detection #5808
-arm suffix anymoreThis release has been made by several contributors: @Alkarex, @ColonelMoutarde, @FireFingers21, @Frenzie, @kasimircash, @andris155, @b-reich, @foux, @jaden, @jan-vandenberg, @joestump, @jtracey, @mark-monteiro, @martinrotter, @math-GH, @passbe
Full changelog:
VARCHAR) text fields length to maximum possible #5788CRON_MIN if any environment variable contains a single quote #5795TRUSTED_PROXY environment variable used in combination with trusted sources #5853This release contains mostly some bug fixes for the recent 1.22.0.
This version 1.22.x is also the last to support PHP 7.2 before requiring PHP 7.4+.
A few highlights ✨:
This release has been made by several contributors: @Alkarex, @Frenzie, @MHketbi, @XtremeOwnageDotCom, @math-GH, @mossroy
Full changelog:
: in OIDC_SCOPES #5753, #5764TRUSTED_PROXY environment variable #5733RemoteIPInternalProxy in Apache #5740In this release, besides adding some initial support for OpenID Connect, the focus has been on increasing the quality rather than adding new features (which will have more focus again in the next release).
This version 1.22.x is also the last to support PHP 7.2 before requiring PHP 7.4+.
A few highlights ✨:
x86_64, not Alpine, and not ARM) through libapache2-mod-auth-openidc. See our documentationThis release has been made by several contributors: @Alkarex, @Alwaysin, @ColonelMoutarde, @Exerra, @FromTheMoon85, @LleanaRuv, @Marjani, @NaeiKinDus, @Rufubi, @V-E-O, @aaronschif, @acbgbca, @aledeg, @andris155, @becdetat, @belidzs, @kemayo, @kgraefe, @marienfressinaud, @math-GH, @msdlr, @obrenckle, @otaconix, @robertdahlem, @sad270, @samc1213, @squaregoldfish, @vrachnis, @witchcraze, @yubiuser, @zhaofengli
Full changelog:
x86_64, not Alpine) through libapache2-mod-auth-openidcset_time_limit() #5675CLEANCACHE_HOURS #5144<meta name="theme-color" .../> #5105a2enmod #5464DATA_PATH to cron env #5531error_reporting for PHP 8.1+ #5199DATA_PATH environment variable) #5423lib_opml #5188lib/http-conditional #5277ConfigurationSetter #5251, #5580./data.back/ in .gitignore #5359A few highlights ✨:
cli/sensitive-log.sh to help e.g. Apache clear logs for sensitive information such as credentials #5001
This release has been made by several new contributors @axeleroy, @hippothomas, @mincerafter42, @sad270, @zhzy0077, in addition to our regular contributors @Alkarex, @ColonelMoutarde, @Frenzie, @myuki, @aledeg, @marienfressinaud, @math-GH, @miicat, @nicofrand, @yzqzss ... Thank you!
Detailed tracked changes.
Full changelog:
\( or \) #4989mailto: links for webmail services #4680cli/sensitive-log.sh to help e.g. Apache clear logs for sensitive information such as credentials #5001cli/access-permissions.sh to help apply file permissions correctly #5062./extensions/ #4956font/woff #4894latest branch (instead of a tag) to track the latest FreshRSS stable releases #5148is_writable() checks #4780lib_opml #4403This is a security release for a regression since FreshRSS 1.18.0.
A few highlights ✨:
ext.php #4928 reported by @c3l3si4nDetailed tracked changes.
Full changelog:
A few highlights ✨:
Detailed tracked changes.
Full changelog:
opcache bug during Web update #4629, update.freshrss.org#4curlopt options for HTML+XPath #4759template.css to frss.css #4644A few highlights ✨:
Detailed tracked changes.
Full changelog:
(author:Alice OR intitle:hello) (author:Bob OR intitle:world)!((author:Alice intitle:hello) OR (author:Bob intitle:world))search:"My query" or search:QueryA, or by ID: S:3pg_trgmdata/config-user.custom.php #4360archive.today #4530rename_attribute() instead of removing attributes to better be able to style/hide content of articles #4175,status_code type for PHP 8.1+ simplepie#728"ab cd" and ab-cd #4277& #4287' in the address #4330htmlspecialchars() warnings with PHP 8.1+ #4411freshrss_user_maintenance in CLI #4495errorMessage() which exists on some platforms #4289entry_before_insert to change entry->isRead() #4331php-openssl (used by PHPMailer) and php-xml (used by SimplePie) #4420freshrss/freshrss:newest to PHP 8.2 #4420base_url to avoid some common configuration bugs, especially via Docker / CLI #4423lib_phpQuery by PhpGt/CssXPath library for full content retrieval #4261
a[href*="example"] CssXPath#181.gitattributes export-ignore #4415attributes (JSON) for entries #4444A few highlights:
Detailed tracked changes.
Full changelog:
:newest updated to PHP 8.1.1 and Apache 2.4.52 #3666latest tag to git #4135Detailed tracked changes.
Full changelog:
!pubdate:P3d) #4092e:1639310674957894 or multiple entry IDs (or): e:1639310674957894,1639310674957893A few highlights:
Detailed tracked changes.
Full changelog:
L:12,13,14 or label names: label:something or labels:"my label,my other label,🧪"L:* or no label: !L:*:oldest is now based on alpine:3.5 with PHP 7.0.33 and Apache 2.4.35 #3666.htaccess for ./p/themes/ folder #4074CRON_MIN is set #3927400 and 405 HTTP error codes #3981inputand select elements for the Origine theme #3727.editorconfig and .stylelintrc #3895, #3912?? operator #4020Note: Last release before dropping support for PHP 5 and Internet Explorer 11.
pdo_sqlite is optional except for export/import SQLite #3545ORIG_PATH_INFO #3560latest tag in git for the latest FreshRSS release #3524+ sign #3489docker-compose #3353
remoteip to log the client remote IP instead of the local proxy IP #3226LISTEN to change the internal Apache port when running in host network mode #3343alpine:edge to test the latest PHP 8+ version #3294alpine:3.4 to test oldest supported PHP 5.6.36 version with Apache 2.4.43 #3274@-sign in database username (for Azure) #3241ceil() by intval() for edge cases with PHP8 #3404js_vars and nav_menu #3342phpcs (PHP_CodeSniffer) line length + whitespace #3488
*.phtml, *.css, *.js as well.png files as binary #3211PDO::ERRMODE_SILENT #3048<time datetime=""> for entry dates #3106quickadd #3051Quick fix for FreshRSS 1.16.1.
loading="lazy" for favicons #2962.stick elements in older Webkit browsers #2995lib_phpQuery for full-content retrieval #3004FRESHRSS_ENV environment variable #2963lib_phpQuery) #2874
#article .title, #article .content!date: allowing to exclude any date interval #2869
!date:P1W (exlude articles newer than 1 week), !pubdate:2019, -date:2020-01-01/P5d, etc.newestItemTimestampUsec #2853HTTP/1.x 200 OK for an empty request, to ease discovery #2855author: #2806COPY_LOG_TO_SYSLOG and FRESHRSS_ENV controlling logging #2745foreach in applyFilterActions #2809lib_phpQuery when fetching the full content of HTML documents with a complex <head ...> #2864yield #2588
<audio> widgets to use the full width of the reading zone, to help navigation in e.g. podcasts #2875<p> instead of <pre> to display <media:description> information #2807#force_feed simplepie#643
./extensions/ is solely for third-party extensions #2837
./extensions/ as a Docker volume, to ease adding third-party extensionscheck_url_before_add and feed_before_actualize #2704entry_before_display hook also through the API #2762rel=self feed redirections when WebSub is disabled #2659SameSite=Lax #2630data/config-user.custom.php #2490
mod_authz_core instead of mod_access_compat when running on Apache 2.4+ #2461COPY_LOG_TO_SYSLOG to see all logs at once in e.g. docker logs -f #2591FRESHRSS_ENV to control Minz development mode #2508themes/xTheme-* #2511php-gmp for API support in Ubuntu 32-bit #2450
hadolint automatic check of Docker files in Travis #2456
@- as valid characters in usernames (i.e. allow most e-mails) #2391
COPY_SYSLOG_TO_STDERR #2260
cli/user-info.php for accounts using a version of the database older than 1.12.0 #2291
X-Forwarded-Prefix in cookie path behind a reverse-proxy #2201
.htaccess for HTTP authenticationCOPY_SYSLOG_TO_STDERR or in constants.local.php to copy PHP syslog messages to STDERR #2213
TZ timezone environment variable #2153
X-WebAuth-User for delegated HTTP Authentication #2204
freshrss:openArticle JavaScript event #2222
data/config.php that you have 'pubsubhubbub_enabled' => true, if your server has a public address