Releases: miniflux/v2
Releases · miniflux/v2
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
Miniflux 2.0.48
- Add generic webhook integration
- Send webhook events when new entries are detected
- Send wehbook events when saving an entry
- Sign the outgoing requests with HMAC-SHA256
- Improve Telegram integration
- Add built-in Telegram client
- Remove dependency on
go-telegram-bot-api
library - Add new options:
- Optional topic ID
- Disable page preview
- Disable notifications
- Add new button to go to article
- Improve Matrix integration
- Add built-in Matrix client
- Remove dependency on
gomatrix
library - Send HTML formatted messages to Matrix
- OpenID Connect authentication improvements:
- Add OAuth2 PKCE support
- Add
profile
scope to OIDC integration to support accounts without email address - Prevent empty username when using the OIDC integration
- Add
factor
forentry_frequency
scheduler:- Allow the user to increase the frequency of the
entry_frequency
scheduler by a configurable factor in order to shorten the time between
updates.
- Allow the user to increase the frequency of the
- Fix: status bar is unreadable when using PWA in dark mode on Firefox Android
- Group form fields into fieldsets to improve page layout
- Update Russian translation
- Make sure icon URLs are always absolute
- Add Apprise service URLs per feed
- Trim
username
andpassword
form fields - Strip HTML tags from DublinCore Creator tags
- Fix scroll up behavior on Firefox Android
- Add missing
return
statement infetchContent
UI handler - Add
replace_title
rewrite rule to adjust entry titles - Fix Pocket integration redirect URL and Google Reader API HREF
- Fix feed
hide_globally
property to use it with third-party clients.
Miniflux 2.0.47
- Update rules for
webtoons.com
- Use HTTP client from the standard library for third-party integrations
- Rename internal
url
package tourllib
to avoid overlap withnet/url
- Add Shaarli integration
- Add Shiori integration
- Add Apprise integration
- Add Readwise Reader integration
- Consider base path when generating third-party services API endpoint
- Use podcast duration tag as reading time
- Move internal packages to an
internal
folder- For reference: https://go.dev/doc/go1.4#internalpackages
- Rename Miniflux package name to follow Go module naming convention
- For reference: https://go.dev/ref/mod#major-version-suffixes
- Update RockyLinux image from 8 to 9 (used to build RPM package)
- Add force refresh in feed edit and feed entries page
- Use Odysee video duration as read time
- Upgrade to Go 1.21
- Use details disclosure element to show the list of third-party services
- Use Web Share API for sharing entry
- Add a workaround for parsing some invalid date format
- Add Thunder Client API collection into contrib folder
- Add new API endpoint:
/entries/{entryID}/save
- Trigger Docker and packages workflows only for semantic tags
- Go module versioning expect Git tags to start with the letter v.
- The goal is to keep the existing naming convention for generated artifacts and
have proper versioning for the Go module.
- Bump
golang.org/x/*
dependencies - Bump
github.com/yuin/goldmark
- Bump
github.com/tdewolff/minify/v2
- Bump
github.com/mccutchen/go-httpbin/v2
Miniflux 2.0.46
- Add scraper and rewrite rules for Webtoons
- Fix regression in integration page and simplify SQL query
- Wallabag integration: add more information in log messages
- Add support for custom Youtube embed URL
- Fix accessibility issues in modal component
- Fix modal aria role
- Trap focusing with tab / shift+tab inside the modal
- Restore keyboard focus when closing modal
- Automatically move keyboard focus to first focusable element unless specified otherwise
- Keyboard shortcut help modal: move keyboard focus to modal title
- Keyboard shortcut help modal: change close control from link to button
- Add Notion integration
- Update
golang.org/x/*
dependencies andgo-oidc
to v3.6.0 - Improve responsive design
- Add user setting for marking entry as read on view
- Improve Russian translation
- Add the possibility to run cleanup tasks from the command line
- Add the possibility to run Miniflux as a cronjob
- Use
go-httpbin
to run tests locally and avoid remote calls tohttpbin.org
- Display tags when viewing entries
- Update categories API endpoint to return
total_unread
andfeed_count
- Improve date parser to handle various broken date formats
- Avoid
pq: time zone displacement out of range
errors - Improve entry existance check to make better use of index
- Add unique index
enclosures_user_entry_url_idx
- Add mark as unread for Linkding integration
- Add sub-folder support for Wallabag integration
- Use RockyLinux to build RPM package
- Disable CGO when building RPM package
- Disable CGO when building Docker images