Releases: miniflux/v2
Releases · miniflux/v2
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
Miniflux 2.0.51
- Add Omnivore integration
- Fixes for the regressions introduced in version 2.0.50:
- Ensure all HTML documents are encoded in UTF-8
- Send default User-Agent and HTTP caching headers when making HTTP requests
- Allow Youtube links to be opened outside the
iframe
(avoidERR_BLOCKED_BY_RESPONSE
error) - Fix inaccessible metrics endpoint when listening on Unix socket
- Allow renaming and moving feed at the same time in the Google Reader API
- Log
nb_jobs
only when number of jobs is larger than 0 in background scheduler - Deduplicate feed URLs when parsing HTML document during discovery process
- Calculate a virtual weekly count based on the average updating frequency (
POLLING_SCHEDULER=entry_frequency
) - Update GitHub Actions workflow to be able to run the linter and tests on-demand
- Add
SCHEDULER_ROUND_ROBIN_MIN_INTERVAL
config option - Add links to GitHub for the commit hash and the version in the about page
- Use "starred" rather than "bookmarked" in English translation
- Update Chinese (CN & TW) translation
- Bump
github.com/google/uuid
from1.4.0
to1.5.0
- Bump
github.com/coreos/go-oidc/v3
from3.7.0
to3.9.0
- Bump
github.com/tdewolff/minify/v2
from2.20.6
to2.20.9
- Bump
github.com/go-webauthn/webauthn
from0.8.6
to0.9.4
- Bump
golang.org/x/oauth2
from0.14.0
to0.15.0
Miniflux 2.0.50
- Add WebAuthn / Passkey integration
- Add RSS-Bridge integration
- Take RSS TTL field into consideration to schedule next check date
- Show number of visible entries instead of number of read entries in feed list
- OpenID Connect: Redirect to configured user home page after successful authentication
- Google Reader API fixes:
user/{userID}/state/com.google/read
is missing in categories section for read entries- Take
ExcludeTargets
into consideration in feed stream handler
- Allow iframes pointing to Twitch videos
- Filter feed entries based on URL or title
- Take into consideration
hide_globally
property defined for categories in/v1/entries
API endpoint - Add category ID to webhooks request body
- Update date parser to parse more invalid date formats
- Refactor feed discovery handler, and avoid an extra HTTP request if the URL provided is the feed
- Refactor HTTP Client and
LocalizedError
packages - Refactor Batch Builder, and prevent accidental and excessive refreshes from the web UI
- Refactor icon finder:
- Continue the discovery process when the feed icon is invalid
- Search all icons from the HTML document and do not stop on the first one
- Add support for SVG icons with data URL without encoding
- Expose
next_check_at
in the web ui and API - Add database indexes to improve performance
- Change log level to warning for failed feeds refresh in cronjob
- Do not log website without icon as warning
- Add GitHub workflow to build binaries
- Add GitHub extensions to devcontainer
- Make sure to pull the latest base image when building the Docker image
- Strip version prefix when building Debian package
- Add
github-cli
anddocker-outside-of-docker
features to devcontainer - Bump
golang.org/x/*
dependencies - Bump
github.com/gorilla/mux
from1.8.0
to1.8.1
- Bump
github.com/tdewolff/minify/v2
from2.19.9
to2.20.6
- Bump
github.com/yuin/goldmark
from1.5.6
to1.6.0
- Bump
github.com/coreos/go-oidc/v3
from3.6.0
to3.7.0
Miniflux 2.0.49
- Implement structured logging using
log/slog
package. New config options available:LOG_FORMAT
:json
ortext
LOG_LEVEL
:debug
,info
,warning
, orerror
LOG_FILE
:sdterr
,stdout
, or a file path- The
DEBUG
option is now deprecated in favor ofLOG_LEVEL
- API Improvements:
- Add endpoint
/v1/version
- Add endpoint
PUT /v1/entries
to update entry title and content - Add endpoint
/v1/icons/{iconID}
- Add endpoint
/v1/flush-history
to flush history - Make the category optional when creating feeds for API clients who don't support categories
- Add enclosures to
GET /v1/entries
endpoint - Add
published_after
,published_before
,changed_after
andchanged_before
options to/v1/entries
endpoint
- Add endpoint
- Telegram integration improvements:
- Replace feed HTML link with a button to avoid page preview issues
- Add the possibility to disable buttons
- Add Bruno Miniflux API collection in
contrib
folder (Bruno is an open source alternative to Postman/Insomnia) - Add command line argument to export user feeds as OPML
- Add new rewrite rules
add_hn_links_using_hack
andadd_hn_links_using_opener
to open HN comments with iOS apps - Fix timestamp format for
Expires
response header - Fix Javascript error when reading time option is disabled
- Fix Apprise logic to handle feed service URLs
- Fix missing word in force refresh message
- Remove deprecated
PreferServerCipherSuites
TLS option - Replace
github.com/rylans/getlang
withgithub.com/abadojack/whatlanggo
becausegetlang
doesn't seems to be updated anymore - Bump
github.com/mccutchen/go-httpbin/v2
from2.11.0
to2.11.1
- Bump
golang.org/x/*
dependencies