Routine release.
What's Changed
- refactor: rename functions by @dvikan in #4655
- lint: add returnClientError and returnServerError to forbiddenFunctions by @dvikan in #4656
- docs: emphasize strict types by @dvikan in #4657
- fix: introduce system env var, remove debug mode by @dvikan in #4658
- fix: dont log user errors by @dvikan in #4660
- fix: throw client exception in some bridges by @dvikan in #4661
- [HeiseBridge] Remove "Videos by heise" ads by @Mynacol in #4668
- [GolemBridge] Fix removal of affiliate images by @Mynacol in #4669
- [prtester] improve prtester.py and prhtmlgenerator.yml for running in forks by @User123698745 in #4313
- [SubitoBridge] Add bridge (#1800) by @bagnacauda in #4628
- [ModrinthBridge] Add bridge by @xnand-dot-xyz in #4651
- [CybernewsBridge] add bridge by @tillcash in #4665
- pcgamer: meta tag change by @mdemoss in #4670
- [ZDFMediathekBridge] add bridge by @nabakolu in #4672
- [GolemBridge] Add multi-page headings by @Mynacol in #4673
- [EdfPricesBrige] Update for dom change by @floviolleau in #4675
- [SamMobileBridge] New brige to fetches the latest security patches for Samsung devices by @floviolleau in #4676
- [GolemBridge] changes due to redesign by @Tone866 in #4684
- [CentreFranceBridge] Fix title parsing by @quent1-fr in #4680
- [nginx.conf]: Set 'server_tokens off'; won't leak nginx version by @StrangeRanger in #4681
- fix GolemBridge pagination by @miicha in #4690
- [GolemBridge] Fix image extraction by @Mynacol in #4692
- [GolemBridge] Cleanup & Improvements by @Mynacol in #4694
- [AllgroBridge] Do not return related results by @wrobelda in #4693
- [GolemBridge] fix youtube videos + remove empty div by @Tone866 in #4696
- [IdealoBridge] Fix for cURL Error by @SebLaus in #4698
- [GolemBridge] Fix pagination and empty list by @Mynacol in #4710
- Avoid GitHub/GitLab Issue Comments Warnings by @Mynacol in #4711
- fix(heise): try to fix memory leak issues by @dvikan in #4719
- fix: deprecation error by @dvikan in #4720
- [MinecraftBridge] Add article categories by @nairol203 in #4714
- [MinecraftBridge] Add article image by @nairol203 in #4721
- [FFXIVLodestoneNewsBridge] Add Bridge by @nairol203 in #4713
- fix: Enclosure uses wrong image URL by @nairol203 in #4722
- [CssSelectorComplexBridge] Use parsed timestamp as feed item time by @examosa in #4723
- [KemonoBridge] Update to new API and add more services by @Phantop in #4699
- [ReutersBridge] Add a new category "Artificial Intelligence" by @XruiDD in #4700
- [RutubeBridge] Follow site updates to fix videos listing retrieval by @em92 in #4703
- [NHKWorldJapanShowBridge] Add Bridge by @TReKiE in #4704
- [InvestorsObserverBridge] add bridge by @tillcash in #4708
- [SkyArteBridge] add bridge by @tillcash in #4718
- [BrotFuerDieWeltBridge] Add bridge for "Brot für die Welt" by @lymnyx in #4709
- [InvestorsObserverBridge] add
LIBXML_NONETto prevent XXE by @tillcash in #4724 - [TicketioBridge] Add Bridge by @SebLaus in #4687
- [XPathBridge] Catch null values and improvements by @Mynacol in #4706
- [YouTubeFeedExpanderBridge] Add option to exclude shorts by @xnand-dot-xyz in #4729
- [MagicTheGatheringBridge] Implement bridge for all categories on MTG website by @thefranke in #4730
- The Oatmeal bridge by @t0stiman in #4732
- test: fix deprecation error by @dvikan in #4733
- chore: upgrade composer deps by @dvikan in #4734
- chore: upgrade squizlabs/php_codesniffer 3.13.4 => 4.0.0 by @dvikan in #4735
- chore: downgrade phpcs 4.0.0 => 3.13.4 by @dvikan in #4736
- chore: try to fix failing ci by @dvikan in #4737
- ci: update composer with php platform 7.4 by @dvikan in #4738
- [HeiseBridge] Avoid double header image on some posts by @Mynacol in #4740
- [GolemBridge] Fix YouTube embeds by @Mynacol in #4747
- [HeiseBridge] Remove notice of embedded content by @Mynacol in #4754
- [GolemBridge] Fix multiple YouTube embeds by @Mynacol in #4769
- Normalize www.youtube.com links to this domain by @Mynacol in #4771
- Update AppleMusicBridge HTML parsing by @retinoic in #4746
- [MinecraftBridge] fix: encode image URLs + refactor by @tillcash in #4750
- [TldrTechBridge] Rename Webdev and add new channels by @BryanWall in #4758
- [CybernewsBridge] add
LIBXML_NONETand fix lint by @tillcash in #4727 - [SkyArteBridge] add
LIBXML_NONETand fix lint by @tillcash in #4726 - [html] fix convertLazyLoading: set img src to valid single url by @User123698745 in #4743
- [ComboiosDePortugalBridge] Support for new website by @FJSFerreira in #4741
- [BadenOnlineBridge] add bridge by @tillcash in #4761
- refactor(skyartebridge): replace simplexml with DOMDocument by @dvikan in #4772
- feat: introduce convenience function get_sitemap by @dvikan in #4773
- fix(http): http headers missing by @dvikan in #4774
- fix(container): implement offsetExists by @dvikan in #4775
- refactor(feed_item): remove logger dep by @dvikan in #4776
- [CraigslistBridge] Updated selectors to match new structure by @KappaPrajd in #4753
- Revert "[BadenOnlineBridge] add bridge" by @Mynacol in #4777
- [PokemonTVBridge] Remove by @Bockiii in #4783
- [TeefuryBridge] Fixed by @Bockiii in #4784
- CI: Use a SSH deploy key for PR HTML previews by @Mynacol in #4782
- [Oglaf] Add title and alt text to Oglaf feed by @Cyberax in #4332
- [HackerNews] Fix tag containing comment by @rakoo in #4226
- Change
ENVin Containerfile from deprecated format by @Mynacol in #4788 - [actions] prhtmlgenerator and other workflow improvements by @User123698745 in #4787
- CI: Fix Docker Build action by @Mynacol in #4789
- [AkamaiBridge] Add bridge by @Mynacol in #4748
- [GolemBridge] Handle YouTube embed errors by @Mynacol in #4791
- [EuronewsBridge] Fix author extraction by @Mynacol in #4793
- CI: Run the documentation build on PRs by @Mynacol in #4794
- [GolemBridge] Fix ordering of embeds by @Mynacol in #4795
- CI: Improve PR HTML generator by @Mynacol in #4792
- [InstituteForTheStudyOfWarBridge] Fix bridge following website update by @SqrtMinusOne in #4739
- [BlueskyBridge] prevent 408 request timeout by implementing cache by @mruac in #4666
- test: add basic unit test for convertLazyLoading by @dvikan in #4805
- feat: move logging settings to config by @dvikan in #4806
- [CMetropolitanaBridge] New Bridge by @FJSFerreira in #4810
- [AcademiaBridge] add by @tillcash in #4813
- [EBayBridge] update bridge after eBay changes by @wrobelda in #4816
- [AcademiaBridge] refactor by @tillcash in #4817
- Add RSS bridge for Triabolos by @t3sec in #4818
- [KleinanzeigenBridge] fix errors when element is not found by @wrobelda in #4820
- Fix 404 from DanbooruBridge.php by @KeystrokeCascade in #4819
- [FabBridge] Use API instead to combat 403 errors by @thefranke in #4822
- CI: Switch to ARM runners, update to Ubuntu 24.04 by @Mynacol in #4823
- Use hardcoded JWT token in AppleAppStoreBridge by @NohamR in #4803
- Extract JWT token dynamically from Apple App Store JS bundle by @NohamR in #4824
- fix(sqlitecache): do not remove unexpring entries; extra fixes by @wrobelda in #4827
- feat: optimize caching when TTL is zero by @wrobelda in #4825
- docs: fix the mix-up in cache methods by @wrobelda in #4826
- [MemcachedCache.php] Report result code on set() failure by @BlankEclair in #4828
- fix(cache): cache was still saved with 0 TTL value by @wrobelda in #4830
- [GoComicsBridge] Add Chrome user agent and lowered defaults by @TReKiE in #4801
- CI: Also test with PHP 8.5 by @Mynacol in #4831
- Send origin referrer for YouTube embeds by @Mynacol in #4786
- Added WhatsAppBlogBridge by @Latz in #4778
- feat: Barraqueiro bridges by @FJSFerreira in #4842
- [TelegramBridge] Get channel icon by @albertopasqualetto in #4843
- [SamsungMobileChangelogBridge] new bridge by @ajain-93 in #4844
- Update NovelUpdatesBridge.php by @Albirew in #4854
- [DeutscheWelleBridge] Strip SVG icons and restore thumbnail image loading by @WreckingBANG in #4857
- [EpicGamesFreeBridge] Fix enclosures as images by @RobLoach in #4859
- [BundestagParteispendenBridge] Fix bridge after URL change by @WreckingBANG in #4855
- Update curl-impersonate version by @wrobelda in #4861
- [SchweinfurtBuergerinformationenBridge] Fixes missing hostname in links. by @mibe in #4862
- Updating *booru for using API by @LordArrin in #4850
- feat: Add handleYoutube function by @Mynacol in #4790
- [GithubPackages] New github packages bridge by @rsd76 in #4780
- [HeiseBridge] Include figure captions by @Mynacol in #4868
- tests: Fix the tests by not using ARM by @RobLoach in #4872
- [ARMCommunityBridge] Bridge for the missing feed of the ARM community blogs. by @thefranke in #4869
- [RutubeBridge] Add fallback method to retrieve videos by @em92 in #4762
- [PanneauPocketBridge] Refactor (Breaking Change) by @tillcash in #4829
- [EdfPricesBridge] Update bridge due to dom changes by @floviolleau in #4832
- [gitignore] Ignore favicon files by @RobLoach in #4853
- Remove "Bridge" suffix from the names by @RobLoach in #4870
- [DjMagDotComBridge] new bridge by @skrollme in #4856
- [AlpinePackages] New alpine packages bridge by @rsd76 in #4781
- fix: correct closing anchor tag in
BridgeCardby @papaj-na-wrotkach in #4887 - refactor(bridge_card): html generation by @dvikan in #4890
- refactor(bridge_card): html generation by @dvikan in #4891
- fix(memcached): produce legal cache keys by @dvikan in #4892
- [YoutubeBridge] workaround for sorting by upload date no longer supported by @User123698745 in #4893
- refactor: merge BridgeCard into FrontpageAction by @dvikan in #4895
- refactor(frontpage): use more precise variables namings by @dvikan in #4896
- refactor: more renaming of variables by @dvikan in #4897
- [lib/html.php] set a parameter explicitly nullable by @clavelm in #4898
- [MinecraftBridge] Switch to new API by @ranidspace in #4899
- [GenshinImpactBridge] Parameters implementation by @axor-mst in #4884
- [GGDealsBridge] Add new bridges by @Phantop in #4881
- [HeiseBridge] Thema > Open Source added by @sokai in #4880
- refactor: remove one level of indent by @dvikan in #4900
- [CdactionBridge] Adjust to new website by @morawskim in #4902
- [MicrosoftOfficeUpdatesBridge] add by @tillcash in #4907
- [GithubReleaseBridge] add new github release bridge by @kiliankoe in #4918
- [lib/html.php] handleYoutube: Add video link as text below image by @Mynacol in #4922
- chore: update phpunit 9.6.27 -> 9.6.34 by @Mynacol in #4923
- chore: update php_codesniffer 3 -> 4 by @Mynacol in #4924
- Exclude rssbridge.bus-hit.me by @toboil-features in #4925
- fix: less noisy log records by @dvikan in #4927
- fix(mastodon): type error by @dvikan in #4928
- fix(twitch): typo by @dvikan in #4929
- docs: Update PHP_CodeSniffer repository link by @rodrigoprimo in #4930
- fix(gocomics): changed html by @dvikan in #4933
- [RaiPlaySound] Add RaiPlay Sound Bridge; [PlaySrf] Add Play SRF Bridge by @giodi in #4914
- [ScribbleHubBridge] Introduce new series feed logic by @Phantop in #4882
- fix(eztv) by @dvikan in #4934
- fix(telegram) by @dvikan in #4935
- [BukowskisBridge] Fix updated format by @Qluxzz in #4936
- [RaiPlaySoundBridge] Added icon, reformatted title and added uri by @giodi in #4937
- [NHKWorldJapanShowBridge] Update to new API by @TReKiE in #4938
- Update Rule34Bridge.php by @LordArrin in #4940
- [Golembridge] add img to $item by @Tone866 in #4943
- [NautilusBridge] Add bridge by @SqrtMinusOne in #4860
- fix(getSimpleHTMLDOMCached): wrong phpdoc typehint by @dvikan in #4946
- [HytaleBridge] Fixed feed returning a 404 by @orionblur in #4948
- fix and improve the identification of ARD Mediethek identifiers by @h4b4n3r0 in #4915
- Add Justiz-Auktion Bridge by @jummo in #4949
- AppleAppStoreBridge: switch to HTML serialized-server-data parsing by @NohamR in #4953
- [OtrkeyFinderBridge] Delete bridge by @mibe in #4963
- refactor and fix bugs on the nordbayern bridge by @theScrabi in #4962
- [HeiseBridge] remove newlines/double image description by @Tone866 in #4964
- [ThreadsBridge] Add timestamp support using taken_at from profile JSON by @Riffer in #4916
- [BAEBridge] fixes and improvements by @hrenard in #4917
- [GenshinImpactBridge] API URL update by @axor-mst in #4972
- fix(html): improve css by @dvikan in #4971
- make nuremberg bridge articles unique by @theScrabi in #4980
- [CaschyBridge] add handleYoutube by @Tone866 in #4944
- Add Invidious Bridge by @Avvyxx in #4950
- [TheBell] Add new bridge for TheBell by @anlar in #4954
- [DobinDom] Add new bridge for DobinDom by @anlar in #4955
- [AssociatedPressNews] fix: re-write old broken API to GraphQL API by @anlar in #4969
- [YoutubeBridge] handle new lockupViewModel layout by @polybjorn in #4982
- [ProjectMuseBridge] add by @tillcash in #4983
- [DobinDom] Fix lint style warning by @anlar in #4986
- add tagesschau bridge by @theScrabi in #4961
- Fix nordbayern by @theScrabi in #4988
- Update 06_Public_Hosts.md by @Skomli in #4989
- fix: reduce log noise by @dvikan in #4990
- [HeiseBridge] Support Mastodon embeds by @Mynacol in #4967
- [HeiseBridge] Add update box text with timestamp by @Mynacol in #4991
- [SpottschauBridge] Rewrite of the Spottschau Bridge by @mibe in #4874
- fix: even more less log noise by @dvikan in #4992
- Add COPRBridge.php by @AMA147000 in #4995
- Add GitHubWorkflowBridge.php by @AMA147000 in #4994
- fix(rumble) by @dvikan in #4998
- handleyoutube: fix youtube.com urls not matching by @Tone866 in #4999
- [SQLiteCache] Fix check if directory is writable by @Mynacol in #5022
- fix(http): missing user agent by @dvikan in #5046
- fix: typo by @dvikan in #5047
- CI: Refactor of PR HTML generator workflow by @Mynacol in #5050
- Add Uber Engineering blog bridge by @salty-flower in #4960
- Added a FoxNewsTaxonomyBridge.ph A foxnews bridge that can be filtered by @scottsteely in #4970
- fix: YouTubeFeedExpanderBridge getIcon() null pointer and performance by @thrawn-sh in #5011
- [FanaticalBridge] Fix game bundle filter (#4920) by @Phantop in #5015
- [GoComicsBridge] Fix class for a-element by @rsd76 in #5017
- [AlpinePackagesBridge] Fix/add different classes for edge packages. by @rsd76 in #5018
- [YoutubeBridge] Add option to skip members-only videos by @polybjorn in #5019
- fix(feed_parser): remove unicode BOM in xml by @dvikan in #5054
- fix(feed_parser): properly parse categories by @dvikan in #5056
- [AppleAppStoreBridge] replace regex with string search to extract serialized server data by @NohamR in #5024
- [BandcampBridge] Fix "By tag" using removed API by @Daliborlol in #5025
- [YouTubeBridge] Fix for change to YouTube playlists by @pg08972345 in #5026
- [AnthropicNewsBridge] New Bridge + fix NintendoBridge and BlizzardNewsBridge by @Niehztog in #5028
- 🐛(fix) Update SamMobileUpdateBridge by @floviolleau in #5030
- 🐛(fix) Update EdfPriceBrige due to jechange.fr DOM changes by @floviolleau in #5031
- ✨(feat) Add new bridge Wawacity by @floviolleau in #5032
- 🐛(fix) Update AtmoOccitanieBridge by @floviolleau in #5033
- 🐛(fix) Update AtmoNouvelleAquitaineBridge by @floviolleau in #5034
- (feat) Add new bridge ThePint.news by @jejomews in #5036
- [PlaySrf] Support all regions. by @giodi in #5042
- [HytaleBridge] Updated elements for feed by @orionblur in #5049
- [DobinDom] Add feed entry description (summary, timecodes, text) by @anlar in #5051
- [CdactionBridge] Add category "Szpile" by @morawskim in #5055
- [SPLCenterBridge] Fix broken feeds and offer to maintain by @tyler000000 in #4846
- [KleinanzeigenBridge] random improvements and fixes by @wrobelda in #4821
- [EdfColorDay Bridge] add new bridge by @floviolleau in #4370
- [ScarletComicBridge] Add Scarlet Comic bridge by @Cyberax in #4333
- lint by @dvikan in #5057
- fix(instagram) by @dvikan in #5058
- fix(twitter): suppress php notice errors by @dvikan in #5059
- incl app.bsky.embed.gallery origin issue #5009 by @mruac in #5060
- docs: add Caddy installation instructions by @royy92 in #5052
- [docs] Switching domain for em92's instance by @em92 in #5062
- Update CaschyBridge.php by @Tone866 in #5064
- [bluesky] fix #5063 reposts not being excluded by @mruac in #5065
- Anna's Archive: Fix domain, update filters by @APT37 in #5066
- CI: Fix PR number retrieval on a488af4 by @Mynacol in #5071
- [FacebookBridge] Fix user post extraction by @Mynacol in #5067
- Update dependencies by @Mynacol in #5072
- CI: Avoid persisting git credentials by @Mynacol in #5073
- [BundBridge] add by @tillcash in #5075
- Fix Wikipedia links by @Frenzie in #5078
- [BlueskyBridge] fix a TypeError on null for starter pack author with no display name by @clavelm in #5079
New Contributors
- @xnand-dot-xyz made their first contribution in #4651
- @nabakolu made their first contribution in #4672
- @StrangeRanger made their first contribution in #4681
- @miicha made their first contribution in #4690
- @nairol203 made their first contribution in #4714
- @examosa made their first contribution in #4723
- @XruiDD made their first contribution in #4700
- @lymnyx made their first contribution in #4709
- @retinoic made their first contribution in #4746
- @BryanWall made their first contribution in #4758
- @FJSFerreira made their first contribution in #4741
- @Cyberax made their first contribution in #4332
- @t3sec made their first contribution in #4818
- @KeystrokeCascade made their first contribution in #4819
- @BlankEclair made their first contribution in #4828
- @albertopasqualetto made their first contribution in #4843
- @WreckingBANG made their first contribution in #4857
- @RobLoach made their first contribution in #4859
- @LordArrin made their first contribution in #4850
- @rsd76 made their first contribution in #4780
- @papaj-na-wrotkach made their first contribution in #4887
- @clavelm made their first contribution in #4898
- @ranidspace made their first contribution in #4899
- @sokai made their first contribution in #4880
- @kiliankoe made their first contribution in #4918
- @toboil-features made their first contribution in #4925
- @rodrigoprimo made their first contribution in #4930
- @giodi made their first contribution in #4914
- @orionblur made their first contribution in #4948
- @h4b4n3r0 made their first contribution in #4915
- @Riffer made their first contribution in #4916
- @hrenard made their first contribution in #4917
- @Avvyxx made their first contribution in #4950
- @anlar made their first contribution in #4954
- @polybjorn made their first contribution in #4982
- @Skomli made their first contribution in #4989
- @AMA147000 made their first contribution in #4995
- @salty-flower made their first contribution in #4960
- @scottsteely made their first contribution in #4970
- @thrawn-sh made their first contribution in #5011
- @Daliborlol made their first contribution in #5025
- @pg08972345 made their first contribution in #5026
- @jejomews made their first contribution in #5036
- @tyler000000 made their first contribution in #4846
- @royy92 made their first contribution in #5052
- @APT37 made their first contribution in #5066
Full Changelog: 2025-08-05...2026-09-30