Skip to content

Releases: miniflux/v2

Miniflux 2.2.4

20 Dec 21:37
2.2.4
Compare
Choose a tag to compare
  • test(rewrite): add unit test for referer rewrite function
  • refactor(subscription): use strings.HasSuffix instead of a regex in FindSubscriptionsFromYouTubePlaylistPage
  • refactor(sanitizer): use token.String() instead of html.EscapeString(token.Data)
  • refactor(sanitizer): simplify isValidTag
  • refactor(sanitizer): simplify hasRequiredAttributes
  • refactor(sanitizer): remove condition because config.Opts is guaranteed to never be nil
  • refactor(sanitizer): remove a now-useless function after refactoring
  • refactor(sanitizer): refactor conditions to highlight their similitude, enabling further refactoring
  • refactor(sanitizer): optimize strip_tags.go
  • refactor(sanitizer): micro-optimizations of srcset.go
  • refactor(sanitizer): merge two conditions
  • refactor(sanitizer): inline a function in sanitizeAttributes and fix a bug in it
  • refactor(sanitizer): inline a condition in sanitizeSrcsetAttr
  • refactor(sanitizer): improve rewriteIframeURL()
  • refactor(sanitizer): Google+ isn't a thing anymore
  • refactor(sanitizer): change the scope of a variable
  • refactor(rewriter): replace regex with URL parsing for referrer override
  • refactor(rewriter): avoid the use of regex in addDynamicImage
  • refactor(rewrite): remove unused function arguments
  • refactor(readability): various improvements and optimizations
  • refactor(readability): simplify the regexes in readability.go
  • refactor(processor): use URL parsing instead of a regex
  • refactor(processor): improve the rewrite URL rule regex
  • refactor(locale): delay parsing of translations until they're used
  • refactor(js): factorise a line in app.js
  • refactor(handler): delay store.UserByID() as much as possible
  • refactor(css): replace -ms-text-size-adjust with text-size-adjust
  • refactor(css): remove -webkit-clip-path
  • refactor(css): factorise .pagination-next and .pagination-last together
  • refactor: use a better construct than doc.Find(…).First()
  • refactor: use min/max instead of math.Min/math.Max
  • refactor: refactor internal/reader/readability/testdata
  • refactor: optimize sanitizeAttributes
  • refactor: get rid of numberOfPluralFormsPerLanguage test-only variable
  • fix(storage): replace timezone function call with view
  • fix(consistency): align feed modification behavior between API and UI
  • fix(ci): fix grammar in pull-request template
  • fix: load icon from site URL instead of feed URL
  • fix: feed icon from xml ignored during force refresh
  • feat(rewrite)!: remove parse_markdown rewrite rule
  • feat(mediaproxy): update predefined referer spoofing rules for restricted media resources
  • feat(locale): update translations to clarify readeck URL instead of readeck API endpoint
  • feat(locale): update German translations
  • feat(locale): update Chinese translations
  • feat(apprise): update SendNotification to handle multiple entries and add logging
  • feat(apprise): add title in notification request body
  • feat: resize favicons before storing them in the database
  • feat: optionally fetch watch time from YouTube API instead of website
  • feat: only show the commit URL if it's not empty on /about
  • feat: add predefined scraper rules for arstechnica.com
  • feat: add date-based entry filtering rules
  • chore: remove blog.laravel.com rewrite rule
  • build(deps): bump library/alpine in /packaging/docker/alpine to 3.21
  • build(deps): bump golang.org/x/term from 0.26.0 to 0.27.0
  • build(deps): bump golang.org/x/net from 0.31.0 to 0.33.0
  • build(deps): bump golang.org/x/crypto from 0.30.0 to 0.31.0
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.21.1 to 2.21.2

Miniflux 2.2.3

11 Nov 00:21
2.2.3
Compare
Choose a tag to compare
  • fix: unable to change password due to a typo in SQL parameter
  • fix: show only one player when there are several audio/video enclosures
  • feat(mediaproxy): pass original filename in Content-Disposition header
  • feat(mediaproxy): implement referer spoofing for restricted media resources
  • feat(integration): update Shiori integration to use new API endpoints for login/bookmark
  • build(deps): bump golang.org/x/text from 0.19.0 to 0.20.0
  • build(deps): bump golang.org/x/term from 0.25.0 to 0.26.0
  • build(deps): bump golang.org/x/oauth2 from 0.23.0 to 0.24.0
  • build(deps): bump golang.org/x/net from 0.30.0 to 0.31.0
  • build(deps): bump golang.org/x/crypto from 0.28.0 to 0.29.0

Miniflux 2.2.2

30 Oct 03:51
2.2.2
Compare
Choose a tag to compare
  • fix(webauthn): add backup eligibility flag workaround to avoid a 401 response
  • fix: update Last-Modified if it changes in a 304 response
  • feat(webauthn): show help message regarding username and non-discoverable credentials
  • feat(rss): calculate hash based on item title/content for feeds without GUID and link
  • feat(locale): update Chinese translations
  • feat(locale): update Polish translations
  • feat(integration): add Cubox integration
  • feat(client): add custom_js field to Go API client
  • feat(api): add endpoint for user integration status
  • feat: update feed icon during force refresh
  • feat: take Retry-After header into consideration for rate limited feeds
  • feat: set entry URL to rewritten URL if a rewrite rule is defined
  • feat: replace xurls third-party module with an ad-hoc regexp
  • feat: add new settings option to allow external fonts
  • feat: add custom user JavaScript similar to custom CSS
  • chore: update test case comment
  • build(deps): bump golang.org/x/net from 0.29.0 to 0.30.0
  • build(deps): bump github.com/yuin/goldmark from 1.7.4 to 1.7.8
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.20.37 to 2.21.1
  • build(deps): bump github.com/prometheus/client_golang
  • build(deps): bump github.com/andybalholm/brotli from 1.1.0 to 1.1.1

Miniflux 2.2.1

28 Sep 03:05
2.2.1
Compare
Choose a tag to compare
  • refactor: split processor package into smaller files
  • fix(mediaproxy): forward client user-agent to origin to bypass bot protection
  • fix: use root URL to generate absolute proxy URL
  • fix: remove progression save on shared entry
  • fix: add datasource variable and upgrade depecrated panels on the Grafana dashboard
  • feat(locale): update zh_CN translations
  • feat(locale): update Ukrainian translations
  • feat(locale): update Spanish translations
  • feat(locale): update Dutch translations
  • feat: use Bilibili API instead of web scraping to get videos watch time
  • feat: add pagination to shared entries listing
  • feat: add button to show only starred entries per category
  • build(deps): bump golang.org/x/term from 0.23.0 to 0.24.0
  • build(deps): bump golang.org/x/oauth2 from 0.22.0 to 0.23.0
  • build(deps): bump golang.org/x/net from 0.28.0 to 0.29.0
  • build(deps): bump github.com/PuerkitoBio/goquery from 1.9.2 to 1.10.0
  • build(deps): bump github.com/prometheus/client_golang from 1.20.3 to 1.20.4
  • build(deps): bump github.com/go-webauthn/webauthn from 0.10.2 to 0.11.2
  • build: update go.mod to Go 1.23
  • build: bump devcontainer version to Go 1.23

Miniflux 2.2.0

18 Aug 20:19
2.2.0
Compare
Choose a tag to compare
  • refactor: simplify Youtube feeds discovery
  • fix(integration): define content encoding explicitly when sending article body to Readeck
  • fix(fever): correct sorting direction when using max_id argument
  • fix(client): Return nil and error if endpoint is an empty string
  • fix: video poster image URL is encoded twice when using MEDIA_PROXY_MODE=all
  • fix: use BASE_URL instead of r.Host to generate absolute media proxy URL
  • fix: panic during YouTube channel feed discovery
  • fix: honor hide_globally when creating a new feed through the api
  • fix: align pagination correctly on small screens with non-English text
  • fix: store.GetEnclosure() should return nil if no rows are returned
  • feat(locale): update Turkish translations
  • feat(locale): update French translations
  • feat(locale): update Chinese` translations
  • feat(integration): add ntfy integration
  • feat(api): add API routes /v1/enclosures/{enclosureID}
  • feat: validate OAUTH2_PROVIDER config option value
  • feat: remove YouTube video page subscription finder because meta[itemprop="channelId"] no longer exists
  • feat: remove well-known URL parameter trackers
  • feat: mark media as read when playback reaches 90%
  • feat: change log level to info when running migrations
  • feat: allow customizing the display name of the OpenID Connect provider
  • feat: add support for base HTML element when discovering feeds
  • feat: add support for aside HTML element in entry content
  • feat: Add option to disable local auth form
  • feat: add license info to Javascript files for LibreJS compatibility
  • feat: add FETCH_BILIBILI_WATCH_TIME config option
  • docs: update links to filtering rules
  • chore: avoid using legacy key/value format in Dockerfile
  • build(deps): bump golang.org/x/oauth2 from 0.21.0 to 0.22.0
  • build(deps): bump golang.org/x/net from 0.27.0 to 0.28.0
  • build(deps): bump golang.org/x/crypto from 0.25.0 to 0.26.0
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.20.36 to 2.20.37
  • build(deps): bump github.com/prometheus/client_golang
  • build: update GitHub Actions to Go 1.23
  • build: publish OCI images only if PUBLISH_DOCKER_IMAGES=true
  • build: bump Alpine Linux build image to v3.20
  • build: add sha256 checksum file for published binaries

Miniflux 2.1.4

10 Jul 04:21
2.1.4
Compare
Choose a tag to compare
  • test: add unit tests for IsModified() behaviour
  • refactor: improve YouTube page feed detection
  • fix(ui): settings form is not populated correctly after validation errors
  • fix(ui): playback speed indicator precision
  • fix(ui): playback speed indicator on shared entries
  • fix(integration): preserve existing Pinboard bookmarks
  • fix(googlereader): set CrawlTimeMsec to the correct precision
  • fix(build): failed to solve container image arm64v8/golang:1.22-bookworm
  • fix(build): add distroless suffix on latest tag in GitHub workflow
  • fix: use ETag as a stronger validator than Last-Modified
  • fix: update theverge.com rewrite rule to avoid duplicate image
  • fix: incorrect Go package comment reader/readingtime
  • fix: error out for improper rewrite regexp when processing feed entries
  • fix: ensures that session cookies are not expiring before the session is cleaned up from the database as per CLEANUP_REMOVE_SESSIONS_DAYS
  • fix: <img> aspect ratio with height: auto
  • feat(ui): add viewport-fit=cover
  • feat(sanitizer): add support for HTML hidden attribute
  • feat(locale): update French translations
  • feat(integration): add Raindrop integration
  • feat(integration): add feed name to Telegram message
  • feat(integration): add Betula integration
  • feat: use of insecure TLS ciphers when "Allow self-signed or invalid certificates" is enabled to workaround some broken websites
  • feat: discover feeds from a Youtube playlist pages
  • feat: add navigation to last/first page
  • feat: add global block and keep filters
  • feat: add description field to feed settings
  • feat: add pitchfork.com scraping rule
  • feat: add FETCH_NEBULA_WATCH_TIME config option
  • Bump github.com/PuerkitoBio/goquery from 1.9.1 to 1.9.2
  • Bump github.com/prometheus/client_golang from 1.19.0 to 1.19.1
  • build(deps): bump library/alpine in /packaging/docker/alpine
  • build(deps): bump golangci/golangci-lint-action from 4 to 6
  • build(deps): bump golang.org/x/term from 0.19.0 to 0.22.0
  • build(deps): bump golang.org/x/oauth2 from 0.19.0 to 0.21.0
  • build(deps): bump golang.org/x/net from 0.22.0 to 0.27.0
  • build(deps): bump golang.org/x/crypto from 0.24.0 to 0.25.0
  • build(deps): bump github.com/yuin/goldmark from 1.7.1 to 1.7.4
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.20.20 to 2.20.36
  • build(deps): bump github.com/coreos/go-oidc/v3 from 3.10.0 to 3.11.0
  • build(deps): bump docker/build-push-action from 5 to 6

Miniflux 2.1.3

27 Apr 22:56
2.1.3
Compare
Choose a tag to compare
  • api: rand.Intn(math.MaxInt64) causes tests to fail on 32-bit architectures (use rand.Int() instead)
  • ci: use docker/metadata-action instead of deprecated shell-scripts
  • database: remove entries_feed_url_idx index because entry URLs can exceeds btree index size limit
  • finder: find feeds from YouTube playlist
  • http/response: add brotli compression support
  • integration/matrix: fix function name in comment
  • packaging: specify container registry explicitly (e.g., Podman does not use docker.io by default)
  • packaging: use make miniflux instead of duplicating go build arguments (this leverages Go's PIE build mode)
  • reader/fetcher: add brotli content encoding support
  • reader/processor: minimize feed entries HTML content
  • reader/rewrite: add a rule for oglaf.com
  • storage: change GetReadTime() function to use entries_feed_id_hash_key index
  • ui: add seek and speed controls to media player
  • ui: add tag entries page
  • ui: fix JavaScript error when clicking on unread counter
  • ui: use FORCE_REFRESH_INTERVAL config for category refresh
  • Bump github.com/tdewolff/minify/v2 from 2.20.19 to 2.20.20
  • Bump golang.org/x/net from 0.22.0 to 0.24.0
  • Bump golang.org/x/term from 0.18.0 to 0.19.0
  • Bump golang.org/x/oauth2 from 0.18.0 to 0.19.0
  • Bump github.com/yuin/goldmark from 1.7.0 to 1.7.1

Miniflux 2.1.2

30 Mar 22:08
2.1.2
Compare
Choose a tag to compare
  • api: rewrite API integration tests without build tags
  • ci: add basic ESLinter checks
  • ci: enable go-critic linter and fix various issues detected
  • ci: fix JavaScript linter path in GitHub Actions
  • cli: avoid misleading error message when creating an admin user automatically
  • config: add FILTER_ENTRY_MAX_AGE_DAYS option
  • config: bump the number of simultaneous workers
  • config: rename PROXY_* options to MEDIA_PROXY_*
  • config: use crypto.GenerateRandomBytes instead of doing it by hand
  • http/request: refactor conditions to be more idiomatic
  • http/response: remove legacy X-XSS-Protection header
  • integration/rssbrige: fix rssbrige import
  • integration/shaarli: factorize the header+payload concatenation as data
  • integration/shaarli: no need to base64-encode then remove the padding when we can simply encode without padding
  • integration/shaarli: the JWT token was declared as using HS256 as algorithm, but was using HS512
  • integration/webhook: add category title to request body
  • locale: update Turkish translations
  • man page: sort config options in alphabetical order
  • mediaproxy: reduce the internal indentation of ProxifiedUrl by inverting some conditions
  • mediaproxy: simplify and refactor the package
  • model: replace Optional{Int,Int64,Float64} with a generic function OptionalNumber()
  • model: use struct embedding for FeedCreationRequestFromSubscriptionDiscovery to reduce code duplication
  • reader/atom: avoid debug message when the date is empty
  • 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
  • reader/atom: Move the population of the feed's entries into a new function, to make BuildFeed easier to understand/separate concerns/implementation details
  • reader/atom: refactor Atom parser to use an adapter
  • reader/atom: use sort+compact instead of compact+sort to remove duplicates
  • reader/atom: when detecting the format, detect its version as well
  • reader/encoding: inline a one-liner function
  • reader/handler: fix force refresh feature
  • reader/json: refactor JSON Feed parser to use an adapter
  • reader/media: remove a superfluous error-check: strconv.ParseInt returns 0 when passed an empty string
  • reader/media: simplify switch-case by moving a common condition above it
  • reader/processor: compile block/keep regex only once per feed
  • reader/rdf: refactor RDF parser to use an adapter
  • reader/rewrite: inline some one-line functions
  • reader/rewrite: simplify removeClickbait
  • reader/rewrite: transform a free-standing function into a method
  • reader/rewrite: use a proper constant instead of a magic number in applyFuncOnTextContent
  • reader/rss: add support for <media:category> element
  • reader/rss: don't add empty tags to RSS items
  • reader/rss: refactor RSS parser to use a default namespace to avoid some limitations of the Go XML parser
  • reader/rss: refactor RSS Parser to use an adapter
  • reader/rss: remove some duplicated code in RSS parser
  • reader: ensure that enclosure URLs are always absolute
  • reader: move iTunes and GooglePlay XML definitions to their own packages
  • reader: parse podcast categories
  • reader: remove trailing space in SiteURL and FeedURL
  • storage: do not store empty tags
  • storage: simplify removeDuplicates() to use a sort+compact construct instead of doing it by hand with a hashmap
  • storage: Use plain strings concatenation instead of building an array and then joining it
  • timezone: make sure the tests pass when the timezone database is not installed on the host
  • ui/css: align min-width with the other min-width values
  • ui/css: fix regression: "Add to Home Screen" button is unreadable
  • ui/js: don't use lambdas to return a function, use directly the function instead
  • ui/js: enable trusted-types
  • ui/js: fix download button loading label
  • ui/js: fix JavaScript error on the login page when the user not authenticated
  • ui/js: inline one-line functions
  • ui/js: inline some querySelectorAll calls
  • ui/js: reduce the scope of some variables
  • ui/js: remove a hack for "Chrome 67 and earlier" since it was released in 2018
  • ui/js: replace DomHelper.findParent with .closest
  • ui/js: replace let with const
  • ui/js: simplify DomHelper.getVisibleElements by using a filter instead of a loop with an index
  • ui/js: use a Set instead of an array in a KeyboardHandler's member
  • ui/js: use some ternaries where it makes sense
  • ui/static: make use of HashFromBytes everywhere
  • ui/static: set minifier ECMAScript version
  • ui: add keyboard shortcuts for scrolling to top/bottom of the item list
  • ui: add media player control playback speed
  • ui: remove unused variables and improve JSON decoding in saveEnclosureProgression()
  • validator: display an error message on edit feed page when the feed URL is not unique
  • Bump github.com/coreos/go-oidc/v3 from 3.9.0 to 3.10.0
  • Bump github.com/go-webauthn/webauthn from 0.10.1 to 0.10.2
  • Bump github.com/tdewolff/minify/v2 from 2.20.18 to 2.20.19
  • Bump google.golang.org/protobuf from 1.32.0 to 1.33.0

Miniflux 2.1.1

10 Mar 18:58
2.1.1
Compare
Choose a tag to compare
  • Move search form to a dedicated page
  • Add Readeck integration
  • Add feed option to disable HTTP/2 to avoid fingerprinting
  • Add Enter key as a hotkey to open selected item
  • Proxify video element poster attribute
  • Add a couple of new possible locations for feeds
    • Hugo likes to generate index.xml
    • feed.atom and feed.rss are used by enterprise-scale/old-school gigantic CMS
  • Fix categories import from Thunderbird's OPML
  • Fix logo misalignment when using languages that are more verbose than English
  • Google Reader: Do not return a 500 error when no items is returned
  • Handle RDF feeds with duplicated <title> elements
  • Sort integrations alphabetically
  • Add more URL validation in media proxy
  • Add unit test to ensure each translation has the correct number of plurals
  • Add missing plurals for some languages
  • 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.
  • Makefile: do not force CGO_ENABLED=0 for miniflux target
  • Add GitHub Action pipeline to build packages on-demand
  • Remove Golint (deprecated), use staticcheck and golangci-lint instead
  • Build amd64/arm64 Debian packages with CGO disabled
  • Update go.mod and add .exe suffix to Windows binary
  • Add a couple of fuzzers
  • Fix CodeQL workflow
  • Code and performance improvements:
    • Use an io.ReadSeeker instead of an io.Reader to parse feeds
    • Speed up the sanitizer:
      • Allow Youtube URLs to start with www
      • Use strings.Builder instead of a bytes.Buffer
      • Use a strings.NewReader instead of a bytes.NewBufferString
      • Sprinkles a couple of continue to make the code-flow more obvious
      • Inline calls to inList, and put their parameters in the right order
      • Simplify isPixelTracker
      • 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.)
      • Add a benchmark
      • 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
      • Use constant time access for maps instead of iterating on them
      • Build a ~large whitelist map inline instead of constructing it item by item (and remove a duplicate key/value pair)
      • Use slices instead of hand-rolled loops
        collector/allocator involvements.
    • Reuse a Reader instead of copying to a buffer when parsing an Atom feed
    • Preallocate memory when exporting to OPML: This should marginally increase performance when exporting a large amount of feeds to OPML
    • 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
    • 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
    • Simplify and optimize genericProxyRewriter
      • 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.
      • Factorize the proxying conditions into a shouldProxy function to reduce the copy-pasta.
    • Speed up removeUnlikelyCandidates: .Not returns a brand new Selection, copied element by element
    • Improve EstimateReadingTime's speed by a factor 7
      • Refactorise the tests and add some
      • Use 250 signs instead of the whole text
      • Only check for Korean, Chinese and Japanese script
      • Add a benchmark
      • Use a more idiomatic control flow
    • 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.
    • 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
    • Add missing regex anchor detected by CodeQL
    • Don't mix up slices capacity and length
    • Use prepared statements for intervals, ArchiveEntries and updateEnclosures
    • Use modern for-loops introduced with Go 1.22
    • 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
    • Close resources as soon as possible, instead of using defer() in a loop
    • Remove superfluous escaping in a regex
    • Use strings.ReplaceAll instead of strings.Replace(…, -1)
    • Use strings.EqualFold instead of strings.ToLower(…) ==
    • Use .WriteString( instead of .Write([]byte(…
    • Use %q instead of "%s"
    • Make internal/worker/worker.go read-only
    • Use a switch-case construct in internal/locale/plural.go instead of an avalanche of if
    • Template functions: simplify formatFileSize and duration implementation
    • Inline some templating functions
    • Make use of printer.Print when possible
    • Add a printer.Print to internal/locale/printer.go: No need to use variadic functions with string format interpolation to generate static strings
    • 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
    • Build the map inline in CountAllFeeds(): No need to build an empty map to then add more fields in it one by one
    • Miscellaneous improvements to internal/reader/subscription/finder.go:
      • Surface localizedError in FindSubscriptionsFromWellKnownURLs via slog
      • Use an inline declaration for new subscriptions, like done elsewhere in the
        file, if only for consistency's sake
      • Preallocate the subscriptions slice when using an RSS-bridge,
    • Use an update-where for MarkCategoryAsRead instead of a subquery
    • Simplify CleanOldUserSessions' query: No need for a subquery, filtering on created_at directly is enough
    • Simplify cleanupEntries' query
      • NOT (hash=ANY(%4)) can be expressed as hash NOT IN $4
      • There is no need for a subquery operating on the same table, moving the conditions out is equivalent.
    • Reformat ArchiveEntries's query for consistency's sake and replace the =ANY with an IN
    • Reformat the query in GetEntryIDs and GetReadTime's query for consistency's sake
    • 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
    • Add some tests for add_image_title
    • 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
    • Simplify internal/reader/icon/finder.go:
      • Use a simple regex to parse data uri instead of a hand-rolled parser, and document what fields are considered mandatory.
      • Use case-insensitive matching to find (fav)icons, instead of doing the same query twice with different letter cases
      • Add apple-touch-icon-precomposed.png as a fallback favicon
      • 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.
      • Minor factorisation in findIconURLsFromHTMLDocument
    • Small refactoring of internal/reader/date/parser.go:
      • 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.
      • Be more strict when it comes to timezones, previously invalid ones like -13 were accepted. Also add a test for this.
      • Bail out early if the date is an empty string.
    • Make use of Go ≥ 1.21 slices package instead of hand-rolled loops
    • Reorder the fields of the Entry struct to save some memory
  • Dependencies update:
    • Bump golang.org/x/oauth2 from 0.17.0 to 0.18.0
    • Bump github.com/prometheus/client_golang from 1.18.0 to 1.19.0
    • Bump github.com/tdewolff/minify/v2 from 2.20.16 to 2.20.18
    • Bump github.com/PuerkitoBio/goquery from 1.8.1 to 1.9.1
    • Bump golang.org/x/crypto from 0.19.0 to 0.20.0
    • Bump github.com/go-jose/go-jose/v3 from 3.0.1 to 3.0.3

Miniflux 2.1.0

17 Feb 21:20
2.1.0
Compare
Choose a tag to compare
  • Add Linkwarden integration
  • Add LinkAce integration
  • Add FORCE_REFRESH_INTERVAL config option
  • Add item-meta-info-reading-time CSS class
  • Add add_dynamic_iframe rewrite function
  • Add attribute data-original-mos to add_dynamic_image rewrite candidates
  • Update entry processor to allow blocking/keeping entries by tags and/or authors
  • Change default Accept header when fetching feeds
  • Rewrite relative RSS Bridge URL to absolute URL
  • Use numeric user ID in Alpine and distroless container image (avoid securityContext error in Kubernetes)
  • Always try to use HTTP/2 when fetching feeds if available
  • Add type attribute in OPML export as per OPML 2.0 specs
  • Fix missing translation argument for the key error.unable_to_parse_feed
  • Fix Debian package builder when using Go 1.22 and armhf architecture
  • Fix typo in log message
  • Fix incorrect label shown when saving an article
  • Fix incorrect condition in refresh feeds cli
  • Fix incorrect label for attribute
  • Add missing label ID for custom CSS field
  • Accessibility improvements:
    • Add workaround for macOS VoiceOver that didn't announce details and summary when expanded
    • Add alert role to alert message element
    • Add a h2 heading to the article element so that the screen reader users can navigate the article through the heading level
    • Add an aria-label attribute for the article element for screen readers
    • Remove the icon image alt attribute in feeds list to prevent screen reader to announce it before entry title
    • Add sr-only CSS class for screen reader users (provides more context)
    • Differentiate between buttons and links
    • Change links that could perform actions to buttons
    • Improve translation of hidden Aria elements
    • Remove the redundant article role
    • Add a search landmark for the search form so that the screen reader users can navigate to it
    • Add skip to content link
    • Add nav landmark to page header links
  • Limit feed/category entry pagination to unread entries when coming from unread entry list
  • Update German translation
  • Update GitHub Actions to Go 1.22
  • Bump golang.org/x/term from 0.16.0 to 0.17.0
  • Bump github.com/google/uuid from 1.5.0 to 1.6.0
  • Bump github.com/yuin/goldmark from 1.6.0 to 1.7.0
  • Bump golang.org/x/oauth2 from 0.15.0 to 0.17.0
  • Bump github.com/tdewolff/minify/v2 from 2.20.10 to 2.20.12
  • Bump golang.org/x/term from 0.15.0 to 0.16.0
  • Bump github.com/prometheus/client_golang from 1.17.0 to 1.18.0
  • Bump github.com/tdewolff/minify/v2 from 2.20.9 to 2.20.16
  • Bump golang.org/x/crypto from 0.16.0 to 0.19.0
  • Bump github.com/go-webauthn/webauthn from 0.9.4 to 0.10.1
  • Bump golang.org/x/net from 0.20.0 to 0.21.0