ChangeLog 109 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131
  1. Version 2.2.11 (July 26, 2025)
  2. ------------------------------
  3. ### ✨ New Features
  4. * **TLS support for Unix sockets**: Miniflux can now serve TLS over Unix domain sockets using `CERT_FILE` and `KEY_FILE` ([#fcf86e3](https://github.com/miniflux/v2/commit/fcf86e3)).
  5. * **RSS fallback**: If a feed entry has no URL, Miniflux now uses the enclosure URL as a fallback ([#d9de9d1](https://github.com/miniflux/v2/commit/d9de9d1)).
  6. * **Bearer token for Linkwarden**: The Linkwarden integration now uses Bearer token authorization instead of cookies ([#1d11623](https://github.com/miniflux/v2/commit/1d11623)).
  7. * **Cookie policy improvement**: `SameSiteStrictMode` is enforced for cookies when OAuth2/OIDC is not used ([#135ce1d](https://github.com/miniflux/v2/commit/135ce1d)).
  8. * **Readability engine**: Avoid removing elements with the `content` class during readability parsing ([#66b269e](https://github.com/miniflux/v2/commit/66b269e)).
  9. ### 🛠️ Improvements
  10. * **Massive readability engine refactoring** and performance optimizations:
  11. * Improved performance of `getClassWeight`, `getLinkDensity`, and `transformMisusedDivsIntoParagraphs`.
  12. * Simplified and optimized internal logic of `removeUnlikelyCandidates`, `getSelectionLength`, and `getArticle`.
  13. * Reduced memory allocation in sanitizer and readability components.
  14. * **Storage optimization**: Strings are now truncated on the Go side to respect `tsvector` limits, reducing DB load and ensuring valid UTF-8 ([#703f113](https://github.com/miniflux/v2/commit/703f113)).
  15. * **Simplified and clarified internal code structure**:
  16. * Major cleanup and size optimization of internal structs (`Feed`, `FeedCreationRequest`, etc.).
  17. * Reduced memory use and improved CPU cache locality.
  18. * Numerous refactors across `config`, `template`, `locale`, `subscription`, and `fetcher` modules.
  19. ### 🐛 Bug Fixes
  20. * Fixed an issue with feeds having excessive leading whitespace causing parser buffer issues ([#54abd0a](https://github.com/miniflux/v2/commit/54abd0a)).
  21. * Properly preserve UTF-8 when truncating strings for full-text search ([#703f113](https://github.com/miniflux/v2/commit/703f113)).
  22. * Fixed logic error in enclosure type detection ([#50d5cb9](https://github.com/miniflux/v2/commit/50d5cb9)).
  23. * Fixed incorrect filter rule parsing of Windows-style newlines ([#dc81725](https://github.com/miniflux/v2/commit/dc81725)).
  24. * Fixed a panic in `startAutoCertTLSServer` function when using Let's Encrypt automatic certificates ([#f7a6b02](https://github.com/miniflux/v2/commit/f7a6b02))
  25. * Improved UI spacing consistency around header/footer ([#32fbb4e](https://github.com/miniflux/v2/commit/32fbb4e)).
  26. ### ⚠️ Breaking Changes
  27. * **Windows binary no longer distributed**: Windows is no longer a supported platform for binary distribution. Users must build from source if needed ([#b470b18](https://github.com/miniflux/v2/commit/b470b18)).
  28. ### 🧪 Tests & CI
  29. * Test coverage significantly increased for modules like `readability`, `sanitizer`, `processor`, `locale`, and `storage`.
  30. * Commit linter updated to support new Git revert message format.
  31. ### 🐘 Docker & Environment
  32. * Base Docker image updated to Alpine 3.22.
  33. * PostgreSQL Docker example updated to use the latest version.
  34. ### 🌐 Localization
  35. * Updated Chinese and German translations.
  36. ### 🔒 Dependency Updates
  37. * Bumped `github.com/go-webauthn/webauthn` to `0.13.4`
  38. * Bumped `github.com/tdewolff/minify/v2` to `2.23.10`
  39. * Bumped `golang.org/x/*` modules: `image`, `net`, `term`, `crypto`
  40. * Bumped `github.com/andybalholm/brotli` to `1.2.0`
  41. Version 2.2.10 (June 23, 2025)
  42. ------------------------------
  43. * test(sanitizer): add unit test for 0x0 pixel tracker
  44. * test(sanitizer): add test case to cover Vimeo iframe rewrite without query string
  45. * refactor(youtube): Remove a regex and make use of `fetchWatchTime`
  46. * refactor(youtube): initialize two maps to the proper length
  47. * refactor(tests): use `b.Loop()` instead of for range `b.N`
  48. * refactor(server): avoid double call to `Sprintf`
  49. * refactor(sanitizer): use global variables to avoid recreating slices on every call
  50. * refactor(sanitizer): use a map for iframe allow list
  51. * refactor(sanitizer): remove two useless `www.` prefixes
  52. * refactor(sanitizer): make `isValidAttribute()` check O(1)
  53. * refactor(rewrite): rename `Rewriter` function to `ApplyContentRewriteRules`
  54. * refactor(processor): simplify Bilibili processing
  55. * refactor(processor): remove a useless type declaration
  56. * refactor(processor): remove a duplicated function call
  57. * refactor(processor): refactor common code into a `fetchWatchTime` function
  58. * refactor(processor): move filters to a `filter` package
  59. * refactor(processor): move `FilterEntryMaxAgeDays` filter to filter package
  60. * refactor(processor): move `RewriteEntryURL` function to `rewrite` package
  61. * refactor(processor): minor simplification of a loop
  62. * refactor(internal): add an `urllib.DomainWithoutWWW` function
  63. * refactor(http): rename package from `httpd` to `server` for consistency
  64. * refactor(http): Don't hardcode TLS configuration
  65. * refactor(filter): avoid code duplication between `IsBlockedEntry` and `IsAllowedEntry` functions
  66. * refactor(database): drop 3 columns in a single transaction
  67. * refactor(crypto): use `rand.Text()` instead of a custom implementation
  68. * refactor(config): remove deprecated config options
  69. * refactor(appjs): no need to check if always present elements are always present
  70. * perf(xml): optimized `NewXMLDecoder`
  71. * perf(xml): optimize XML filtering
  72. * perf(validator): slightly optimize a regex
  73. * perf(timezone): cache `getLocation`'s results
  74. * perf(storage): pre-allocate a slice in `RefreshFeedEntries`
  75. * perf(storage): optimize away two `Sprintf` calls
  76. * perf(sanitizer): use a switch-case instead of a map
  77. * perf(sanitizer): minor simplifications of the sanitizer
  78. * perf(sanitizer): extract a call to `url.Parse` and make intensive use of it
  79. * perf(rss): optimize a bit `BuildFeed`
  80. * perf(rss): early return when looking for an item's author
  81. * perf(rewrite): make `getPredefinedRewriteRules` O(1)
  82. * perf(reader): use a non-cryptographic hash when possible
  83. * perf(reader): optimize `RemoveTrackingParameters`
  84. * perf(readability): minor regex improvement
  85. * perf(media): minor regex simplification
  86. * perf(fetcher): pre-allocate the cipherSuites
  87. * perf(database): use `TRUNCATE` instead of `DELETE FROM` in migrations
  88. * perf(database): marginally speeds migrations up
  89. * perf(api): use `math/rand/v2` instead of `math/rand` for better performance
  90. * fix(readability): do not remove elements within code blocks
  91. * fix(karakeep): correct method name and improve error handling in `SaveURL`
  92. * fix(filter): skip invalid rules instead of exiting the loop
  93. * feat(ui): display external link in single entry view because the URL was not visible on mobile (no mouse over)
  94. * feat(ui): avoid showing an excessive number of tags
  95. * feat(ui): add user setting to control `target="_blank"` on links
  96. * feat(sanitizer): validate MathML XML namespace
  97. * feat(sanitizer): consider images of size 0x0 as pixel trackers
  98. * feat(sanitizer): add validation for empty `width` and `height` attributes in img tags
  99. * feat(sanitizer): add support for `fetchpriority` and `decoding` attributes in img tags
  100. * feat(rewrite): add support for YouTube Shorts video URL pattern
  101. * feat(rewrite): add `parkablogs.com` to the referer override list
  102. * feat(oidc): use `preferred_username` first instead of `email` claim
  103. * feat(locale): update Polish translations
  104. * feat(locale): update locales using machine translation
  105. * feat(locale): update Indonesian translations
  106. * feat(locale): update German translations
  107. * feat(locale): update Chinese translations
  108. * feat(integration)!: remove Pocket integration (Pocket will no longer be available after July 8, 2025)
  109. * feat(filter): add `EntryDate=max-age:duration` filter
  110. * feat(css): add margin-bottom to input for consistent spacing
  111. * feat(config)!: remove `SERVER_TIMING_HEADER` config option
  112. * feat: Allow multiple listen addresses
  113. * feat: adding support for saving entries to Karakeep
  114. * feat: add entry filters at the feed level
  115. * docs(readme): document a couple of nifty features
  116. * docs: add `CONTRIBUTING.md` file
  117. * chore(template): remove `X-UA-Compatible` meta tag specific to Internet Explorer
  118. * build(go): bump to go 1.24
  119. * build(deps): bump `library/alpine` in `/packaging/docker/alpine`
  120. * build(deps): bump `golang.org/x/net` from `0.40.0` to `0.41.0`
  121. * build(deps): bump `golang.org/x/image` from `0.27.0` to `0.28.0`
  122. * build(deps): bump `golang.org/x/crypto` from `0.38.0` to `0.39.0`
  123. Version 2.2.9 (May 26, 2025)
  124. ----------------------------
  125. * refactor(googlereader): remove redundant log message
  126. * refactor(googlereader): move constants to separate files
  127. * fix(webauthn): correct argument in debug log
  128. * fix(sanitizer): MathML tags are not fully supported by `golang.org/x/net/html`
  129. * fix(migrations): prevent failure at version 45 with long entry URLs
  130. * fix(locale): localize Git commit label in about page
  131. * fix(googlereader): return a 400 instead of 500 for invalid edit requests
  132. * fix(googlereader): handle various item ID formats
  133. * fix(googlereader): avoid panic for inexisting feed or category
  134. * fix(googlereader): `/items/contents` should accept short form item IDs
  135. * feat(webauthn): prefer creation of a client-side discoverable credential
  136. * feat(urlcleaner): remove the `ref` parameter from url
  137. * feat(settings): replace `div.panel` with paragraph tags for OAuth2 links
  138. * feat(settings): add validation for entry order and categories sorting order
  139. * feat(settings): add option to always open articles externally
  140. * feat(server): add liveness and readiness probes
  141. * feat(sanitizer): add MathML tags to the sanitizer
  142. * feat(sanitized): allow Spotify iframes
  143. * feat(rssbridge): support authentication token for RSS-Bridge
  144. * feat(response): change error response content type to plain text and escape HTML
  145. * feat(reader): populate feed description automatically
  146. * feat(locale): update Russian translation
  147. * feat(locale): update Polish translation
  148. * feat(locale): update French translation
  149. * feat(googlereader): avoid SQL query to fetch username in streamItemContentsHandler
  150. * feat(googlereader): add `mark-all-as-read` endpoint
  151. * feat(api): add new endpoints to manage API keys
  152. * ci: remove deprecated `reviewers` field from `dependantbot.yml`
  153. * chore(gitignore): ignore miniflux binary in root directory
  154. * build(deps): bump `golangci/golangci-lint-action` from `7` to `8`
  155. * build(deps): bump `golang.org/x/oauth2` from `0.29.0` to `0.30.0`
  156. * build(deps): bump `golang.org/x/net` from `0.39.0` to `0.40.0`
  157. * build(deps): bump `golang.org/x/image` from `0.26.0` to `0.27.0`
  158. * build(deps): bump `golang.org/x/crypto` from `0.37.0` to `0.38.0`
  159. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.23.3` to `2.23.8`
  160. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.23.1` to `2.23.3`
  161. * build(deps): bump `github.com/go-webauthn/webauthn` from `0.12.3` to `0.13.0`
  162. Version 2.2.8 (April 22, 2025)
  163. ------------------------------
  164. * refactor(js): replace `DomHelper` methods with standalone functions
  165. * refactor: avoid logging twice the feed errors in the background worker
  166. * fix(api): `hide_globally` categories field should be a boolean
  167. * fix(ui): add missing `await` when calling `navigator.share()` method
  168. * fix(ui): replace share link with a form button for better accessibility
  169. * feat(telegrambot): replace "Go to website" button with "Go to Miniflux"
  170. * feat(locale): update Polish translation
  171. * feat(locale): update German translation
  172. * feat(locale): update Chinese translation
  173. * feat(config): add `SCHEDULER_ROUND_ROBIN_MAX_INTERVAL` option
  174. * feat(cli): add `-reset-feed-next-check-at` argument
  175. * feat(api): add `update_content` query parameter to `/entries/{entryID}/fetch-content` endpoint
  176. * feat: use `Cache-Control` max-age and `Expires` headers to calculate next check
  177. * feat: implement proxy URL per feed
  178. * feat: add proxy rotation functionality
  179. * ci(linter): replace commitlint with a Python script
  180. * ci: add documentation issue template
  181. * build(deps): bump `golang.org/x/oauth2` from `0.28.0` to `0.29.0`
  182. * build(deps): bump `golang.org/x/net` from `0.38.0` to `0.39.0`
  183. * build(deps): bump `golang.org/x/image` from `0.25.0` to `0.26.0`
  184. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.22.4` to `2.23.1`
  185. * build(deps): bump `github.com/PuerkitoBio/goquery` from `1.10.2` to `1.10.3`
  186. * build(deps): bump `github.com/prometheus/client_golang`
  187. * build(deps): bump `github.com/mattn/go-sqlite3` from `1.14.24` to `1.14.28`
  188. * build(deps): bump `github.com/go-webauthn/webauthn` from `0.12.2` to `0.12.3`
  189. * build(deps): bump `github.com/coreos/go-oidc/v3` from `3.13.0` to `3.14.1`
  190. Version 2.2.7 (April 1, 2025)
  191. -----------------------------
  192. * test(api): update base URL after upgrading Hugo
  193. * refactor(rewrite): reorganize referer rules and remove obsolete mappings
  194. * refactor: combine feed icon handlers to use only `externalIconID`
  195. * fix(ui): update share feature to correctly select the title element and handle empty titles
  196. * fix(ui): update entry tags display logic to show links based on user authentication
  197. * fix(ui): remove touch-action style to prevent horizontal scrolling issues
  198. * fix(ui): log a warning for an empty client secret
  199. * fix(ui): change labels from "Read / Unread" to "Mark as Read"
  200. * fix(ui): avoid 500 errors and NaN when marking a deleted entry as read
  201. * fix(subscription): add `/rss/feed.xml` to the list of known feed URLs
  202. * fix(security): use a more restrictive CSP for untrusted content
  203. * fix(rewrite): remove obsolete rule for `webtoons.com`
  204. * fix(processor): add missing quotation marks to import comments
  205. * fix(googlereader): return enclosures in the `streamItemContentsHandler` response
  206. * fix: address minor issues detected by Go linters
  207. * feat(urlcleaner): add more Google Analytics parameters
  208. * feat(storage): reduce the number of SQL queries when fetching entry enclosures
  209. * feat(sanitizer): allow the `<u>` tag in feeds
  210. * feat(sanitizer): allow the `<b>` tag
  211. * feat(locale): update Polish translation
  212. * feat(locale): add Romanian translation
  213. * feat(integrations/ntfy): make ntfy topics configurable per feed
  214. * feat(googlereader): add a feed icon endpoint
  215. * feat: show database size on the about page
  216. * feat: add a `make add string` command to add new localized strings
  217. * docs: update README
  218. * docs: update client README to remove references to deprecated functions
  219. * ci: replace GitHub Issue Markdown templates with YAML forms
  220. * build(deps): bump `golangci/golangci-lint-action` from `6` to `7`
  221. * build(deps): bump `golang.org/x/term` from `0.29.0` to `0.30.0`
  222. * build(deps): bump `golang.org/x/oauth2` from `0.26.0` to` 0.28.0`
  223. * build(deps): bump `golang.org/x/net` from `0.35.0` to `0.38.0`
  224. * build(deps): bump `golang.org/x/image` from `0.24.0` to `0.25.0`
  225. * build(deps): bump `golang.org/x/crypto` from `0.33.0` to `0.36.0`
  226. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.21.3` to `2.22.4`
  227. * build(deps): bump `github.com/prometheus/client_golang`
  228. * build(deps): bump `github.com/golang-jwt/jwt/v5` from `5.2.1` to `5.2.2`
  229. * build(deps): bump `github.com/go-webauthn/webauthn` from `0.11.2` to `0.12.2`
  230. * build(deps): bump `github.com/go-jose/go-jose/v4` from `4.0.2` to `4.0.5`
  231. * build(deps): bump `github.com/coreos/go-oidc/v3` from `3.12.0` to `3.13.0`
  232. Version 2.2.6 (February 22, 2025)
  233. ---------------------------------
  234. * test(encoding): add unit tests for `CharsetReader` function
  235. * refactor(xml): improve the performances of `NewXMLDecoder`
  236. * refactor(ui): remove superfluous cast
  237. * refactor(request): broaden an error condition when parsing cookies
  238. * refactor(processor): remove superfluous parenthesis
  239. * refactor(opml): don't define receivers on both values and pointer
  240. * refactor(model): simplify a condition
  241. * refactor(model): don't define methods both on instance and pointer
  242. * refactor(locale): sort JSON documents alphabetically by keys
  243. * refactor(locale): remove superfluous parenthesis
  244. * refactor(js): use proper types in `app.js`
  245. * refactor(js): replace the deprecated `window.pageYOffset` with `window.scollY`
  246. * refactor(js): remove a useless `return`
  247. * refactor(js): anchor `=` removal in `webauthn_handler.js` regex
  248. * refactor(js): add default value for parameter `fallbackSelf` in `goToPage` function
  249. * refactor(integration): don't use `defer` in a loop
  250. * refactor(icon): guard against a potential `null` dereference
  251. * refactor(date): use an else-if instead of two if statements
  252. * refactor(css): use shortcuts to declare padding
  253. * refactor(client): remove a useless cast
  254. * perf(sanitizer): remove two useless calls to `strings.ReplaceAll`
  255. * fix(ui): Redirect correctly post feed removal from category feeds list
  256. * fix(scraper): update TechCrunch scraper rule
  257. * fix(scraper): avoid encoding issue if charset meta tag is after 1024 bytes
  258. * fix(sanitizer): non-allowed attributes are not properly stripped
  259. * fix(sanitizer): correct HTML tag name from `tfooter` to `tfoot`
  260. * fix(rss): handle item title with `CDATA` content correctly
  261. * fix(locale): missing hyphen in `de_DE.json`
  262. * fix(css): avoid aside overflow on the pagination menu
  263. * fix(css): `--entry-content-aside-border-color` is missing from `system.css`
  264. * fix(api): return 500 response when JSON serialization fails
  265. * fix(api): JSON encoding is failing with dates at OAD and negative timezone offset
  266. * feat(urlcleaner): add trackers to the blocklist
  267. * feat(ui): open the `<details>` tag in edit feed page when the feature is enabled
  268. * feat(sanitizer): improve text truncation with better space handling
  269. * feat(sanitizer): allow `img` tags with only a `srcset` and no `src` attribute
  270. * feat(rss): add workaround for RSS item title with HTML content
  271. * feat(pushover): add integration with pushover.net
  272. * feat(processor): fetch YouTube watch time in bulk using the API
  273. * feat(locale): update Traditional Chinese translation
  274. * feat(locale): update Polish translation
  275. * feat(locale): update French translation
  276. * feat(locale): add Taiwanese POJ (nan-Latn-pehoeji)
  277. * feat(integration): update Linkace integration to support API v2
  278. * feat(integration): add webhook URL per feed
  279. * feat(integration): add Slack integration
  280. * feat(css): improve aside element position on smartphone
  281. * ci: update GitHub Actions workflows to use Go 1.24
  282. * ci: trigger packaging tests on pull requests
  283. * ci: add `commitlint` to validate PR commit messages
  284. * build(deps): bump `golang` in `/packaging/debian`
  285. * build(deps): bump `golang.org/x/term` from `0.28.0` to `0.29.0`
  286. * build(deps): bump `golang.org/x/oauth2` from `0.25.0` to `0.26.0`
  287. * build(deps): bump `golang.org/x/net` from `0.34.0` to `0.35.0`
  288. * build(deps): bump `golang.org/x/image` from `0.23.0` to `0.24.0`
  289. * build(deps): bump `golang.org/x/crypto` from `0.32.0` to `0.33.0`
  290. * build(deps): bump `github.com/PuerkitoBio/goquery` from `1.10.1` to `1.10.2`
  291. Version 2.2.5 (January 20, 2025)
  292. --------------------------------
  293. * test(js): improve `.jshintrc` (strict comparison, etc...)
  294. * test(sanitizer): add a fuzzer
  295. * refactor(rewriter): use custom title case converter implementation instead of `golang.org/x/text/cases.Title()`
  296. * refactor(readingtime): replace `whatlanggo` package with an ad-hoc implementation
  297. * refactor(oauth2): no need to use `io.WriteString` when sha256 provides a way to obtain a sum in a single call
  298. * refactor(js): simplify a bit `keyboard_handler.js`
  299. * refactor(js): remove an outdated check for `{passive: true}`
  300. * refactor(js): minor refactoring of `touch_handler.js`
  301. * refactor(js): minor improvements in `app.js`
  302. * refactor(database): add special handling for PostgreSQL-specific migrations
  303. * fix(ui): reading preferences are reset if the form values are incorrect
  304. * fix(sanitizer): allow `<hr>` tags
  305. * fix(finder): do not add redirections to the list of subscriptions to avoid confusion
  306. * fix: update Wallabag URL label to avoid confusion
  307. * fix: improve pagination when having identical publication date
  308. * fix: do not strip tags in Atom entry title
  309. * feat(ntfy): Add option to use internal links
  310. * feat(locale): update Polish translation
  311. * feat(locale): update German translation
  312. * feat(integration): add Discord integration
  313. * feat(database): add optional build support for SQLite
  314. * feat: validate usernames upon creation
  315. * feat: replace `%{?systemd_requires}` with `%{?systemd_ordering}`
  316. * feat: bump linter and minifier from ECMAScript 2017 to 2020 (ES11)
  317. * feat: add `fix_ghost_cards` rewrite rule
  318. * ci: tighten the CodeQL rules
  319. * ci: run Docker tests only when the Dockerfiles are modified
  320. * ci: run `-race -cover` only on Ubuntu jobs
  321. * ci: don't specify languages for CodeQL
  322. * ci: don't run `go vet ./...` as it's run as part of `golangci-lint`
  323. * ci: checkout before installing Go to improve cache efficiency
  324. * ci: avoid building Linux packages for each pull-request
  325. * build(deps): bump `golang.org/x/oauth2` from `0.24.0` to `0.25.0`
  326. * build(deps): bump `golang.org/x/net` from `0.33.0` to `0.34.0`
  327. * build(deps): bump `golang.org/x/crypto` from `0.31.0` to `0.32.0`
  328. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.21.2` to `2.21.3`
  329. * build(deps): bump `github.com/PuerkitoBio/goquery` from `1.10.0` to `1.10.1`
  330. * build(deps): bump `github.com/coreos/go-oidc/v3` from `3.11.0` to `3.12.0`
  331. Version 2.2.4 (December 20, 2024)
  332. ---------------------------------
  333. * test(rewrite): add unit test for referer rewrite function
  334. * refactor(subscription): use `strings.HasSuffix` instead of a regex in `FindSubscriptionsFromYouTubePlaylistPage`
  335. * refactor(sanitizer): use `token.String()` instead of `html.EscapeString(token.Data)`
  336. * refactor(sanitizer): simplify `isValidTag`
  337. * refactor(sanitizer): simplify `hasRequiredAttributes`
  338. * refactor(sanitizer): remove condition because `config.Opts` is guaranteed to never be nil
  339. * refactor(sanitizer): remove a now-useless function after refactoring
  340. * refactor(sanitizer): refactor conditions to highlight their similitude, enabling further refactoring
  341. * refactor(sanitizer): optimize `strip_tags.go`
  342. * refactor(sanitizer): micro-optimizations of `srcset.go`
  343. * refactor(sanitizer): merge two conditions
  344. * refactor(sanitizer): inline a function in `sanitizeAttributes` and fix a bug in it
  345. * refactor(sanitizer): inline a condition in `sanitizeSrcsetAttr`
  346. * refactor(sanitizer): improve `rewriteIframeURL()`
  347. * refactor(sanitizer): Google+ isn't a thing anymore
  348. * refactor(sanitizer): change the scope of a variable
  349. * refactor(rewriter): replace regex with URL parsing for referrer override
  350. * refactor(rewriter): avoid the use of regex in `addDynamicImage`
  351. * refactor(rewrite): remove unused function arguments
  352. * refactor(readability): various improvements and optimizations
  353. * refactor(readability): simplify the regexes in `readability.go`
  354. * refactor(processor): use URL parsing instead of a regex
  355. * refactor(processor): improve the `rewrite` URL rule regex
  356. * refactor(locale): delay parsing of translations until they're used
  357. * refactor(js): factorise a line in `app.js`
  358. * refactor(handler): delay `store.UserByID()` as much as possible
  359. * refactor(css): replace `-ms-text-size-adjust` with `text-size-adjust`
  360. * refactor(css): remove `-webkit-clip-path`
  361. * refactor(css): factorise `.pagination-next` and `.pagination-last` together
  362. * refactor: use a better construct than `doc.Find(…).First()`
  363. * refactor: use `min/max` instead of `math.Min/math.Max`
  364. * refactor: refactor `internal/reader/readability/testdata`
  365. * refactor: optimize `sanitizeAttributes`
  366. * refactor: get rid of `numberOfPluralFormsPerLanguage` test-only variable
  367. * fix(storage): replace timezone function call with view
  368. * fix(consistency): align feed modification behavior between API and UI
  369. * fix(ci): fix grammar in pull-request template
  370. * fix: load icon from site URL instead of feed URL
  371. * fix: feed icon from xml ignored during force refresh
  372. * feat(rewrite)!: remove `parse_markdown` rewrite rule
  373. * feat(mediaproxy): update predefined referer spoofing rules for restricted media resources
  374. * feat(locale): update translations to clarify readeck URL instead of readeck API endpoint
  375. * feat(locale): update German translations
  376. * feat(locale): update Chinese translations
  377. * feat(apprise): update `SendNotification` to handle multiple entries and add logging
  378. * feat(apprise): add title in notification request body
  379. * feat: resize favicons before storing them in the database
  380. * feat: optionally fetch watch time from YouTube API instead of website
  381. * feat: only show the commit URL if it's not empty on `/about`
  382. * feat: add predefined scraper rules for `arstechnica.com`
  383. * feat: add date-based entry filtering rules
  384. * chore: remove `blog.laravel.com` rewrite rule
  385. * build(deps): bump `library/alpine` in `/packaging/docker/alpine` to `3.21`
  386. * build(deps): bump `golang.org/x/term` from `0.26.0` to `0.27.0`
  387. * build(deps): bump `golang.org/x/net` from `0.31.0` to `0.33.0`
  388. * build(deps): bump `golang.org/x/crypto` from `0.30.0` to `0.31.0`
  389. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.21.1` to `2.21.2`
  390. Version 2.2.3 (November 10, 2024)
  391. ---------------------------------
  392. * fix: unable to change password due to a typo in SQL parameter
  393. * fix: show only one player when there are several audio/video enclosures
  394. * feat(mediaproxy): pass original filename in `Content-Disposition` header
  395. * feat(mediaproxy): implement referer spoofing for restricted media resources
  396. * feat(integration): update Shiori integration to use new API endpoints for login/bookmark
  397. * build(deps): bump `golang.org/x/text` from `0.19.0` to `0.20.0`
  398. * build(deps): bump `golang.org/x/term` from `0.25.0` to `0.26.0`
  399. * build(deps): bump `golang.org/x/oauth2` from `0.23.0` to `0.24.0`
  400. * build(deps): bump `golang.org/x/net` from `0.30.0` to `0.31.0`
  401. * build(deps): bump `golang.org/x/crypto` from `0.28.0` to `0.29.0`
  402. Version 2.2.2 (October 29, 2024)
  403. --------------------------------
  404. * fix(webauthn): add backup eligibility flag workaround to avoid a 401 response
  405. * fix: update `Last-Modified` if it changes in a 304 response
  406. * feat(webauthn): show help message regarding username and non-discoverable credentials
  407. * feat(rss): calculate hash based on item title/content for feeds without GUID and link
  408. * feat(locale): update Chinese translations
  409. * feat(locale): update Polish translations
  410. * feat(integration): add Cubox integration
  411. * feat(client): add `custom_js` field to Go API client
  412. * feat(api): add endpoint for user integration status
  413. * feat: update feed icon during force refresh
  414. * feat: take `Retry-After` header into consideration for rate limited feeds
  415. * feat: set entry URL to rewritten URL if a rewrite rule is defined
  416. * feat: replace `xurls` third-party module with an ad-hoc regexp
  417. * feat: add new settings option to allow external fonts
  418. * feat: add custom user JavaScript similar to custom CSS
  419. * chore: update test case comment
  420. * build(deps): bump `golang.org/x/net` from `0.29.0` to `0.30.0`
  421. * build(deps): bump `github.com/yuin/goldmark` from `1.7.4` to `1.7.8`
  422. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.20.37` to `2.21.1`
  423. * build(deps): bump `github.com/prometheus/client_golang`
  424. * build(deps): bump `github.com/andybalholm/brotli` from `1.1.0` to `1.1.1`
  425. Version 2.2.1 (September 28, 2024)
  426. ----------------------------------
  427. * refactor: split processor package into smaller files
  428. * fix(mediaproxy): forward client user-agent to origin to bypass bot protection
  429. * fix: use root URL to generate absolute proxy URL
  430. * fix: remove progression save on shared entry
  431. * fix: add datasource variable and upgrade depecrated panels on the Grafana dashboard
  432. * feat(locale): update zh_CN translations
  433. * feat(locale): update Ukrainian translations
  434. * feat(locale): update Spanish translations
  435. * feat(locale): update Dutch translations
  436. * feat: use Bilibili API instead of web scraping to get videos watch time
  437. * feat: add pagination to shared entries listing
  438. * feat: add button to show only starred entries per category
  439. * build(deps): bump `golang.org/x/term` from `0.23.0` to `0.24.0`
  440. * build(deps): bump `golang.org/x/oauth2` from `0.22.0` to `0.23.0`
  441. * build(deps): bump `golang.org/x/net` from `0.28.0` to `0.29.0`
  442. * build(deps): bump `github.com/PuerkitoBio/goquery` from `1.9.2` to `1.10.0`
  443. * build(deps): bump `github.com/prometheus/client_golang` from `1.20.3` to `1.20.4`
  444. * build(deps): bump `github.com/go-webauthn/webauthn` from `0.10.2` to `0.11.2`
  445. * build: update go.mod to Go 1.23
  446. * build: bump devcontainer version to go 1.23
  447. Version 2.2.0 (August 18, 2024)
  448. -------------------------------
  449. * refactor: simplify Youtube feeds discovery
  450. * fix(integration): define content encoding explicitly when sending article body to Readeck
  451. * fix(fever): correct sorting direction when using `max_id` argument
  452. * fix(client): Return `nil` and error if endpoint is an empty string
  453. * fix: video poster image URL is encoded twice when using `MEDIA_PROXY_MODE=all`
  454. * fix: use `BASE_URL` instead of `r.Host` to generate absolute media proxy URL
  455. * fix: panic during YouTube channel feed discovery
  456. * fix: honor `hide_globally` when creating a new feed through the api
  457. * fix: align pagination correctly on small screens with non-English text
  458. * fix: `store.GetEnclosure()` should return `nil` if no rows are returned
  459. * feat(locale): update Turkish translations
  460. * feat(locale): update French translations
  461. * feat(locale): update Chinese` translations
  462. * feat(integration): add ntfy integration
  463. * feat(api): add API routes `/v1/enclosures/{enclosureID}`
  464. * feat: validate `OAUTH2_PROVIDER` config option value
  465. * feat: remove YouTube video page subscription finder because `meta[itemprop="channelId"]` no longer exists
  466. * feat: remove well-known URL parameter trackers
  467. * feat: mark media as read when playback reaches 90%
  468. * feat: change log level to info when running migrations
  469. * feat: allow customizing the display name of the OpenID Connect provider
  470. * feat: add support for `base` HTML element when discovering feeds
  471. * feat: add support for `aside` HTML element in entry content
  472. * feat: Add option to disable local auth form
  473. * feat: add license info to Javascript files for LibreJS compatibility
  474. * feat: add `FETCH_BILIBILI_WATCH_TIME` config option
  475. * docs: update links to filtering rules
  476. * chore: avoid using legacy key/value format in Dockerfile
  477. * build(deps): bump `golang.org/x/oauth2` from `0.21.0` to `0.22.0`
  478. * build(deps): bump `golang.org/x/net` from `0.27.0` to `0.28.0`
  479. * build(deps): bump `golang.org/x/crypto` from `0.25.0` to `0.26.0`
  480. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.20.36` to `2.20.37`
  481. * build(deps): bump `github.com/prometheus/client_golang`
  482. * build: update GitHub Actions to Go 1.23
  483. * build: publish OCI images only if `PUBLISH_DOCKER_IMAGES=true`
  484. * build: bump Alpine Linux build image to v3.20
  485. * build: add sha256 checksum file for published binaries
  486. Version 2.1.4 (July 9, 2024)
  487. ----------------------------
  488. * test: add unit tests for `IsModified()` behaviour
  489. * refactor: improve YouTube page feed detection
  490. * fix(ui): settings form is not populated correctly after validation errors
  491. * fix(ui): playback speed indicator precision
  492. * fix(ui): playback speed indicator on shared entries
  493. * fix(integration): preserve existing Pinboard bookmarks
  494. * fix(googlereader): set `CrawlTimeMsec` to the correct precision
  495. * fix(build): failed to solve container image `arm64v8/golang:1.22-bookworm`
  496. * fix(build): add `distroless` suffix on `latest` tag in GitHub workflow
  497. * fix: use `ETag` as a stronger validator than `Last-Modified`
  498. * fix: update `theverge.com` rewrite rule to avoid duplicate image
  499. * fix: incorrect Go package comment `reader/readingtime`
  500. * fix: error out for improper rewrite regexp when processing feed entries
  501. * fix: ensures that session cookies are not expiring before the session is cleaned up from the database as per `CLEANUP_REMOVE_SESSIONS_DAYS`
  502. * fix: `<img>` aspect ratio with `height: auto`
  503. * feat(ui): add `viewport-fit=cover`
  504. * feat(sanitizer): add support for HTML hidden attribute
  505. * feat(locale): update French translations
  506. * feat(integration): add Raindrop integration
  507. * feat(integration): add feed name to Telegram message
  508. * feat(integration): add Betula integration
  509. * feat: use of insecure TLS ciphers when "Allow self-signed or invalid certificates" is enabled to workaround some broken websites
  510. * feat: discover feeds from a Youtube playlist pages
  511. * feat: add navigation to last/first page
  512. * feat: add global block and keep filters
  513. * feat: add description field to feed settings
  514. * feat: add `pitchfork.com` scraping rule
  515. * feat: add `FETCH_NEBULA_WATCH_TIME` config option
  516. * Bump `github.com/PuerkitoBio/goquery` from` 1.9.1` to` 1.9.2`
  517. * Bump `github.com/prometheus/client_golang` from `1.19.0` to `1.19.1`
  518. * build(deps): bump `library/alpine` in `/packaging/docker/alpine`
  519. * build(deps): bump `golangci/golangci-lint-action` from `4` to `6`
  520. * build(deps): bump `golang.org/x/term` from `0.19.0` to `0.22.0`
  521. * build(deps): bump `golang.org/x/oauth2` from `0.19.0` to `0.21.0`
  522. * build(deps): bump `golang.org/x/net` from `0.22.0` to `0.27.0`
  523. * build(deps): bump `golang.org/x/crypto` from `0.24.0` to `0.25.0`
  524. * build(deps): bump `github.com/yuin/goldmark` from `1.7.1` to `1.7.4`
  525. * build(deps): bump `github.com/tdewolff/minify/v2` from `2.20.20` to `2.20.36`
  526. * build(deps): bump `github.com/coreos/go-oidc/v3` from `3.10.0` to `3.11.0`
  527. * build(deps): bump `docker/build-push-action` from `5` to `6`
  528. Version 2.1.3 (April 27, 2024)
  529. ------------------------------
  530. * `api`: `rand.Intn(math.MaxInt64)` causes tests to fail on 32-bit architectures (use `rand.Int()` instead)
  531. * `ci`: use `docker/metadata-action` instead of deprecated shell-scripts
  532. * `database`: remove `entries_feed_url_idx` index because entry URLs can exceeds btree index size limit
  533. * `finder`: find feeds from YouTube playlist
  534. * `http/response`: add brotli compression support
  535. * `integration/matrix`: fix function name in comment
  536. * `packaging`: specify container registry explicitly (e.g., Podman does not use `docker.io` by default)
  537. * `packaging`: use `make miniflux` instead of duplicating `go build` arguments (this leverages Go's PIE build mode)
  538. * `reader/fetcher`: add brotli content encoding support
  539. * `reader/processor`: minimize feed entries HTML content
  540. * `reader/rewrite`: add a rule for `oglaf.com`
  541. * `storage`: change `GetReadTime()` function to use `entries_feed_id_hash_key` index
  542. * `ui`: add seek and speed controls to media player
  543. * `ui`: add tag entries page
  544. * `ui`: fix JavaScript error when clicking on unread counter
  545. * `ui`: use `FORCE_REFRESH_INTERVAL` config for category refresh
  546. * Bump `github.com/tdewolff/minify/v2` from `2.20.19` to `2.20.20`
  547. * Bump `golang.org/x/net` from `0.22.0` to `0.24.0`
  548. * Bump `golang.org/x/term` from `0.18.0` to `0.19.0`
  549. * Bump `golang.org/x/oauth2` from `0.18.0` to `0.19.0`
  550. * Bump `github.com/yuin/goldmark` from `1.7.0` to `1.7.1`
  551. Version 2.1.2 (March 30, 2024)
  552. ------------------------------
  553. * `api`: rewrite API integration tests without build tags
  554. * `ci`: add basic ESLinter checks
  555. * `ci`: enable go-critic linter and fix various issues detected
  556. * `ci`: fix JavaScript linter path in GitHub Actions
  557. * `cli`: avoid misleading error message when creating an admin user automatically
  558. * `config`: add `FILTER_ENTRY_MAX_AGE_DAYS` option
  559. * `config`: bump the number of simultaneous workers
  560. * `config`: rename `PROXY_*` options to `MEDIA_PROXY_*`
  561. * `config`: use `crypto.GenerateRandomBytes` instead of doing it by hand
  562. * `http/request`: refactor conditions to be more idiomatic
  563. * `http/response`: remove legacy `X-XSS-Protection` header
  564. * `integration/rssbrige`: fix rssbrige import
  565. * `integration/shaarli`: factorize the header+payload concatenation as data
  566. * `integration/shaarli`: no need to base64-encode then remove the padding when we can simply encode without padding
  567. * `integration/shaarli`: the JWT token was declared as using HS256 as algorithm, but was using HS512
  568. * `integration/webhook`: add category title to request body
  569. * `locale`: update Turkish translations
  570. * `man page`: sort config options in alphabetical order
  571. * `mediaproxy`: reduce the internal indentation of `ProxifiedUrl` by inverting some conditions
  572. * `mediaproxy`: simplify and refactor the package
  573. * `model`: replace` Optional{Int,Int64,Float64}` with a generic function `OptionalNumber()`
  574. * `model`: use struct embedding for `FeedCreationRequestFromSubscriptionDiscovery` to reduce code duplication
  575. * `reader/atom`: avoid debug message when the date is empty
  576. * `reader/atom`: change `if !a { a = } if !a {a = }` constructs into `if !a { a = ; if !a {a = }}` to reduce the number of comparisons and improve readability
  577. * `reader/atom`: Move the population of the feed's entries into a new function, to make BuildFeed easier to understand/separate concerns/implementation details
  578. * `reader/atom`: refactor Atom parser to use an adapter
  579. * `reader/atom`: use `sort+compact` instead of `compact+sort` to remove duplicates
  580. * `reader/atom`: when detecting the format, detect its version as well
  581. * `reader/encoding`: inline a one-liner function
  582. * `reader/handler`: fix force refresh feature
  583. * `reader/json`: refactor JSON Feed parser to use an adapter
  584. * `reader/media`: remove a superfluous error-check: `strconv.ParseInt` returns `0` when passed an empty string
  585. * `reader/media`: simplify switch-case by moving a common condition above it
  586. * `reader/processor`: compile block/keep regex only once per feed
  587. * `reader/rdf`: refactor RDF parser to use an adapter
  588. * `reader/rewrite`: inline some one-line functions
  589. * `reader/rewrite`: simplify `removeClickbait`
  590. * `reader/rewrite`: transform a free-standing function into a method
  591. * `reader/rewrite`: use a proper constant instead of a magic number in `applyFuncOnTextContent`
  592. * `reader/rss`: add support for `<media:category>` element
  593. * `reader/rss`: don't add empty tags to RSS items
  594. * `reader/rss`: refactor RSS parser to use a default namespace to avoid some limitations of the Go XML parser
  595. * `reader/rss`: refactor RSS Parser to use an adapter
  596. * `reader/rss`: remove some duplicated code in RSS parser
  597. * `reader`: ensure that enclosure URLs are always absolute
  598. * `reader`: move iTunes and GooglePlay XML definitions to their own packages
  599. * `reader`: parse podcast categories
  600. * `reader`: remove trailing space in `SiteURL` and `FeedURL`
  601. * `storage`: do not store empty tags
  602. * `storage`: simplify `removeDuplicates()` to use a `sort`+`compact` construct instead of doing it by hand with a hashmap
  603. * `storage`: Use plain strings concatenation instead of building an array and then joining it
  604. * `timezone`: make sure the tests pass when the timezone database is not installed on the host
  605. * `ui/css`: align `min-width` with the other `min-width` values
  606. * `ui/css`: fix regression: "Add to Home Screen" button is unreadable
  607. * `ui/js`: don't use lambdas to return a function, use directly the function instead
  608. * `ui/js`: enable trusted-types
  609. * `ui/js`: fix download button loading label
  610. * `ui/js`: fix JavaScript error on the login page when the user not authenticated
  611. * `ui/js`: inline one-line functions
  612. * `ui/js`: inline some `querySelectorAll` calls
  613. * `ui/js`: reduce the scope of some variables
  614. * `ui/js`: remove a hack for "Chrome 67 and earlier" since it was released in 2018
  615. * `ui/js`: replace `DomHelper.findParent` with `.closest`
  616. * `ui/js`: replace `let` with `const`
  617. * `ui/js`: simplify `DomHelper.getVisibleElements` by using a `filter` instead of a loop with an index
  618. * `ui/js`: use a `Set` instead of an array in a `KeyboardHandler`'s member
  619. * `ui/js`: use some ternaries where it makes sense
  620. * `ui/static`: make use of `HashFromBytes` everywhere
  621. * `ui/static`: set minifier ECMAScript version
  622. * `ui`: add keyboard shortcuts for scrolling to top/bottom of the item list
  623. * `ui`: add media player control playback speed
  624. * `ui`: remove unused variables and improve JSON decoding in `saveEnclosureProgression()`
  625. * `validator`: display an error message on edit feed page when the feed URL is not unique
  626. * Bump `github.com/coreos/go-oidc/v3` from `3.9.0` to `3.10.0`
  627. * Bump `github.com/go-webauthn/webauthn` from `0.10.1` to `0.10.2`
  628. * Bump `github.com/tdewolff/minify/v2` from `2.20.18` to `2.20.19`
  629. * Bump `google.golang.org/protobuf` from `1.32.0` to `1.33.0`
  630. Version 2.1.1 (March 10, 2024)
  631. -----------------------------
  632. * Move search form to a dedicated page
  633. * Add Readeck integration
  634. * Add feed option to disable HTTP/2 to avoid fingerprinting
  635. * Add `Enter` key as a hotkey to open selected item
  636. * Proxify `video` element `poster` attribute
  637. * Add a couple of new possible locations for feeds
  638. * Hugo likes to generate `index.xml`
  639. * `feed.atom` and `feed.rss` are used by enterprise-scale/old-school gigantic CMS
  640. * Fix categories import from Thunderbird's OPML
  641. * Fix logo misalignment when using languages that are more verbose than English
  642. * Google Reader: Do not return a 500 error when no items is returned
  643. * Handle RDF feeds with duplicated `<title>` elements
  644. * Sort integrations alphabetically
  645. * Add more URL validation in media proxy
  646. * Add unit test to ensure each translation has the correct number of plurals
  647. * Add missing plurals for some languages
  648. * Makefile: quiet `git describe` and `rev-parse` stderr: When building from a tarball instead of a cloned git repo, there would be two `fatal: not a git repository` errors emitted even though the build succeeds. This is because of how `VERSION` and `COMMIT` are set in the Makefile. This PR suppresses the stderr for these variable assignments.
  649. * Makefile: do not force `CGO_ENABLED=0` for `miniflux` target
  650. * Add GitHub Action pipeline to build packages on-demand
  651. * Remove Golint (deprecated), use `staticcheck` and `golangci-lint` instead
  652. * Build amd64/arm64 Debian packages with CGO disabled
  653. * Update `go.mod` and add `.exe` suffix to Windows binary
  654. * Add a couple of fuzzers
  655. * Fix CodeQL workflow
  656. * Code and performance improvements:
  657. * Use an `io.ReadSeeker` instead of an `io.Reader` to parse feeds
  658. * Speed up the sanitizer:
  659. - Allow Youtube URLs to start with `www`
  660. - Use `strings.Builder` instead of a `bytes.Buffer`
  661. - Use a `strings.NewReader` instead of a `bytes.NewBufferString`
  662. - Sprinkles a couple of `continue` to make the code-flow more obvious
  663. - Inline calls to `inList`, and put their parameters in the right order
  664. - Simplify `isPixelTracker`
  665. - Simplify `isValidIframeSource`, by extracting the hostname and comparing it directly, instead of using the full url and checking if it starts with multiple variations of the same one (`//`, `http:`, `https://` multiplied by `/www.`)
  666. - Add a benchmark
  667. - Instead of having to allocate a ~100 keys map containing possibly dynamic values (at least to the go compiler), allocate it once in a global variable. This significantly speeds things up, by reducing the garbage
  668. - Use constant time access for maps instead of iterating on them
  669. - Build a ~large whitelist map inline instead of constructing it item by item (and remove a duplicate key/value pair)
  670. - Use `slices` instead of hand-rolled loops
  671. collector/allocator involvements.
  672. * Reuse a `Reader` instead of copying to a buffer when parsing an Atom feed
  673. * Preallocate memory when exporting to OPML: This should marginally increase performance when exporting a large amount of feeds to OPML
  674. * Delay call of `view.New` after logging the user in: There is no need to do extra work like creating a session and its associated view until the user has been properly identified and as many possibly-failing sql request have been successfully run
  675. * Use constant-time comparison for anti-csrf tokens: This is probably completely overkill, but since anti-csrf tokens are secrets, they should be compared against untrusted inputs in constant time
  676. * Simplify and optimize `genericProxyRewriter`
  677. - Reduce the amount of nested loops: it's preferable to search the whole page once and filter on it (even with filters that should always be false), than searching it again for every element we're looking for.
  678. - Factorize the proxying conditions into a `shouldProxy` function to reduce the copy-pasta.
  679. * Speed up `removeUnlikelyCandidates`: `.Not` returns a brand new `Selection`, copied element by element
  680. * Improve `EstimateReadingTime`'s speed by a factor 7
  681. - Refactorise the tests and add some
  682. - Use 250 signs instead of the whole text
  683. - Only check for Korean, Chinese and Japanese script
  684. - Add a benchmark
  685. - Use a more idiomatic control flow
  686. * Don't compute reading-time when unused: If the user doesn't display reading times, there is no need to compute them. This should speed things up a bit, since `whatlanggo.Detect` is abysmally slow.
  687. * Simplify `username` generation for the integration tests: No need to generate random numbers 10 times, generate a single big-enough one. A single int64 should be more than enough
  688. * Add missing regex anchor detected by CodeQL
  689. * Don't mix up slices capacity and length
  690. * Use prepared statements for intervals, `ArchiveEntries` and `updateEnclosures`
  691. * Use modern for-loops introduced with Go 1.22
  692. * Remove a superfluous condition: No need to check if the length of `line` is positive since we're checking afterwards that it contains the `=` sign
  693. * Close resources as soon as possible, instead of using `defer()` in a loop
  694. * Remove superfluous escaping in a regex
  695. * Use `strings.ReplaceAll` instead of `strings.Replace(…, -1)`
  696. * Use `strings.EqualFold` instead of `strings.ToLower(…) ==`
  697. * Use `.WriteString(` instead of `.Write([]byte(…`
  698. * Use `%q` instead of `"%s"`
  699. * Make `internal/worker/worker.go` read-only
  700. * Use a switch-case construct in `internal/locale/plural.go` instead of an avalanche of `if`
  701. * Template functions: simplify `formatFileSize` and `duration` implementation
  702. * Inline some templating functions
  703. * Make use of `printer.Print` when possible
  704. * Add a `printer.Print` to `internal/locale/printer.go`: No need to use variadic functions with string format interpolation to generate static strings
  705. * Minor code simplification in `internal/ui/view/view.go`: No need to create the map item by item when we can create it in one go
  706. * Build the map inline in `CountAllFeeds()`: No need to build an empty map to then add more fields in it one by one
  707. * Miscellaneous improvements to `internal/reader/subscription/finder.go`:
  708. - Surface `localizedError` in `FindSubscriptionsFromWellKnownURLs` via `slog`
  709. - Use an inline declaration for new subscriptions, like done elsewhere in the
  710. file, if only for consistency's sake
  711. - Preallocate the `subscriptions` slice when using an RSS-bridge,
  712. * Use an update-where for `MarkCategoryAsRead` instead of a subquery
  713. * Simplify `CleanOldUserSessions`' query: No need for a subquery, filtering on `created_at` directly is enough
  714. * Simplify `cleanupEntries`' query
  715. - `NOT (hash=ANY(%4))` can be expressed as `hash NOT IN $4`
  716. - There is no need for a subquery operating on the same table, moving the conditions out is equivalent.
  717. * Reformat `ArchiveEntries`'s query for consistency's sake and replace the `=ANY` with an `IN`
  718. * Reformat the query in `GetEntryIDs` and `GetReadTime`'s query for consistency's sake
  719. * Simplify `WeeklyFeedEntryCount`: No need for a `BETWEEN`: we want to filter on entries published in the last week, no need to express is as "entries published between now and last week", "entries published after last week" is enough
  720. * Add some tests for `add_image_title`
  721. * Remove `github.com/google/uuid` dependencies: Replace it with a hand-rolled implementation. Heck, an UUID isn't even a requirement according to Omnivore API docs
  722. * Simplify `internal/reader/icon/finder.go`:
  723. - Use a simple regex to parse data uri instead of a hand-rolled parser, and document what fields are considered mandatory.
  724. - Use case-insensitive matching to find (fav)icons, instead of doing the same query twice with different letter cases
  725. - Add `apple-touch-icon-precomposed.png` as a fallback `favicon`
  726. - Reorder the queries to have `icon` first, since it seems to be the most popular one. It used to be last, meaning that pages had to be parsed completely 4 times, instead of one now.
  727. - Minor factorisation in `findIconURLsFromHTMLDocument`
  728. * Small refactoring of `internal/reader/date/parser.go`:
  729. - Split dates formats into those that require local times and those who don't, so that there is no need to have a switch-case in the for loop with around 250 iterations at most.
  730. - Be more strict when it comes to timezones, previously invalid ones like -13 were accepted. Also add a test for this.
  731. - Bail out early if the date is an empty string.
  732. * Make use of Go ≥ 1.21 slices package instead of hand-rolled loops
  733. * Reorder the fields of the `Entry` struct to save some memory
  734. * Dependencies update:
  735. * Bump `golang.org/x/oauth2` from `0.17.0` to `0.18.0`
  736. * Bump `github.com/prometheus/client_golang` from `1.18.0` to `1.19.0`
  737. * Bump `github.com/tdewolff/minify/v2` from `2.20.16` to `2.20.18`
  738. * Bump `github.com/PuerkitoBio/goquery` from `1.8.1` to `1.9.1`
  739. * Bump `golang.org/x/crypto` from `0.19.0` to `0.20.0`
  740. * Bump `github.com/go-jose/go-jose/v3` from `3.0.1` to `3.0.3`
  741. Version 2.1.0 (February 17, 2024)
  742. ---------------------------------
  743. * Add Linkwarden integration
  744. * Add LinkAce integration
  745. * Add `FORCE_REFRESH_INTERVAL` config option
  746. * Add `item-meta-info-reading-time` CSS class
  747. * Add `add_dynamic_iframe` rewrite function
  748. * Add attribute `data-original-mos` to `add_dynamic_image` rewrite candidates
  749. * Update entry processor to allow blocking/keeping entries by tags and/or authors
  750. * Change default `Accept` header when fetching feeds
  751. * Rewrite relative RSS Bridge URL to absolute URL
  752. * Use numeric user ID in Alpine and distroless container image (avoid `securityContext` error in Kubernetes)
  753. * Always try to use HTTP/2 when fetching feeds if available
  754. * Add `type` attribute in OPML export as per OPML 2.0 specs
  755. * Fix missing translation argument for the key `error.unable_to_parse_feed`
  756. * Fix Debian package builder when using Go 1.22 and `armhf` architecture
  757. * Fix typo in log message
  758. * Fix incorrect label shown when saving an article
  759. * Fix incorrect condition in refresh feeds cli
  760. * Fix incorrect label `for` attribute
  761. * Add missing label ID for custom CSS field
  762. * Accessibility improvements:
  763. * Add workaround for macOS VoiceOver that didn't announce `details` and `summary` when expanded
  764. * Add `alert` role to alert message element
  765. * Add a `h2` heading to the article element so that the screen reader users can navigate the article through the heading level
  766. * Add an `aria-label` attribute for the article element for screen readers
  767. * Remove the icon image `alt` attribute in feeds list to prevent screen reader to announce it before entry title
  768. * Add `sr-only` CSS class for screen reader users (provides more context)
  769. * Differentiate between buttons and links
  770. * Change links that could perform actions to buttons
  771. * Improve translation of hidden Aria elements
  772. * Remove the redundant article role
  773. * Add a search landmark for the search form so that the screen reader users can navigate to it
  774. * Add skip to content link
  775. * Add `nav` landmark to page header links
  776. * Limit feed/category entry pagination to unread entries when coming from unread entry list
  777. * Update German translation
  778. * Update GitHub Actions to Go 1.22
  779. * Bump `golang.org/x/term` from `0.16.0` to `0.17.0`
  780. * Bump `github.com/google/uuid` from `1.5.0` to `1.6.0`
  781. * Bump `github.com/yuin/goldmark` from `1.6.0` to `1.7.0`
  782. * Bump `golang.org/x/oauth2` from `0.15.0` to `0.17.0`
  783. * Bump `github.com/tdewolff/minify/v2` from `2.20.10` to `2.20.12`
  784. * Bump `golang.org/x/term` from `0.15.0` to `0.16.0`
  785. * Bump `github.com/prometheus/client_golang` from `1.17.0` to `1.18.0`
  786. * Bump `github.com/tdewolff/minify/v2` from `2.20.9` to `2.20.16`
  787. * Bump `golang.org/x/crypto` from `0.16.0` to `0.19.0`
  788. * Bump `github.com/go-webauthn/webauthn` from `0.9.4` to` 0.10.1`
  789. * Bump `golang.org/x/net` from `0.20.0` to `0.21.0`
  790. Version 2.0.51 (December 13, 2023)
  791. ----------------------------------
  792. * Add Omnivore integration
  793. * Fixes for the regressions introduced in version 2.0.50:
  794. * Ensure all HTML documents are encoded in UTF-8
  795. * Send default User-Agent and HTTP caching headers when making HTTP requests
  796. * Allow Youtube links to be opened outside the `iframe` (avoid `ERR_BLOCKED_BY_RESPONSE` error)
  797. * Fix inaccessible metrics endpoint when listening on Unix socket
  798. * Allow renaming and moving feed at the same time in the Google Reader API
  799. * Log `nb_jobs` only when number of jobs is larger than 0 in background scheduler
  800. * Deduplicate feed URLs when parsing HTML document during discovery process
  801. * Calculate a virtual weekly count based on the average updating frequency (`POLLING_SCHEDULER=entry_frequency`)
  802. * Update GitHub Actions workflow to be able to run the linter and tests on-demand
  803. * Add `SCHEDULER_ROUND_ROBIN_MIN_INTERVAL` config option
  804. * Add links to GitHub for the commit hash and the version in the about page
  805. * Use "starred" rather than "bookmarked" in English translation
  806. * Update Chinese (CN & TW) translation
  807. * Bump `github.com/google/uuid` from `1.4.0` to `1.5.0`
  808. * Bump `github.com/coreos/go-oidc/v3` from `3.7.0` to `3.9.0`
  809. * Bump `github.com/tdewolff/minify/v2` from `2.20.6` to `2.20.9`
  810. * Bump `github.com/go-webauthn/webauthn` from `0.8.6` to `0.9.4`
  811. * Bump `golang.org/x/oauth2` from `0.14.0` to `0.15.0`
  812. Version 2.0.50 (November 12, 2023)
  813. ----------------------------------
  814. * Add WebAuthn / Passkey integration
  815. * Add RSS-Bridge integration
  816. * Take RSS TTL field into consideration to schedule next check date
  817. * Show number of visible entries instead of number of read entries in feed list
  818. * OpenID Connect: Redirect to configured user home page after successful authentication
  819. * Google Reader API fixes:
  820. * `user/{userID}/state/com.google/read` is missing in categories section for read entries
  821. * Take `ExcludeTargets` into consideration in feed stream handler
  822. * Allow iframes pointing to Twitch videos
  823. * Filter feed entries based on URL or title
  824. * Take into consideration `hide_globally` property defined for categories in `/v1/entries` API endpoint
  825. * Add category ID to webhooks request body
  826. * Update date parser to parse more invalid date formats
  827. * Refactor feed discovery handler, and avoid an extra HTTP request if the URL provided is the feed
  828. * Refactor HTTP Client and `LocalizedError` packages
  829. * Refactor Batch Builder, and prevent accidental and excessive refreshes from the web UI
  830. * Refactor icon finder:
  831. - Continue the discovery process when the feed icon is invalid
  832. - Search all icons from the HTML document and do not stop on the first one
  833. * Add support for SVG icons with data URL without encoding
  834. * Expose `next_check_at` in the web ui and API
  835. * Add database indexes to improve performance
  836. * Change log level to warning for failed feeds refresh in cronjob
  837. * Do not log website without icon as warning
  838. * Add GitHub workflow to build binaries
  839. * Add GitHub extensions to devcontainer
  840. * Make sure to pull the latest base image when building the Docker image
  841. * Strip version prefix when building Debian package
  842. * Add `github-cli` and `docker-outside-of-docker` features to devcontainer
  843. * Bump `golang.org/x/*` dependencies
  844. * Bump `github.com/gorilla/mux` from `1.8.0` to `1.8.1`
  845. * Bump `github.com/tdewolff/minify/v2` from `2.19.9` to `2.20.6`
  846. * Bump `github.com/yuin/goldmark` from `1.5.6` to `1.6.0`
  847. * Bump `github.com/coreos/go-oidc/v3` from `3.6.0` to `3.7.0`
  848. Version 2.0.49 (October 15, 2023)
  849. ---------------------------------
  850. * Implement structured logging using `log/slog` package. New config options available:
  851. * `LOG_FORMAT`: `json` or `text`
  852. * `LOG_LEVEL`: `debug`, `info`, `warning`, or `error`
  853. * `LOG_FILE`: `sdterr`, `stdout`, or a file path
  854. * The `DEBUG` option is now deprecated in favor of `LOG_LEVEL`
  855. * API Improvements:
  856. * Add endpoint `/v1/version`
  857. * Add endpoint `PUT /v1/entries` to update entry title and content
  858. * Add endpoint `/v1/icons/{iconID}`
  859. * Add endpoint `/v1/flush-history` to flush history
  860. * Make the category optional when creating feeds for API clients who don't support categories
  861. * Add enclosures to `GET /v1/entries` endpoint
  862. * Add `published_after`, `published_before`, `changed_after` and `changed_before` options to `/v1/entries` endpoint
  863. * Telegram integration improvements:
  864. * Replace feed HTML link with a button to avoid page preview issues
  865. * Add the possibility to disable buttons
  866. * Add Bruno Miniflux API collection in `contrib` folder (Bruno is an open source alternative to Postman/Insomnia)
  867. * Add command line argument to export user feeds as OPML
  868. * Add new rewrite rules `add_hn_links_using_hack` and `add_hn_links_using_opener` to open HN comments with iOS apps
  869. * Fix timestamp format for `Expires` response header
  870. * Fix Javascript error when reading time option is disabled
  871. * Fix Apprise logic to handle feed service URLs
  872. * Fix missing word in force refresh message
  873. * Remove deprecated `PreferServerCipherSuites` TLS option
  874. * Replace `github.com/rylans/getlang` with `github.com/abadojack/whatlanggo` because `getlang` doesn't seems to be updated anymore
  875. * Bump `github.com/mccutchen/go-httpbin/v2` from `2.11.0` to `2.11.1`
  876. * Bump `golang.org/x/*` dependencies
  877. Version 2.0.48 (September 15, 2023)
  878. -----------------------------------
  879. * Add generic webhook integration
  880. * Send webhook events when new entries are detected
  881. * Send wehbook events when saving an entry
  882. * Sign the outgoing requests with HMAC-SHA256
  883. * Improve Telegram integration
  884. * Add built-in Telegram client
  885. * Remove dependency on `go-telegram-bot-api` library
  886. * Add new options:
  887. * Optional topic ID
  888. * Disable page preview
  889. * Disable notifications
  890. * Add new button to go to article
  891. * Improve Matrix integration
  892. * Add built-in Matrix client
  893. * Remove dependency on `gomatrix` library
  894. * Send HTML formatted messages to Matrix
  895. * OpenID Connect authentication improvements:
  896. * Add OAuth2 PKCE support
  897. * Add `profile` scope to OIDC integration to support accounts without email address
  898. * Prevent empty username when using the OIDC integration
  899. * Add `factor` for `entry_frequency` scheduler:
  900. * Allow the user to increase the frequency of the `entry_frequency`
  901. scheduler by a configurable factor in order to shorten the time between
  902. updates.
  903. * Fix: status bar is unreadable when using PWA in dark mode on Firefox Android
  904. * Group form fields into fieldsets to improve page layout
  905. * Update Russian translation
  906. * Make sure icon URLs are always absolute
  907. * Add Apprise service URLs per feed
  908. * Trim `username` and `password` form fields
  909. * Strip HTML tags from DublinCore Creator tags
  910. * Fix scroll up behavior on Firefox Android
  911. * Add missing `return` statement in `fetchContent` UI handler
  912. * Add `replace_title` rewrite rule to adjust entry titles
  913. * Fix Pocket integration redirect URL and Google Reader API HREF
  914. * Fix feed `hide_globally` property to use it with third-party clients.
  915. Version 2.0.47 (August 20, 2023)
  916. --------------------------------
  917. * Update rules for `webtoons.com`
  918. * Use HTTP client from the standard library for third-party integrations
  919. * Rename internal `url` package to `urllib` to avoid overlap with `net/url`
  920. * Add Shaarli integration
  921. * Add Shiori integration
  922. * Add Apprise integration
  923. * Add Readwise Reader integration
  924. * Consider base path when generating third-party services API endpoint
  925. * Use podcast duration tag as reading time
  926. * Move internal packages to an `internal` folder
  927. * For reference: <https://go.dev/doc/go1.4#internalpackages>
  928. * Rename Miniflux package name to follow Go module naming convention
  929. * For reference: <https://go.dev/ref/mod#major-version-suffixes>
  930. * Update RockyLinux image from 8 to 9 (used to build RPM package)
  931. * Add force refresh in feed edit and feed entries page
  932. * Use Odysee video duration as read time
  933. * Upgrade to Go 1.21
  934. * Use details disclosure element to show the list of third-party services
  935. * Use Web Share API for sharing entry
  936. * Add a workaround for parsing some invalid date format
  937. * Add Thunder Client API collection into contrib folder
  938. * Add new API endpoint: `/entries/{entryID}/save`
  939. * Trigger Docker and packages workflows only for semantic tags
  940. * Go module versioning expect Git tags to start with the letter v.
  941. * The goal is to keep the existing naming convention for generated artifacts and
  942. have proper versioning for the Go module.
  943. * Bump `golang.org/x/*` dependencies
  944. * Bump `github.com/yuin/goldmark`
  945. * Bump `github.com/tdewolff/minify/v2`
  946. * Bump `github.com/mccutchen/go-httpbin/v2`
  947. Version 2.0.46 (July 21, 2023)
  948. ------------------------------
  949. * Add scraper and rewrite rules for Webtoons
  950. * Fix regression in integration page and simplify SQL query
  951. * Wallabag integration: add more information in log messages
  952. * Add support for custom Youtube embed URL
  953. * Fix accessibility issues in modal component
  954. * Fix modal aria role
  955. * Trap focusing with tab / shift+tab inside the modal
  956. * Restore keyboard focus when closing modal
  957. * Automatically move keyboard focus to first focusable element unless specified otherwise
  958. * Keyboard shortcut help modal: move keyboard focus to modal title
  959. * Keyboard shortcut help modal: change close control from link to button
  960. * Add Notion integration
  961. * Update `golang.org/x/*` dependencies and `go-oidc` to v3.6.0
  962. * Improve responsive design
  963. * Add user setting for marking entry as read on view
  964. * Improve Russian translation
  965. * Add the possibility to run cleanup tasks from the command line
  966. * Add the possibility to run Miniflux as a cronjob
  967. * Use `go-httpbin` to run tests locally and avoid remote calls to `httpbin.org`
  968. * Display tags when viewing entries
  969. * Update categories API endpoint to return `total_unread` and `feed_count`
  970. * Improve date parser to handle various broken date formats
  971. * Avoid `pq: time zone displacement out of range` errors
  972. * Improve entry existance check to make better use of index
  973. * Add unique index `enclosures_user_entry_url_idx`
  974. * Add mark as unread for Linkding integration
  975. * Add sub-folder support for Wallabag integration
  976. * Use RockyLinux to build RPM package
  977. * Disable CGO when building RPM package
  978. * Disable CGO when building Docker images
  979. Version 2.0.45 (June 21, 2023)
  980. ------------------------------
  981. * Add media player to listen to audio and video podcasts with the possiblity to resume to last playback position
  982. * Add default tag names for Linkding integration
  983. * Mark only globally visible entries when marking all entries from UI
  984. * Use image included in feed as feed icon when available
  985. * Order history by `changed_at` and `published_at`
  986. * Remove title attribute from entry title links
  987. * Fix reading time that is not aligned correctly with the latest version of Safari
  988. * Use glyphs of the same size on keyboard shortcuts page
  989. * Add maskable versions of the PWA icon
  990. * Replace copyright header with SPDX identifier
  991. * Remove the "í" letter from the Portuguese "lido" word
  992. * Increase golangci-lint timeout value
  993. * Bump `github.com/tdewolff/minify/v2`, `github.com/prometheus/client_golang`, `golang.org/x/*` dependencies
  994. Version 2.0.44 (May 6, 2023)
  995. ----------------------------
  996. * Add link to the URL rewrite rules documentation
  997. * Update scraping rules for `ilpost.it`
  998. * Update rewrite rules for `theverge.com`
  999. * Add a rewrite rule to remove clickbait titles
  1000. * Make sure `PROXY_IMAGES` option is backward compatible with `PROXY_OPTION` and `PROXY_MEDIA_TYPES`
  1001. * Add new rule to remove tables
  1002. * Add support for searching well-known URLs in subdirectory
  1003. * Add CSS `word-wrap` rule to break very long entry title into multiple lines
  1004. * Add swipe as option for gesture navigation between entries. There are now 3 possible choices: `none`, `double-tap`, and `swipe`.
  1005. * Prefer typographic punctuation in English translation
  1006. * Process older entries first:
  1007. - Feed entries are usually ordered from most to least recent.
  1008. - Processing older entries first ensures that their creation timestamp
  1009. is lower than that of newer entries.
  1010. - This is useful when we order by creation, because then we get a
  1011. consistent timeline.
  1012. * Fix Grafana dashboard
  1013. * Push Docker images to `Quay.io` (RedHat)
  1014. * Bump `golang.org/x/*`, `github.com/lib/pq`, `mvdan.cc/xurls/v2` and `github.com/prometheus/client_golang` dependencies
  1015. Version 2.0.43 (March 16, 2023)
  1016. -------------------------------
  1017. * Avoid XSS when opening a broken image due to unescaped ServerError in proxy handler (CVE-2023-27592)
  1018. Creating an RSS feed item with the inline description containing an `<img>` tag
  1019. with a `srcset` attribute pointing to an invalid URL like
  1020. `http:a<script>alert(1)</script>`, we can coerce the proxy handler into an error
  1021. condition where the invalid URL is returned unescaped and in full.
  1022. This results in JavaScript execution on the Miniflux instance as soon as the
  1023. user is convinced to open the broken image.
  1024. * Use `r.RemoteAddr` to check `/metrics` endpoint network access (CVE-2023-27591)
  1025. HTTP headers like `X-Forwarded-For` or `X-Real-Ip` can be easily spoofed. As
  1026. such, it cannot be used to test if the client IP is allowed.
  1027. The recommendation is to use HTTP Basic authentication to protect the
  1028. metrics endpoint, or run Miniflux behind a trusted reverse-proxy.
  1029. * Add HTTP Basic authentication for `/metrics` endpoint
  1030. * Add proxy support for several media types
  1031. * Parse feed categories from RSS, Atom and JSON feeds
  1032. * Ignore empty link when discovering feeds
  1033. * Disable CGO explicitly to make sure the binary is statically linked
  1034. * Add CSS classes to differentiate between category/feed/entry view and icons
  1035. * Add rewrite and scraper rules for `blog.cloudflare.com`
  1036. * Add `color-scheme` to themes
  1037. * Add new keyboard shortcut to toggle open/close entry attachments section
  1038. * Sanitizer: allow `id` attribute in `<sup>` element
  1039. * Add Indonesian Language
  1040. * Update translations
  1041. * Update Docker Compose examples:
  1042. - Run the application in one command
  1043. - Bring back the health check condition to `depends_on`
  1044. - Remove deprecated `version` element
  1045. * Update scraping rules for `ilpost.it`
  1046. * Bump `github.com/PuerkitoBio/goquery` from `1.8.0` to `1.8.1`
  1047. * Bump `github.com/tdewolff/minify/v2` from `2.12.4` to `2.12.5`
  1048. * Bump `github.com/yuin/goldmark` from `1.5.3` to `1.5.4`
  1049. * Bump `golang.org/x/*` dependencies
  1050. Version 2.0.42 (January 29, 2023)
  1051. ---------------------------------
  1052. * Fix header items wrapping
  1053. * Add option to enable or disable double tap
  1054. * Improve PWA display mode label in settings page
  1055. * Bump `golang.org/x/*` dependencies
  1056. * Update translations
  1057. * Add scraping rule for `ilpost.it`
  1058. * Update reading time HTML element after fetching the original web page
  1059. * Add category feeds refresh feature
  1060. Version 2.0.41 (December 10, 2022)
  1061. ----------------------------------
  1062. * Reverted PR #1290 (follow the only link) because it leads to several panics/segfaults that prevent feed updates
  1063. * Disable double-tap mobile gesture if swipe gesture is disabled
  1064. * Skip integrations if there are no entries to push
  1065. * Enable TLS-ALPN-01 challenge for ACME
  1066. - This type of challenge works purely at the TLS layer and is compatible
  1067. with SNI proxies. The existing HTTP-01 challenge support has been left
  1068. as-is.
  1069. * Preconfigure Miniflux for GitHub Codespaces
  1070. * Updated `golang.org/x/net/*` dependencies
  1071. Version 2.0.40 (November 13, 2022)
  1072. ----------------------------------
  1073. * Update dependencies
  1074. * Pin Postgres image version in Docker Compose examples to avoid unexpected upgrades
  1075. * Make English and Spanish translation more consistent:
  1076. - Use "Feed" everywhere instead of "Subscription"
  1077. - Use "Entry" instead of "Article"
  1078. * Allow Content-Type and Accept headers in CORS policy
  1079. * Use dirs file for Debian package
  1080. * Use custom home page in PWA manifest
  1081. * Fix scraper rule that could be incorrect when there is a redirect
  1082. * Improve web scraper to fetch the only link present as workaround to some landing pages
  1083. * Add Matrix bot integration
  1084. * Proxify images in API responses
  1085. * Add new options in user preferences to configure sorting of entries in the category page
  1086. * Remove dependency on `github.com/mitchellh/go-server-timing`
  1087. * Add support for the `continuation` parameter and result for Google Reader API ID calls
  1088. * Use automatic variable for build target file names
  1089. * Add rewrite rule for `recalbox.com`
  1090. * Improve Dutch translation
  1091. Version 2.0.39 (October 16, 2022)
  1092. ---------------------------------
  1093. * Add support for date filtering in Google Reader API item ID calls
  1094. * Handle RSS entries with only a GUID permalink
  1095. * Go API Client: Accept endpoint URLs ending with `/v1/`
  1096. * CORS API headers: Allow `Basic` authorization header
  1097. * Log feed URL when submitting a subscription that returns an error
  1098. * Update `make run` command to execute migrations automatically
  1099. * Add option to send only the URL to Wallabag
  1100. * Do not convert anchors to absolute links
  1101. * Add config option to use a custom image proxy URL
  1102. * Allow zoom on mobile devices
  1103. * Add scraping rules for `theverge.com`, `royalroad.com`, `swordscomic.com`, and `smbc-comics.com`
  1104. * Add Ukrainian translation
  1105. * Update `golang.org/x/*` dependencies
  1106. * Bump `github.com/tdewolff/minify/v2` from `2.12.0` to `2.12.4`
  1107. * Bump `github.com/yuin/goldmark` from `1.4.13` to `1.5.2`
  1108. * Bump `github.com/lib/pq` from `1.10.6` to `1.10.7`
  1109. Version 2.0.38 (August 13, 2022)
  1110. --------------------------------
  1111. * Rename default branch from master to main
  1112. * Update GitHub Actions
  1113. * Bump `github.com/prometheus/client_golang` from `1.12.2` to `1.13.0`
  1114. * Fix some linter issues
  1115. * Handle Atom links with a text/html type defined
  1116. * Add `parse_markdown` rewrite function
  1117. * Build RPM and Debian packages automatically using GitHub Actions
  1118. * Add `explosm.net` scraper rule
  1119. * Make default home page configurable
  1120. * Add title attribute to entry links because text could be truncated
  1121. * Highlight categories with unread entries
  1122. * Allow option to order by title and author in API entry endpoint
  1123. * Update Russian translation
  1124. * Make reading speed user-configurable
  1125. * Added translation for Hindi language used in India
  1126. * Add rewrite rules for article URL before fetching content
  1127. * Bump `github.com/tdewolff/minify/v2` from `2.11.7` to `2.12.0`
  1128. * Support other repo owners in GitHub Docker Action
  1129. * Proxify empty URL should not crash
  1130. * Avoid stretched image if specified width is larger than Miniflux's layout
  1131. * Add support for OPML files with several nested outlines
  1132. * sanitizer: handle image URLs in `srcset` attribute with comma
  1133. * Allow `width` and `height` attributes for `img` tags
  1134. * Document that `-config-dump` command line argument shows sensitive info
  1135. * Add System-V init service in contrib folder
  1136. * Fix syntax error in `RequestBuilder.getCsrfToken()` method
  1137. Version 2.0.37 (May 27, 2022)
  1138. -----------------------------
  1139. * Add rewrite rule to decode base64 content
  1140. * Add Linkding integration
  1141. * Add comment button to Telegram message
  1142. * Add API endpoint to fetch unread and read counters
  1143. * Fixes logic bug in Google Reader API sanity check
  1144. * Reduce number of CORS preflight check to save network brandwidth
  1145. * Add Espial integration
  1146. * Allow API search for entries which are not starred
  1147. * Try to use outermost element text when title is empty
  1148. * Make swipe gestures feel more natural
  1149. - Removes opacity transition when swiping an article read/unread
  1150. - Adds "resistance" to the swiped entry when the 75px threshold is
  1151. reached
  1152. - Fixes an issue in which a swiped article couldn't be moved <15px
  1153. * Add support for feed streams to Google Reader API IDs API
  1154. * Fix invalid parsing of icon data URL
  1155. * Add Traditional Chinese translation
  1156. * Add distroless Docker image variant
  1157. * Add Go 1.18 to GitHub Action
  1158. * Bump `github.com/tdewolff/minify/v2` from `2.10.0` to `2.11`
  1159. * Bump `github.com/prometheus/client_golang` from `1.12.1` to `1.12.2`
  1160. * Bump `github.com/lib/pq` from `1.10.4` to `1.10.6`
  1161. Version 2.0.36 (March 8, 2022)
  1162. ------------------------------
  1163. * Gray out pagination buttons when they are not applicable
  1164. * Use truncated entry description as title if unavailable
  1165. * Do not fallback to InnerXML if XHTML title is empty
  1166. * Add `+` keyboard shortcut for new subscription page
  1167. * Add `(+)` action next to Feeds to quickly add new feeds
  1168. * Fix unstar not working via Google Reader API
  1169. * Remove circles in front of page header list items
  1170. * Fix CSS hover style for links styled as buttons
  1171. * Avoid showing `undefined` when clicking on read/unread
  1172. * Add new keyboard shortcut `M` to toggle read/unread, and go to previous item
  1173. * Add several icons to menus according to their roles
  1174. * Add missing event argument to `onClick()` function call
  1175. * Add links to scraper/rewrite/filtering docs when editing feeds
  1176. * Add a rewrite rule for Castopod episodes
  1177. * Fix regression: reset touch-item if not in `/unread` page
  1178. * Add API endpoint to fetch original article
  1179. * Show the category first in feed settings
  1180. * Add pagination on top of all entries
  1181. * Display Go version in "About" page
  1182. * Bump `mvdan.cc/xurls/v2` from 2.3.0 to 2.4.0
  1183. * Bump `github.com/prometheus/client_golang` from 1.11.0 to 1.12.1
  1184. * Bump `github.com/tdewolff/minify/v2` from 2.9.28 to 2.10.0
  1185. Version 2.0.35 (January 21, 2022)
  1186. ---------------------------------
  1187. * Set `read-all` permission to `GITHUB_TOKEN` for GitHub Actions
  1188. * Pin `jshint` version in linter job
  1189. * Fix incorrect conversion between integer types
  1190. * Add new GitHub Actions workflows: CodeQL and Scorecards analysis
  1191. * Handle Atom feeds with space around CDATA
  1192. * Bump `github.com/tdewolff/minify/v2` from 2.9.22 to 2.9.28
  1193. * Add Documentation directive to Systemd service
  1194. * Do not reset `touch-item` if successfully swiped
  1195. * Add support for multiple authors in Atom feeds
  1196. * Omit `User-Agent` header in image proxy to avoid being blocked
  1197. * Use custom feed user agent to fetch website icon
  1198. * Make default Invidious instance configurable
  1199. * Add new rewrite rule `add_youtube_video_from_id` to add Youtube videos in Quanta articles
  1200. * Add scrape and rewrite rules for `quantamagazine.org`
  1201. * Expose entry unshare link in the entry and list views
  1202. * Add Google Reader API implementation (experimental)
  1203. * Add `Content-Security-Policy` header to feed icon and image proxy endpoints
  1204. - SVG images could contain Javascript. This CSP blocks inline script.
  1205. - Feed icons are served using `<img>` tag and Javascript is not interpreted.
  1206. * Add Finnish translation
  1207. * Add scraper rule for `ikiwiki.iki.fi`
  1208. * Remove `SystemCallFilter` from `miniflux.service`
  1209. * Fix minor typo in French translation
  1210. Version 2.0.34 (December 16, 2021)
  1211. ----------------------------------
  1212. * Add rewrite rule for comics website http://monkeyuser.com
  1213. * Add `<head>` tag to OPML export
  1214. * Tighten Systemd sandboxing and update comments in `miniflux.service`
  1215. * Add `RuntimeDirectory` to Systemd service
  1216. * Order disabled feeds at the end of the list
  1217. * Add support for theme color based on preferred color scheme of OS
  1218. * Bump `github.com/lib/pq` from 1.10.3 to 1.10.4
  1219. * Bump `github.com/PuerkitoBio/goquery` from 1.7.1 to 1.8.0
  1220. * Fix typos in `model/icon.go`
  1221. * Add `data-srcset` support to `add_dynamic_image rewrite` rewrite rule
  1222. * Fix Docker Compose example files compatibility to v3
  1223. * Added the `role="article"` to `<article>` elements for better accessibility with screen readers
  1224. * Redact secrets shown on the about page
  1225. * Handle `srcset` images with no space after comma
  1226. * Hide the logout link when using auth proxy
  1227. * Fix wrong CSS variable
  1228. * Change `-config-dump` command to use `KEY=VALUE` format
  1229. Version 2.0.33 (September 25, 2021)
  1230. -----------------------------------
  1231. * Build RPM and Debian package with PIE mode enabled
  1232. * Add CSS rule to hide `<template>` tag in old browsers
  1233. * Bump `github.com/tdewolff/minify/v2 from 2.9.21 to 2.9.22`
  1234. * Bump `github.com/lib/pq from 1.10.2 to 1.10.3`
  1235. * Remove `RequestURI()` hack
  1236. * Improve `zh_CN` translation
  1237. * Add ability to change entry sort order in the UI
  1238. * Add minor improvements in integration package
  1239. * Add Telegram integration
  1240. * Add rewrite rule to remove DOM elements
  1241. * Add proxy argument to `scraper.Fetch()`
  1242. * Add mime type `application/feed+json` to discover JSON Feed v1.1
  1243. * Update scraper rule for `theregister.com`
  1244. * Add Go 1.17 to GitHub Actions
  1245. * Display option to hide feed only when category is not already hidden
  1246. * Add option to hide feeds from the global Unread list
  1247. Version 2.0.32 (August 14, 2021)
  1248. --------------------------------
  1249. * Bump `github.com/tdewolff/minify/v2` from 2.9.17 to 2.9.21
  1250. * Bump `mvdan.cc/xurls/v2` from 2.2.0 to 2.3.0
  1251. * Bump `github.com/PuerkitoBio/goquery` from 1.6.1 to 1.7.1
  1252. * Bump `github.com/prometheus/client_golang` from 1.10.0 to 1.11.0
  1253. * Add `/rss/` to the list of well known URLs during feed discovery
  1254. * Use `authors` entry for JSON 1.1 feeds
  1255. * Added Greek translation
  1256. * Added the ability to mark an entire category as read in the web ui
  1257. * Added "in" in "logged in" for en_US `tooltip.logged_user`
  1258. * Added option to hide categories from the global unread list
  1259. * Show "saving" labels for entry status button
  1260. * Golang client: Try to parse response body on `InternalServerError` errors
  1261. * contrib: Add support for a $MINIFLUX_IMAGE env var in docker-compose
  1262. * contrib: Bump docker-compose version to 3.4
  1263. Version 2.0.31 (June 6, 2021)
  1264. -----------------------------
  1265. * Expose comments_url entry field in Golang API client
  1266. * Use unique file names for cache busting instead of query string
  1267. * Highlight and sort feeds with unread entries in feeds list
  1268. * Mark items as read on click/middle click of external links
  1269. * Fix: Firefox on Windows does not show the active link as bold
  1270. * Avoid extra HTTP request for fetching custom stylesheet
  1271. * Remove invalid CSRF HTML meta tag
  1272. * Add lang attribute to root HTML tag
  1273. * Use runes instead of bytes to truncate JSON feed titles (avoid breaking Unicode strings)
  1274. * Expose changed_at time through the API
  1275. * Add new config option CLEANUP_ARCHIVE_BATCH_SIZE
  1276. * Add new option DATABASE_CONNECTION_LIFETIME
  1277. * Add database stats to Prometheus exporter
  1278. * Add Systemd watchdog
  1279. * Avoid custom stylesheet to be cached by third-party CDN
  1280. * Update a shared entry label translation in zh_CN
  1281. * Bump github.com/tdewolff/minify/v2 from 2.9.16 to 2.9.17
  1282. * Bump github.com/lib/pq from 1.10.1 to 1.10.2
  1283. Version 2.0.30 (May 7, 2021)
  1284. ----------------------------
  1285. * Security fix: any user can delete any feed (Regression introduced in commit 51fb949)
  1286. * Fix password reset via CLI
  1287. * Increase default batch size value
  1288. * Handle RSS feed title with encoded Unicode entities
  1289. * Show number of unread per category in category list instead of number of feeds
  1290. * Bump github.com/lib/pq from 1.10.0 to 1.10.1
  1291. * Filtering doesn't work when selecting from multiple found feeds
  1292. * Bump github.com/tdewolff/minify/v2 from 2.9.15 to 2.9.16
  1293. * Use an appropriate color for visited links on dark theme
  1294. * Fix typo in reader/json/doc.go
  1295. * Create SECURITY.md
  1296. * Setup golangci-lint Github Action
  1297. * Add per feed cookies option
  1298. * Bump github.com/prometheus/client_golang from 1.9.0 to 1.10.0
  1299. * Bump github.com/tdewolff/minify/v2 from 2.9.13 to 2.9.15
  1300. Version 2.0.29 (Mar 21, 2021)
  1301. -----------------------------
  1302. * Miniflux requires at least Go 1.16 now
  1303. * Improved support of Atom text constructs
  1304. - Improve handling of CDATA in text elements
  1305. - Omit XHTML root element because it should not be part of the content
  1306. - Fix incorrect parsing of HTML elements
  1307. * Handle RDF feed with HTML encoded entry title
  1308. * Add Turkish language
  1309. * Improve deletion of feeds with lots of entries
  1310. * Add support of Systemd readiness notification using the sd_notify protocol
  1311. * Remove feed_icons service worker cache because it's causing more problems than it solves (and HTTP cache seems faster)
  1312. * Add basic PWA offline page
  1313. - Add basic offline mode when using the service worker
  1314. - Starting in Chrome 93, offline mode is going to be a requirement to install the PWA
  1315. * Replace icon for "Add to home screen" button
  1316. * Use SVG icons for "toast" notifications
  1317. * Use SVG sprite for icons instead of inline elements
  1318. * Reset scroll position on mark page as read
  1319. * Add link to mark all feed entries as read
  1320. * Make web app display mode configurable (The change is visible after reinstalling the web app)
  1321. * Handle RSS feeds with CDATA in author item element
  1322. * Add read time on the article page
  1323. * Avoid showing a broken image when there is no feed icon
  1324. * Add option to allow self-signed or invalid certificates
  1325. * Add new config option to scrape YouTube's website to get video duration as read time (disabled by default)
  1326. * Send full article content to Wallabag
  1327. * Add more extensive health check support
  1328. - Improve endpoint to test database connection
  1329. - Add new cli argument: -healthcheck
  1330. - Update Docker Compose examples
  1331. * Update iframe "allow list" to support Bilibili videos
  1332. * Remove completely generated files and use embed package to bundle JS/CSS/Images/Translations files into the final binary
  1333. * Remove deprecated io/ioutil package
  1334. * Show Postgres version in "About" page
  1335. Version 2.0.28 (Feb 15, 2021)
  1336. -----------------------------
  1337. * Add HTTP header "Referrer-Policy: no-referrer"
  1338. * Handle entry title with double encoded entities
  1339. * Add Open Containers annotations to Docker image
  1340. * Remove iframe inner HTML contents (iframe element never has fallback content)
  1341. * Update date parser to fix another time zone issue
  1342. * Update German translation for blocklist and keeplist
  1343. * Validate Keep list and Block list rules syntax
  1344. * Add support for IPv6 with zone index
  1345. * Allow images with data URLs
  1346. * Limit full-text search indexation to first 500K characters (tsvector has a size limit of 1MB)
  1347. * Change PWA display mode to standalone
  1348. * ETag value is not set correctly in HTTP client (regression)
  1349. * Add database backed Let's Encrypt certificate cache
  1350. * Add global option POLLING_PARSING_ERROR_LIMIT
  1351. * Update systemd service file comments to use `systemctl edit` for editing
  1352. * Update Go version to 1.15 in go.mod
  1353. * Don't discard the "Fetch via Proxy" option
  1354. * Update man page to show the default values
  1355. * Add PostgreSQL indices
  1356. * Add API endpoints to get feeds and entries of a category
  1357. * Create feed query builder
  1358. * Bump github.com/PuerkitoBio/goquery from 1.6.0 to 1.6.1
  1359. * Show global options in the about page
  1360. * Update man page to mention -1 can be used for CLEANUP_ARCHIVE_* options
  1361. Version 2.0.27 (Jan 9, 2021)
  1362. ----------------------------
  1363. * Add spellcheck="false" to input fields
  1364. * Refactoring of entry, feed, category, and user validation
  1365. * Avoid stripping tags for entry title
  1366. * Add the possibility to subscribe to feeds with the Android Share menu
  1367. * API improvements:
  1368. - Change feed creation request to allow setting most fields via API
  1369. - Allow regular users to change settings via API
  1370. - Make user fields editable via API
  1371. - Renaming non-existent category via API should return a 404
  1372. * Update Systemd service file:
  1373. - Add capability CAP_NET_BIND_SERVICE (allow the process to listen on privileged ports)
  1374. - Enable a private /tmp for $CERT_CACHE (required when using Let's Encrypt)
  1375. * Update read/star icons to SVGs
  1376. * Add autocomplete="username" to HTML forms
  1377. * Improve user mass delete to use fewer Goroutines
  1378. * Use SQL transaction when creating user sessions and users
  1379. * Remove extra column (HSTORE field) from users table and migrate key/value pairs to specific columns
  1380. * Bump github.com/prometheus/client_golang from 1.8.0 to 1.9.0
  1381. * Bump github.com/lib/pq from 1.8.0 to 1.9.0
  1382. * Add styles for <abbr> HTML tag
  1383. * Refactor SQL migrations:
  1384. - Avoid embedding SQL files into binary
  1385. - Allow more flexible changes by using Go functions
  1386. * Add Server-Timing header to unread page
  1387. * Show correct User Agent in input placeholders
  1388. * Add autocomplete attribute to login form
  1389. * Add Grafana dashboard in contrib folder
  1390. Version 2.0.26 (Dec 5, 2020)
  1391. ----------------------------
  1392. * Use created_at instead of published_at for archiving entries
  1393. * Add created_at field for entries
  1394. * Handle invalid feeds with relative URLs
  1395. * Add API routes for "mark all as read"
  1396. * Add support for setting a global default User-Agent
  1397. * Add rewrite rule "replace" for custom search and replace
  1398. * Calculate reading time during feed processing
  1399. * Handle various invalid dates
  1400. * systemd: keep /run writeable
  1401. * debian package: add missing post-install script
  1402. * Do not follow redirects when trying known feed URLs
  1403. * Trim spaces around icon URLs
  1404. * Reinstate EXPOSE instruction in Dockerfile
  1405. * Update German and Portuguese translations
  1406. Version 2.0.25 (Nov 3, 2020)
  1407. ----------------------------
  1408. * Rename "original" link to be more explicit
  1409. * Do not escape HTML for Atom 1.0 text content during parsing (Avoid HTML entities issues)
  1410. * Do not use charset.NewReader if the body is a valid UTF-8 document
  1411. * Restore the ability to use a proxy for all HTTP requests (see https://golang.org/pkg/net/http/#ProxyFromEnvironment)
  1412. * Show Git commit in about page
  1413. * Publish Docker images to GitHub Container Registry
  1414. * Added few Docker Compose examples in contrib folder
  1415. * Added Ansible Role + Playbook for Miniflux in contrib folder
  1416. * Add rewrite rule to use noscript content for images rendered with Javascript
  1417. * Bump github.com/prometheus/client_golang from 1.7.1 to 1.8.0
  1418. * Update contributor link and Godoc badge for API client
  1419. * Move Debian package builder to main repository
  1420. * Move RPM build files to main repository
  1421. * Add GitHub Action to generate Docker images
  1422. * Build multi-platform images with Docker Buildx
  1423. * Add keyboard shortcut to scroll current item to the top
  1424. * Add feed filters (Keeplist and Blocklist)
  1425. * Do not proxy image with a data URL
  1426. * Bump github.com/PuerkitoBio/goquery from 1.5.1 to 1.6.0
  1427. * Proxify articles crawled manually
  1428. * Proxify images defined in srcset attribute
  1429. * Remove plaintext Fever password from database
  1430. * Add keyboard shortcut to jump to an item's feed page
  1431. * Add option for swipe gesture on entries on mobile
  1432. Version 2.0.24 (Oct 3, 2020)
  1433. ----------------------------
  1434. * Add rewrite rule to fix Medium.com images
  1435. * Update sanitizer to support responsive images:
  1436. - Add support for picture HTML tag
  1437. - Add support for srcset, media, and sizes attributes to img and source tags
  1438. * Enhance man page formatting
  1439. * Add Prometheus exporter
  1440. * Remove dependency on global config options in HTTP client
  1441. * API:
  1442. - Avoid database lookup if empty credentials are provided
  1443. - Add the possibility to filter entries by category ID
  1444. - Add the possibility to filter entries by a list of statuses
  1445. * Add Feed ID in worker error logs
  1446. * Tweak default HTTP client transport timeout values to reduce the number of file descriptors
  1447. * CSS tweaks and optimizations:
  1448. - Prevent sub and sup from affecting line-height
  1449. - Set touch-action on .items to prevent browser navigation
  1450. - Move font-family specific CSS to the appropriate file
  1451. - Update primary font-family for UI to be even more compatible with various operating systems
  1452. - Make .entry-content font-weight variable depending on font-family used
  1453. * Avoid Javascript minifier to break keyboard shortcuts
  1454. * Rename service worker script to avoid being blocked by uBlock
  1455. * Update date parser to handle Pacific Daylight Time in addition to Pacific Standard Time
  1456. * Create index to speed up bookmark page
  1457. * Do not try to update a duplicated feed after a refresh
  1458. * Use a transaction to refresh and create entries
  1459. * Speed up entries clean up with an index and a goroutine
  1460. * Avoid the accumulation of enclosures by keeping only what is referenced in the feed
  1461. * Add workarounds for parsing an invalid date
  1462. * Archive older entries first
  1463. * Update API client to support more filters
  1464. * Avoid duplication between get feed entries and get entries API endpoints
  1465. * Enable strict slash to avoid a page not found (404) when using a trailing slash in the URLs
  1466. * Add a submit button to each section of the integration page
  1467. * Reload page after making page as read when showing unread entries
  1468. * Add option to archive unread entries
  1469. * Add option to enable maintenance mode
  1470. * Add HTTP proxy option for subscriptions
  1471. * Make add_invidious_video rule applicable for different invidious instances
  1472. * Fix reading time for jp, ko and zh languages
  1473. * Update POLLING_SCHEDULER description in man page
  1474. * Bump gorilla/mux from 1.7.4 to 1.8.0
  1475. * Add link to mark a feed as read
  1476. Version 2.0.23 (Aug 15, 2020)
  1477. -----------------------------
  1478. * Try known URLs when discovering subscriptions
  1479. * Add workarounds to find YouTube channel feeds (YouTube doesn't expose RSS links anymore for new-style URLs)
  1480. * Increase HTTP server timeout values
  1481. * Use stdlib constants for HTTP methods instead of strings
  1482. * Add support for RTL feed content
  1483. * Ignore <media:title> to avoid overriding the default title if they are different
  1484. * Add support for secret keys exposed as a file (useful for containerized environments)
  1485. * Display recent entries first in search results
  1486. * Do not archive shared items
  1487. * Add option to change the number of entries per page
  1488. * Add Brazilian Portuguese (pt_BR) translation
  1489. * Add reading time for entries
  1490. * Redirect to login page if CSRF token is expired
  1491. * Fever API:
  1492. - Use getEntryIDs instead of getEntries to reduce memory consumption
  1493. - Fix max_id argument logic to follow the specs
  1494. - Improve logging
  1495. - Do not send articles to external services when unsaving an item
  1496. - Create index to speed up API calls
  1497. - Log client IP in middleware
  1498. * API client: Do not return body for response with no content
  1499. * REST API:
  1500. - Delete users asynchronously (Deleting large users might lock the tables)
  1501. - Add CORS support
  1502. * Align entry actions to the left
  1503. - Attempt to avoid awkward alignment on smartphone screens
  1504. - Keep the read/star actions aligned to the left
  1505. - Remove CSS flex to allow easier override with custom CSS
  1506. * Upgrade Postgres client library
  1507. * Upgrade CI checks to Go 1.15
  1508. Version 2.0.22 (Jun 19, 2020)
  1509. -----------------------------
  1510. * Remove child-src CSP policy (deprecated)
  1511. * Add /version endpoint
  1512. * Add the ability to use custom css
  1513. * Handle more invalid dates
  1514. * Add CSS styles for textarea
  1515. * Add index to speed up slow query
  1516. * Speed up feed list page rendering
  1517. * Add alternative scheduler based on the number of entries
  1518. * Setup Dependabot on GitHub
  1519. * Update Docker image to Alpine 3.12
  1520. * Add feed option to ignore HTTP cache
  1521. * Fix some Italian and German translations
  1522. * Added scraper rule for RayWenderlich.com, TheOatmeal.com, financialsamurai.com, dilbert.com and turnoff.us
  1523. * Replace link to categories by a link to the list of entries in "Category > Feeds" page
  1524. * Change feed title to a link to the original website
  1525. * Add icons to feeds and categories list
  1526. * Update dependencies and remove vendor folder
  1527. Version 2.0.21 (Mar 28, 2020)
  1528. -----------------------------
  1529. * Add SVG icons to entry actions
  1530. * Add support for Invidious
  1531. - Embed Invidious player for invidio.us feeds
  1532. - Add new rewrite rule to use Invidious player for Youtube feeds
  1533. * Check during application startup if the database schema is up to date
  1534. * Change default theme for public pages to "System Serif"
  1535. * Add feature to share an article (create a public link of a feed entry)
  1536. * Fix SQL injection in full-text search rank ordering
  1537. * Add generic OpenID Connect provider (OAuth2)
  1538. * Use more secure TLS configuration for autocert server (increase SSL Labs score from B to A+)
  1539. * Add feature to create per-application API Keys
  1540. * Add Go 1.14 to GitHub Actions
  1541. * Add scraper rule for wdwnt.com
  1542. * Add API client function to refresh all feeds
  1543. * Add API endpoint to refresh all feeds
  1544. * Add Auth Proxy authentication
  1545. * Use rel=prev/next on pagination links
  1546. Version 2.0.20 (Feb 15, 2020)
  1547. -----------------------------
  1548. * Add Japanese translation
  1549. * History: show entries in the order in which they were read
  1550. * Add button to add to Home screen
  1551. * Ignore enclosures without URL
  1552. * Correct spelling of "toggle"
  1553. * List view: align information to the left side, and the actionable buttons to the right
  1554. * Redirect to /unread when getting a 404 for an unread expired entry
  1555. * Do not advance to the next item when using the 'v' shortcut on the list of starred items
  1556. * Wrap around when navigating with keyboard shortcuts on a list view
  1557. * Remove unused Feed.Entries and Entry.Category from API client
  1558. * Add comments link keyboard shortcut
  1559. * Allow application/xhtml+xml links as comments URL in Atom replies
  1560. * Allow only absolute URLs in comments URL
  1561. * Use internal XML workarounds to detect feed format
  1562. * Make menu consistent across feed pages
  1563. * Make sure external URLs are not encoded incorrectly by Go template engine
  1564. * Make sure whitelisted URI schemes are handled properly by the sanitizer
  1565. * Use white background for favicon (Improve legibility when using a dark theme)
  1566. * Remove dependency on Sed to build Docker images
  1567. * Normalize URL query string before executing HTTP requests
  1568. * Improve Dublin Core support for RDF feeds
  1569. * Improve Podcast support (iTunes and Google Play feeds)
  1570. * Add support for Atom 0.3
  1571. * Add support for Atom "replies" link relation
  1572. * Return outer HTML when scraping elements
  1573. * Update scraper rule for "Le Monde"
  1574. * Filter valid XML characters for UTF-8 XML documents before decoding
  1575. * Trim spaces for RDF entry links
  1576. Version 2.0.19 (Dec 1, 2019)
  1577. ----------------------------
  1578. * Add shortcut "V" to open original link in current tab
  1579. * Add the possibility to add rules during feed creation
  1580. * Wrap attachments into <details> disclosure element
  1581. * Show attachment size on entry page
  1582. * Add support of RSS Media elements (group, description, peer link, and thumbnails)
  1583. * Add rewrite functions: convert_text_link and nl2br
  1584. * Add scraper rule for openingsource.org
  1585. * Add Makefile target to build only amd64 Docker image
  1586. * Make sure to remove integration settings when removing a user
  1587. * Add API parameter to filter entries by category
  1588. * Display list of feeds per category
  1589. * Show the number of read and unread entries for each feed
  1590. * Make sure settings menu is consistent
  1591. * Remove fixed table-layout for entry content
  1592. * Update autocert lib because ACME v1 is EOL
  1593. * Do not lighten blockquote font color
  1594. * Update de_DE translation
  1595. * Send a response when changing status of removed entries in Fever API
  1596. * Add meta tag to disable Google Translate
  1597. * Improve storage module
  1598. * Improve XML decoder to remove illegal characters
  1599. * Compare Fever token case-insensitively
  1600. * Make sure integration tests are marked as failed in Github Actions
  1601. * Add new formats to date parser
  1602. * Add notification message when using keyboard shortcuts: f, s, and m.
  1603. * Avoid keyboard shortcuts to conflict with Firefox’s "Find as you type" feature
  1604. Version 2.0.18 (Sep 25, 2019)
  1605. -----------------------------
  1606. * Add Docker image variant for arm32v7
  1607. * Add theme variants
  1608. - Use CSS variables instead of inherence
  1609. - Rename default theme to "Light - Serif"
  1610. - Rename Black theme to "Dark - Serif"
  1611. - Rename "Sans-Serif" theme to "Light - Sans Serif"
  1612. - Add "System" theme that use system preferences: Dark or Light
  1613. - Add Serif and Sans-Serif variants for each color theme
  1614. * Avoid constraint error when having duplicate entries during feed creation
  1615. * Disable strict XML parsing
  1616. * Ignore invalid content type
  1617. * Update man page
  1618. * Replace Travis by GitHub Actions
  1619. * Rename cleanup config variables and deprecate old ones
  1620. - CLEANUP_FREQUENCY_HOURS instead of CLEANUP_FREQUENCY
  1621. - CLEANUP_ARCHIVE_READ_DAYS instead of ARCHIVE_READ_DAYS
  1622. * Make configurable the number of days to remove old sessions
  1623. * Add native lazy loading for images and iframes
  1624. * Do not buffer responses in the image proxy
  1625. * Update dependencies
  1626. * Add Go 1.13 to test matrix
  1627. * Replace link border by outline to avoid slight content shift
  1628. * New rewrite function: add_mailto_subject
  1629. * Import OPML from URL
  1630. * Fix HTML injection in addImageTitle
  1631. * Accept HTML entities when parsing XML
  1632. Version 2.0.17 (Aug 3, 2019)
  1633. ----------------------------
  1634. * Update Docker image to Alpine Linux 3.10.1
  1635. * Pass auth header to manifest request (crossorigin attribute)
  1636. * Sort feed categories before serialization
  1637. * Fix syntax errors in man page
  1638. * Add .search margin-right
  1639. * Ask for confirmation before flushing history, marking page as read, and mark all as read
  1640. * Add option to disable feeds
  1641. Version 2.0.16 (Jun 8, 2019)
  1642. ----------------------------
  1643. * Add option to toggle date/time in log messages
  1644. * Add optional config file parser in addition to environment variables
  1645. * Make HTTP Client timeout and max body size configurable
  1646. * Refactor config package:
  1647. - Parse configuration only once during startup time
  1648. - Store configuration values in a global variable
  1649. * Flip behavior of j and k keyboard shortcuts
  1650. * Bump Postgresql client library to v1.1.1 to bring in SCRAM-SHA-256 authentication
  1651. * Add option to enable/disable keyboard shortcuts
  1652. * Add missing translation
  1653. * Improve page reload when showing unread/all entries:
  1654. - Show only unread entries = refresh current page
  1655. - Show all entries = go to next page
  1656. * Always display feed entries even when there is a feed error
  1657. * Use loading label instead of saving when submitting login form
  1658. * Add OPML v1 support during importation
  1659. * Add 'allow-popups' to iframe sandbox permissions
  1660. Version 2.0.15 (Mar 16, 2019)
  1661. -----------------------------
  1662. * Move Dockerfile to main repo
  1663. * Change location of the binary from /usr/local/bin to /usr/bin in Docker image
  1664. * Add double tap detection for next/previous page navigation
  1665. * Allow users to disable auto-remove
  1666. * Make parser compatible with Go 1.12
  1667. * Add Golang 1.12 to CI
  1668. * Use feed ID instead of user ID to check entry URLs presence
  1669. * Fix typo in stylesheet
  1670. * Sort search results by relevance
  1671. * Use preferably the published date for Atom feeds
  1672. * Add Spanish translation
  1673. * Rename session cookies
  1674. * Handle the case when application session is expired and not user session
  1675. Version 2.0.14 (Jan 13, 2019)
  1676. -----------------------------
  1677. * Only attempt to change password if the confirmation field is filled in (Firefox)
  1678. * Remove URL from client user agent
  1679. * Make the feed list order case-insensitive
  1680. * Handle XHTML Summary elements for Atom feeds
  1681. * Make UTF-8 the default encoding for XML feeds
  1682. * Add more targets to Makefile
  1683. * Add -mod=vendor in Makefile
  1684. * Move health check endpoint from ui package to httpd service
  1685. * Add workaround for non GMT dates (RFC822, RFC850, and RFC1123)
  1686. * Make sure `<strong>` elements are bold
  1687. * Show scrollbars only when necessary for <pre> elements
  1688. * Add Italian translation
  1689. * Allow to switch between unread only and all entries on category/feed views
  1690. * Add function storage.UpdateFeedError()
  1691. * Add BBC News scraping rule
  1692. * Ignore JSON feeds from EnsureUnicode()
  1693. * Preserve category selection when no feed is found
  1694. * Update XML encoding regex to take single quotes into consideration
  1695. * Send cli errors to stderr
  1696. * Update dependencies
  1697. * Make password prompt compatible with Windows
  1698. * Make configurable the number of days to archive read items
  1699. * Change log level to debug when starting workers
  1700. * Do not show $DATABASE_URL warning when showing application info
  1701. * Move image proxy filter to template functions
  1702. * Update scraper rule for lemonde.fr
  1703. * Refactor manual entry scraper
  1704. * Apply rewriter rules on manual "Fetch Original Content"
  1705. * Add Makefile target for current OS and architecture
  1706. * Improve Makefile
  1707. Version 2.0.13 (Nov 25, 2018)
  1708. -----------------------------
  1709. * Add man page
  1710. * Add support for Systemd Socket Activation (experimental)
  1711. * Add the possibility to listen on Unix sockets
  1712. * Add config options to disable HTTP and scheduler services
  1713. * Archive more read entries in cleanup job
  1714. * Change default database connection string (backward compatible)
  1715. * Improve logging messages in ui package
  1716. * Improve overall Simplified Chinese translations
  1717. * Improve time since post date displays:
  1718. - "15 days" now is "15 days" rather than "3 weeks" ago
  1719. - "32 days" is now "1 month" rather than "2 months" ago
  1720. - "366 days" is now "1 year" rather than "2 years" ago
  1721. * Allow the scraper to parse XHTML documents
  1722. * Remove charset=utf-8 from JSON responses
  1723. * Ignore hotkeys containing Control, Alt or Meta keys
  1724. * Handle more encoding conversion edge cases
  1725. * Disable go test caching
  1726. * Avoid duplication of ldflags in Makefile
  1727. * Fix wrong translation key for category pages
  1728. * Code refactoring:
  1729. - Simplify application HTTP middlewares
  1730. - Replace daemon and scheduler package with service package
  1731. - Move UI middlewares and routes to ui package
  1732. - Move API middleware and routes to api package
  1733. - Move Fever middleware and routes to fever package
  1734. Version 2.0.12 (Oct 26, 2018)
  1735. -----------------------------
  1736. * Add OpenBSD build
  1737. * Improve logging for OAuth2 callback
  1738. * Make "g f" go to feed, or list of feeds
  1739. * Add more details in feed storage errors to facilitate debugging
  1740. * Add entries storage error to feed errors count
  1741. * Set arbitrary maximum size for tsvector column
  1742. * Unsubscribe from feed through link or "#"
  1743. * Simplify feed entries filtering
  1744. * Simplify feed fetcher
  1745. * Simplify feed parser and format detection
  1746. * Improve unit tests in url package
  1747. * Add short cli flags -i and -v
  1748. * Convert text links and line feeds to HTML in YouTube channels
  1749. * Change link state when marking all entries as read
  1750. * Add missing package descriptions for GoDoc
  1751. * Fix typo in license header
  1752. * Refactor HTTP response builder
  1753. * Improve Fever API performances when marking a feed or group as read
  1754. * Set focus on article link when pressing prev/next hotkeys
  1755. * Improve request package and add more unit tests
  1756. * Add more unit tests for config package
  1757. * Simplify locale package usage (refactoring)
  1758. * Translate application in Russian
  1759. * Use disclosure widget <details> for advanced feed options
  1760. * Use unique translation IDs instead of English text as key
  1761. * Add more unit tests for template functions
  1762. * Fix invalid output when truncating Unicode text in templates
  1763. * Add the possibility to override default user agent for each feed
  1764. * Split Makefile linux targets by architecture
  1765. * Add compiler, Arch, and OS to info command
  1766. * Avoid line break between emoji and (un)read/(un)star links
  1767. * Build Docker image for multiple architectures (amd64, arm32v6, arm64v8)
  1768. Version 2.0.11 (Sep 11, 2018)
  1769. -----------------------------
  1770. * Set cookie flag `SameSite` to Lax mode
  1771. * Use predefined ciphers when TLS is configured
  1772. * Avoid displaying an error when shutting down the daemon
  1773. * Add "Mark this page as read" to the bottom
  1774. * Store client IP address in request context
  1775. * Refactor HTTP context handling
  1776. * Make user creation via environment variables idempotent
  1777. * Use regular text version of ✔︎ instead of emoji version on iOS
  1778. * Add toggle status button to entry page
  1779. * Migrate to Go Modules and Go 1.11
  1780. * Show count of feeds with permanent errors in header menu
  1781. * Display remote client IP in logs when having a login failure (Fail2Ban)
  1782. * Add remove button in feed edit page
  1783. * Split integration tests into multiple files
  1784. * Update scraper rule for heise.de
  1785. * Expose real error messages for internal server API errors
  1786. * Move Golang API client in project source tree (the separate project is deprecated)
  1787. * Use canonical imports
  1788. * Add Procfile
  1789. * Create database package (refactoring)
  1790. * Update user agent with new website URL
  1791. * Update German translation
  1792. Version 2.0.10 (July 22, 2018)
  1793. ------------------------------
  1794. * Avoid browser caching issues when assets changes
  1795. * Add Gzip/Deflate compression for HTML, JSON, CSS and Javascript responses
  1796. * Improve themes handling
  1797. * Store user theme in session
  1798. * Logged out users will keep their theme
  1799. * Add theme background color to web manifest and meta tag
  1800. * Update application icon with different sizes
  1801. * Add support for published tag in Atom feeds
  1802. * Add tooltip to feed domain in feeds list (title attribute)
  1803. * Prevent vertical scrolling on swipe
  1804. * Show feed title instead of domain in items list
  1805. * Add service worker to cache feed icons
  1806. * Make image proxy configurable via IMAGE_PROXY environment variable:
  1807. * none = No proxy
  1808. * http-only = Proxy only non-HTTPS images (default)
  1809. * all = Proxy everything
  1810. * Add alt attribute for feed icons
  1811. * Update CI jshint check
  1812. * Add embedly.com to iframe whitelist
  1813. * Use passive event listeners for touch events
  1814. * Add `add_dynamic_image` rewriter for JavaScript-loaded images
  1815. * Change feed password field type to text to avoid auto-completion with Firefox
  1816. * Using autocomplete="off" or autocomplete="new-password" doesn't change anything
  1817. * Changing the input ID doesn't change anything
  1818. * Using a different input name doesn't change anything
  1819. * Only Chrome supports autocomplete="new-password"
  1820. * Add base URL validation
  1821. * Update default stylesheet name in HTML layout
  1822. * Pre-generate themes stylesheets at build time
  1823. * Update vendor dependencies
  1824. * Refactor assets bundler and split Javascript files
  1825. * Run sanitizer after all processing and entry content rewrite
  1826. * Remove timestamp from generated files
  1827. * Add support for protocol relative YouTube URLs
  1828. * Add Postgres full-text search for entries
  1829. * Add search form in user interface
  1830. * Add search parameter to the API
  1831. * Improve Dutch locales
  1832. * Sandbox iframes when sanitizing
  1833. * Keep consistent text size on mobile orientation change
  1834. * Change permission of /etc/miniflux.conf to 600 instead of 644 in RPM package
  1835. * Add tzdata package to Docker image
  1836. * Update Docker image to Alpine Linux 3.8
  1837. Version 2.0.9 (July 1, 2018)
  1838. ----------------------------
  1839. * Avoid Chrome to autocomplete no-login password fields
  1840. * Add cli flag to reset all feed errors
  1841. * Do not ignore errored feeds when a user refresh feeds manually
  1842. * Add specific 404 and 401 error messages
  1843. * Strip binaries to reduce size
  1844. * Make sure we always get the pagination in unread mode
  1845. * Fix incorrect data value when toggling bookmark flag on entry page
  1846. * Set opener to null when opening original URL with JavaScript
  1847. * Remove unnecessary style
  1848. * Refactor AddImageTitle rewriter
  1849. * Only processes images with `src` **and** `title` attributes (others are ignored)
  1850. * Processes **all** images in the document (not just the first one)
  1851. * Wraps the image and its title attribute in a `figure` tag with the title attribute's contents in a `figcaption` tag
  1852. * Improve sanitizer to remove `style`, `noscript` and `script` tag contents
  1853. * Improve feed and user API updates with optional values
  1854. * Add new fields for feed username/password
  1855. * Improve memory usage debug log
  1856. * Disable keep-alive for HTTP client
  1857. * Close HTTP response body even for failed requests
  1858. * Add Sans-Serif theme
  1859. * Rewrite iframe Youtube URLs to https://www.youtube-nocookie.com
  1860. * Add more filters for API call `/entries`:
  1861. * before (unix timestamp)
  1862. * before_entry_id (int64)
  1863. * after (unix timestamp)
  1864. * after_entry_id (int64)
  1865. * starred (boolean)
  1866. * Rewrite individual entry pagination SQL queries
  1867. * Simplify entry query builder
  1868. * Prevent items from sticking on touchend
  1869. * Extended horizontal overflow to feed and category views
  1870. * Translate missing strings
  1871. * Update German translation
  1872. Version 2.0.8 (June 4, 2018)
  1873. ----------------------------
  1874. * Add Pocket integration
  1875. * Rewrite RealIP() to avoid returning an empty string
  1876. * Convert IP field from text to inet type
  1877. * Improve error handling in integration clients
  1878. * Make unread counter clickable
  1879. * Archive read entries automatically after 60 days
  1880. * Hide horizontal overflow when swiping articles on touch devices
  1881. * Add API endpoint to get logged user
  1882. * Fever API: Return response with an empty list if there is no item
  1883. * Handle feeds with dates formatted as Unix timestamp
  1884. Version 2.0.7 (May 7, 2018)
  1885. ---------------------------
  1886. * Add API endpoint to import OPML file
  1887. * Make sure to close request body in HTTP client
  1888. * Do not show save link if no integration is configured
  1889. * Make sure integrations are configured before to make any HTTP requests
  1890. * Avoid people to unlink their OAuth2 account without having a local password
  1891. * Do not use shared variable to translate templates (avoid concurrency issue)
  1892. * Use vanilla HTTP handlers (refactoring)
  1893. * Move HTTP client to its own package (refactoring)
  1894. * Add middleware to read X-Forwarded-Proto header (refactoring)
  1895. * Use Gorilla middleware (refactoring)
  1896. * Scrape parent element for iframe
  1897. * Add SoundCloud and Bandcamp iframe sources
  1898. Version 2.0.6 (Apr 20, 2018)
  1899. ----------------------------
  1900. * Improve graceful shutdown
  1901. * Simplify Heroku deployment
  1902. * Display memory usage and some metrics in logs
  1903. * Increase read/write timeout for HTTP server
  1904. * Add support for Dublin Core date in RDF feeds
  1905. * Do not return an error if the user session is not found
  1906. * Handle some non-english date formats
  1907. * Add missing French translation
  1908. * Rename RSS parser getters
  1909. * Get the right comments URL when having multiple namespaces
  1910. * Ignore caching headers for feeds that send "Expires: 0"
  1911. * Update translations
  1912. Version 2.0.5 (Apr 7, 2018)
  1913. ---------------------------
  1914. * Avoid unread counter to be off by one when reading an entry
  1915. * Add Comments URL to entries
  1916. * Add FreeBSD build target
  1917. * Handle RSS author elements with inner HTML
  1918. * Fix typo in translations
  1919. * Add Dutch translation
  1920. * Convert enclosure size field to bigint
  1921. * Switch CI to Go v1.10
  1922. * Fix broken OPML import when compiling with Go 1.10
  1923. Version 2.0.4 (Mar 5, 2018)
  1924. ---------------------------
  1925. * Add Simplified Chinese translation
  1926. * Add Nunux Keeper integration
  1927. * Filter the list of timezones
  1928. * Add timezone to entries dates for REST and Fever API
  1929. * Show last login and session creation date in current timezone
  1930. * Fix typo in edit user template
  1931. * Improve parser error messages
  1932. * Remove parentheses around feed error messages
  1933. * Support localized feed errors generated by background workers
  1934. * Print info message if DATABASE_URL is not set
  1935. Version 2.0.3 (Feb 19, 2018)
  1936. ----------------------------
  1937. * Add Polish translation
  1938. * Change color of <q> tags for black theme
  1939. * Add database indexes (don't forget to run database migrations)
  1940. * Handle Atom feeds with HTML title
  1941. * Strip invalid XML characters to avoid parsing errors
  1942. * Improve error handling for HTTP client
  1943. Version 2.0.2 (Feb 5, 2018)
  1944. ---------------------------
  1945. * Add support for Let's Encrypt http-01 challenge
  1946. * Move template functions outside engine (refactoring)
  1947. * Take timezone into consideration when calculating relative time
  1948. * Add support for HTTP Strict Transport Security header
  1949. * Add support for base URLs with subfolders
  1950. * Add missing about menu in settings
  1951. * Show API URL endpoints in user interface
  1952. * Do not update entry date while refreshing a feed
  1953. * Add flag to toggle debug logging
  1954. * Improve unread counter updates
  1955. Version 2.0.1 (Jan 22, 2018)
  1956. ----------------------------
  1957. * Change user agent (People are blocking the crawler with mod_security)
  1958. * Move environment variables to config package (refactoring)
  1959. * Add build targets for all ARM architectures
  1960. * Do not crawl existing entry URLs
  1961. * Show translated login page in user language when logged out
  1962. * Handle more encoding edge cases:
  1963. - Feeds with charset specified only in Content-Type header and not in XML document
  1964. - Feeds with charset specified in both places
  1965. - Feeds with charset specified only in XML document and not in HTTP header
  1966. * Add German translation
  1967. * Add mark as read/unread link on list items
  1968. * Add API endpoint for OPML export
  1969. Version 2.0.0 (Jan 11, 2018)
  1970. ----------------------------
  1971. * Initial release of Miniflux 2.