Releases: miniflux/v2
Releases · miniflux/v2
Miniflux 2.2.4
- test(rewrite): add unit test for referer rewrite function
- refactor(subscription): use
strings.HasSuffix
instead of a regex inFindSubscriptionsFromYouTubePlaylistPage
- refactor(sanitizer): use
token.String()
instead ofhtml.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
withtext-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 ofmath.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
to3.21
- build(deps): bump
golang.org/x/term
from0.26.0
to0.27.0
- build(deps): bump
golang.org/x/net
from0.31.0
to0.33.0
- build(deps): bump
golang.org/x/crypto
from0.30.0
to0.31.0
- build(deps): bump
github.com/tdewolff/minify/v2
from2.21.1
to2.21.2
Miniflux 2.2.3
- 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
from0.19.0
to0.20.0
- build(deps): bump
golang.org/x/term
from0.25.0
to0.26.0
- build(deps): bump
golang.org/x/oauth2
from0.23.0
to0.24.0
- build(deps): bump
golang.org/x/net
from0.30.0
to0.31.0
- build(deps): bump
golang.org/x/crypto
from0.28.0
to0.29.0
Miniflux 2.2.2
- 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
from0.29.0
to0.30.0
- build(deps): bump
github.com/yuin/goldmark
from1.7.4
to1.7.8
- build(deps): bump
github.com/tdewolff/minify/v2
from2.20.37
to2.21.1
- build(deps): bump
github.com/prometheus/client_golang
- build(deps): bump
github.com/andybalholm/brotli
from1.1.0
to1.1.1
Miniflux 2.2.1
- 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
from0.23.0
to0.24.0
- build(deps): bump
golang.org/x/oauth2
from0.22.0
to0.23.0
- build(deps): bump
golang.org/x/net
from0.28.0
to0.29.0
- build(deps): bump
github.com/PuerkitoBio/goquery
from1.9.2
to1.10.0
- build(deps): bump
github.com/prometheus/client_golang
from1.20.3
to1.20.4
- build(deps): bump
github.com/go-webauthn/webauthn
from0.10.2
to0.11.2
- build: update go.mod to Go 1.23
- build: bump devcontainer version to Go 1.23
Miniflux 2.2.0
- 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 ofr.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 returnnil
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
from0.21.0
to0.22.0
- build(deps): bump
golang.org/x/net
from0.27.0
to0.28.0
- build(deps): bump
golang.org/x/crypto
from0.25.0
to0.26.0
- build(deps): bump
github.com/tdewolff/minify/v2
from2.20.36
to2.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
- 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 onlatest
tag in GitHub workflow - fix: use
ETag
as a stronger validator thanLast-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 withheight: 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
from1.9.1
to1.9.2
- Bump
github.com/prometheus/client_golang
from1.19.0
to1.19.1
- build(deps): bump
library/alpine
in/packaging/docker/alpine
- build(deps): bump
golangci/golangci-lint-action
from4
to6
- build(deps): bump
golang.org/x/term
from0.19.0
to0.22.0
- build(deps): bump
golang.org/x/oauth2
from0.19.0
to0.21.0
- build(deps): bump
golang.org/x/net
from0.22.0
to0.27.0
- build(deps): bump
golang.org/x/crypto
from0.24.0
to0.25.0
- build(deps): bump
github.com/yuin/goldmark
from1.7.1
to1.7.4
- build(deps): bump
github.com/tdewolff/minify/v2
from2.20.20
to2.20.36
- build(deps): bump
github.com/coreos/go-oidc/v3
from3.10.0
to3.11.0
- build(deps): bump
docker/build-push-action
from5
to6
Miniflux 2.1.3
api
:rand.Intn(math.MaxInt64)
causes tests to fail on 32-bit architectures (userand.Int()
instead)ci
: usedocker/metadata-action
instead of deprecated shell-scriptsdatabase
: removeentries_feed_url_idx
index because entry URLs can exceeds btree index size limitfinder
: find feeds from YouTube playlisthttp/response
: add brotli compression supportintegration/matrix
: fix function name in commentpackaging
: specify container registry explicitly (e.g., Podman does not usedocker.io
by default)packaging
: usemake miniflux
instead of duplicatinggo build
arguments (this leverages Go's PIE build mode)reader/fetcher
: add brotli content encoding supportreader/processor
: minimize feed entries HTML contentreader/rewrite
: add a rule foroglaf.com
storage
: changeGetReadTime()
function to useentries_feed_id_hash_key
indexui
: add seek and speed controls to media playerui
: add tag entries pageui
: fix JavaScript error when clicking on unread counterui
: useFORCE_REFRESH_INTERVAL
config for category refresh- Bump
github.com/tdewolff/minify/v2
from2.20.19
to2.20.20
- Bump
golang.org/x/net
from0.22.0
to0.24.0
- Bump
golang.org/x/term
from0.18.0
to0.19.0
- Bump
golang.org/x/oauth2
from0.18.0
to0.19.0
- Bump
github.com/yuin/goldmark
from1.7.0
to1.7.1
Miniflux 2.1.2
api
: rewrite API integration tests without build tagsci
: add basic ESLinter checksci
: enable go-critic linter and fix various issues detectedci
: fix JavaScript linter path in GitHub Actionscli
: avoid misleading error message when creating an admin user automaticallyconfig
: addFILTER_ENTRY_MAX_AGE_DAYS
optionconfig
: bump the number of simultaneous workersconfig
: renamePROXY_*
options toMEDIA_PROXY_*
config
: usecrypto.GenerateRandomBytes
instead of doing it by handhttp/request
: refactor conditions to be more idiomatichttp/response
: remove legacyX-XSS-Protection
headerintegration/rssbrige
: fix rssbrige importintegration/shaarli
: factorize the header+payload concatenation as dataintegration/shaarli
: no need to base64-encode then remove the padding when we can simply encode without paddingintegration/shaarli
: the JWT token was declared as using HS256 as algorithm, but was using HS512integration/webhook
: add category title to request bodylocale
: update Turkish translationsman page
: sort config options in alphabetical ordermediaproxy
: reduce the internal indentation ofProxifiedUrl
by inverting some conditionsmediaproxy
: simplify and refactor the packagemodel
: replaceOptional{Int,Int64,Float64}
with a generic functionOptionalNumber()
model
: use struct embedding forFeedCreationRequestFromSubscriptionDiscovery
to reduce code duplicationreader/atom
: avoid debug message when the date is emptyreader/atom
: changeif !a { a = } if !a {a = }
constructs intoif !a { a = ; if !a {a = }}
to reduce the number of comparisons and improve readabilityreader/atom
: Move the population of the feed's entries into a new function, to make BuildFeed easier to understand/separate concerns/implementation detailsreader/atom
: refactor Atom parser to use an adapterreader/atom
: usesort+compact
instead ofcompact+sort
to remove duplicatesreader/atom
: when detecting the format, detect its version as wellreader/encoding
: inline a one-liner functionreader/handler
: fix force refresh featurereader/json
: refactor JSON Feed parser to use an adapterreader/media
: remove a superfluous error-check:strconv.ParseInt
returns0
when passed an empty stringreader/media
: simplify switch-case by moving a common condition above itreader/processor
: compile block/keep regex only once per feedreader/rdf
: refactor RDF parser to use an adapterreader/rewrite
: inline some one-line functionsreader/rewrite
: simplifyremoveClickbait
reader/rewrite
: transform a free-standing function into a methodreader/rewrite
: use a proper constant instead of a magic number inapplyFuncOnTextContent
reader/rss
: add support for<media:category>
elementreader/rss
: don't add empty tags to RSS itemsreader/rss
: refactor RSS parser to use a default namespace to avoid some limitations of the Go XML parserreader/rss
: refactor RSS Parser to use an adapterreader/rss
: remove some duplicated code in RSS parserreader
: ensure that enclosure URLs are always absolutereader
: move iTunes and GooglePlay XML definitions to their own packagesreader
: parse podcast categoriesreader
: remove trailing space inSiteURL
andFeedURL
storage
: do not store empty tagsstorage
: simplifyremoveDuplicates()
to use asort
+compact
construct instead of doing it by hand with a hashmapstorage
: Use plain strings concatenation instead of building an array and then joining ittimezone
: make sure the tests pass when the timezone database is not installed on the hostui/css
: alignmin-width
with the othermin-width
valuesui/css
: fix regression: "Add to Home Screen" button is unreadableui/js
: don't use lambdas to return a function, use directly the function insteadui/js
: enable trusted-typesui/js
: fix download button loading labelui/js
: fix JavaScript error on the login page when the user not authenticatedui/js
: inline one-line functionsui/js
: inline somequerySelectorAll
callsui/js
: reduce the scope of some variablesui/js
: remove a hack for "Chrome 67 and earlier" since it was released in 2018ui/js
: replaceDomHelper.findParent
with.closest
ui/js
: replacelet
withconst
ui/js
: simplifyDomHelper.getVisibleElements
by using afilter
instead of a loop with an indexui/js
: use aSet
instead of an array in aKeyboardHandler
's memberui/js
: use some ternaries where it makes senseui/static
: make use ofHashFromBytes
everywhereui/static
: set minifier ECMAScript versionui
: add keyboard shortcuts for scrolling to top/bottom of the item listui
: add media player control playback speedui
: remove unused variables and improve JSON decoding insaveEnclosureProgression()
validator
: display an error message on edit feed page when the feed URL is not unique- Bump
github.com/coreos/go-oidc/v3
from3.9.0
to3.10.0
- Bump
github.com/go-webauthn/webauthn
from0.10.1
to0.10.2
- Bump
github.com/tdewolff/minify/v2
from2.20.18
to2.20.19
- Bump
google.golang.org/protobuf
from1.32.0
to1.33.0
Miniflux 2.1.1
- 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
elementposter
attribute - Add a couple of new possible locations for feeds
- Hugo likes to generate
index.xml
feed.atom
andfeed.rss
are used by enterprise-scale/old-school gigantic CMS
- Hugo likes to generate
- 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
andrev-parse
stderr: When building from a tarball instead of a cloned git repo, there would be twofatal: not a git repository
errors emitted even though the build succeeds. This is because of howVERSION
andCOMMIT
are set in the Makefile. This PR suppresses the stderr for these variable assignments. - Makefile: do not force
CGO_ENABLED=0
forminiflux
target - Add GitHub Action pipeline to build packages on-demand
- Remove Golint (deprecated), use
staticcheck
andgolangci-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 anio.Reader
to parse feeds - Speed up the sanitizer:
- Allow Youtube URLs to start with
www
- Use
strings.Builder
instead of abytes.Buffer
- Use a
strings.NewReader
instead of abytes.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.
- Allow Youtube URLs to start with
- 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 newSelection
, 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
andupdateEnclosures
- 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 ofstrings.Replace(…, -1)
- Use
strings.EqualFold
instead ofstrings.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 ofif
- Template functions: simplify
formatFileSize
andduration
implementation - Inline some templating functions
- Make use of
printer.Print
when possible - Add a
printer.Print
tointernal/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
inFindSubscriptionsFromWellKnownURLs
viaslog
- 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,
- Surface
- Use an update-where for
MarkCategoryAsRead
instead of a subquery - Simplify
CleanOldUserSessions
' query: No need for a subquery, filtering oncreated_at
directly is enough - Simplify
cleanupEntries
' queryNOT (hash=ANY(%4))
can be expressed ashash 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 anIN
- Reformat the query in
GetEntryIDs
andGetReadTime
's query for consistency's sake - Simplify
WeeklyFeedEntryCount
: No need for aBETWEEN
: 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 fallbackfavicon
- 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
- Use an
- Dependencies update:
- Bump
golang.org/x/oauth2
from0.17.0
to0.18.0
- Bump
github.com/prometheus/client_golang
from1.18.0
to1.19.0
- Bump
github.com/tdewolff/minify/v2
from2.20.16
to2.20.18
- Bump
github.com/PuerkitoBio/goquery
from1.8.1
to1.9.1
- Bump
golang.org/x/crypto
from0.19.0
to0.20.0
- Bump
github.com/go-jose/go-jose/v3
from3.0.1
to3.0.3
- Bump
Miniflux 2.1.0
- 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
toadd_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
andsummary
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
- Add workaround for macOS VoiceOver that didn't announce
- 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
from0.16.0
to0.17.0
- Bump
github.com/google/uuid
from1.5.0
to1.6.0
- Bump
github.com/yuin/goldmark
from1.6.0
to1.7.0
- Bump
golang.org/x/oauth2
from0.15.0
to0.17.0
- Bump
github.com/tdewolff/minify/v2
from2.20.10
to2.20.12
- Bump
golang.org/x/term
from0.15.0
to0.16.0
- Bump
github.com/prometheus/client_golang
from1.17.0
to1.18.0
- Bump
github.com/tdewolff/minify/v2
from2.20.9
to2.20.16
- Bump
golang.org/x/crypto
from0.16.0
to0.19.0
- Bump
github.com/go-webauthn/webauthn
from0.9.4
to0.10.1
- Bump
golang.org/x/net
from0.20.0
to0.21.0