# Unreleased

# 1.4.4 - 2026-04-26

- NetBSD support thanks to @0323pin 
  - compilation option for `xdg-open`
  - installation instructions
- preparation for Windows support (just `enclosure_command` for now) thanks to @azinsharaf

# 1.4.3 - 2026-04-17

- chore: updated dependencies

# 1.4.2 - 2026-04-11

- bugfix: *eilmeldung* sometimes freezed when trying to select the next unread item

# 1.4.1 - 2026-04-07

- there are now two nix packages
  - `eilmeldung` tracks the latest release
  - `eilmelung-git` is the latest git version
- bugfix: `nextunread` now should reliably select the next unread feed list item after setting all articles in category or feed to read

# 1.4.0 - 2026-03-30
🪲 **A bug not reported, is a bug nonexistent!** Report any bugs via [GitHub Issues](https://github.com/christo-auer/eilmeldung/issues)! 🪲

- you can now **open links/images in articles** using the new **hints** feature
  ![eilmeldung hints are prepended before links](https://github.com/user-attachments/assets/1e4ddb3a-0dfc-4fbc-b5f5-377661bfecae)
  - in the article view links and images have *hint letters* prepended
  - press `; ;` and enter the hint to open the link/image in your webbrowser
  - press `; y` to copy the link  to the clipboard and `; s` to share it
  - combining hints with, e.g., the [feh](https://feh.finalrewind.org/) image viewer as a *share target*, can even be used to *open images from articles*; read more about how to achieve this in `docs/faq.md`  
  ![opening image links in feh](https://github.com/user-attachments/assets/b427eed1-ae1f-473f-88df-836fe4251367)

- **FULL DISCLOSURE**: with this release, eilmeldung uses a *different crate for rendering markdown* (derived from HTML). Before eilmeldung used [tui_markdown](https://docs.rs/tui-markdown/latest/tui_markdown/) whose development has stalled for the last few months. In particular, it is currently not yet possible to implement hints using `tui_markdown`. Since hints are a feature needed and requested in eilmeldung, I decided to implement my own *makeshift* ratatui markdown renderer crate [the_other_tui_markdown](https://crates.io/crates/the-other-tui-markdown). This crate is *vibe-coded* using *Claude LLM*. As soon as `tui_markdown` supports implementing hints, I will switch back. For the time being, I use my vibe-coded version. That said, the codebase of eilmeldung is still *hand-crafted* as before.



# 1.3.1 - 2026-03-25

- bugfix: when not notification service is running, eilmeldung is not crashing when notifying about new articles (there is an error message now). set `notify_after_sync=false` to deactivate notification.

# 1.3.0 - 2026-03-24

- Want to get a **desktop notification** after synchronization? *eilmeldung* now *notifies* you with new articles count and per new articles per feed!
  - By default, the new option `notify_after_sync` is set to `true` and uses [notify-rust](https://docs.rs/notify-rust/latest/notify_rust/) to generate a desktop notification on Linux via dbus (should also work under macos, though not tested)! This should work for most out-of-the-box if you have to have a working desktop notification system (which is usually installed by default unless you use something very customized).
  - Of course, you can customize the exact notification output to your likings (see `notify_after_sync_stats_format`)!
  - And if you want to call a *custom command* or *your fancy shell script*, you can do this by setting option `notify_after_sync_cmd`!
  - See the full documentation in `docs/configuration.md` *Notify after Sync*.
  - Happy notifying everyone!
- some minor bugfixes/imprvoements

# 1.2.4 - 2026-03-19

- this is a patch release squashing two irritating bugs (thanks to @luogni for reporting and helping to find the bug)
  - infinite loop when marking a query as read in feed list
  - fixed bug where two articles are marked at once


# 1.2.3 - 2026-03-16

- another hotfix :-/
  - removed optimization flags as they cause compilation errors in arch
  - updated github worksflows to latest version to prevent warnings

# 1.2.2 - 2026-03-16

- update github workflows

# 1.2.1 - 2026-03-16

- hotfix: compilation problem under arch fixed, `aws-lc-sys` dependency does not support optimization with `-O3`, must be `-O0`

# 1.2.0 - 2026-03-15

- **Important**: due to the update of the news-flash library you may need to logout and login again:
  - run `eilmeldung --logout`
  - or in *eilmeldung* run the command `LOGOUT NOW` (press `:` to open the command line)
- as [requested](https://github.com/christo-auer/eilmeldung/issues/200) by multiple users, eilmeldung now has basic **mouse support** (*disabled* by default)
  - thanks to @gwicho38 for the fork!
  - set `mouse_support = true` to enable
  - selection by clicking is supported in the feed and article list
  - scrolling support in the article list and the article content
  - drag the border between the articles and the content to resize (note that this overrides static layout settings from the config file)
- bugfix: 
  - flagging now persists when the article list is changed
  - updated news-flash library to 3.0.1 along with all other deps; the update of news-flash implements a workaround for some misbehaving webservers which deliver RSS content as `text/html`

# 1.1.0 - 2026-03-11

- 📢 Stay up-to-date! Subscribe to the [eilmeldung release atom feed](https://github.com/christo-auer/eilmeldung/releases.atom)! Press `c e` in eilmeldung to automatically add the feed!
- 🤖 Want to use your **AI/LLM chatbot with eilmeldung** to select and summarize articles? Or do you want eilmeldung to stay clear all this AI fuzz? Take part in the [survey (demo inside)](https://github.com/christo-auer/eilmeldung/issues/197) and let me know what you think!
- level up your workflow with 🚩s!
  - select (*flag*) multiple articles to execute bulk-operations
  - press `f` to flag articles and then press `r` to mark them as *read*
  - this also works for `m` (mark), `u` (unread), `t` (tag), `o` (open in browser), you get it!
  - `d` deletes a flag and `i` inverts it
  - the uppercase variants (`F`, `D`, `I`) operate on *all* articles and prepending `0` or `$` flags articles *before*/*after* the selected article
  - for *pro-users*: there are commands `flag`, `unflag` and `flaginvert` which even accept queries:
    - `flag unread today` selects all articles which are from today and unread
    - `unflag older:"1 hour ago"` unflags all articles which are older than one hour
  - there is even a new query key `flagged`! 🚩🚩🚩
- `nextunread` now also works in the feed list 
  - as you already now, pressing `r` in the *article list* automatically selects the next unread article
  - now this also works in the *feed list* (big thanks to @janbuchar for his PR!)
  - and when you press `r` in the article list and no unread article is left, *eilmeldung* automatically selects the next unread item in the feed list! How cool is that?!
- improvement: often used async operations are now non-blocking
- bugfixes
  - login setup now works as expected if a different provider is selected
  - marking articles while article content is focused now works as expected
  - tab-completion in command line now works more reliably

# 1.0.0 - 2026-03-06

- 🎉 **Version 1.0.0** 🎉 
  - for the last two months, I've incoporated all the helpful feedback from you, the users! Thanks to all of you!
  - as I feel *eilmeldung* is pretty much feature-complete, I've decided to go v1.0.0!
  - that said, if you have suggestions for improvements, feel free to crate an issue!
  - also, development of *eilmeldung* does not halt but will propably proceed in a slower pace with less (breaking) features
- you can now mark all articles *above* and *below* the selected articles as read (or unread, marked or unmarked)
  - the commands `read`, `unread`, `mark` and `unmark` accept `above` or `below` as scopes
  - there are default key mappings: `0 r` and `$ r` for marking all articles above/below (and including) the selected article as read. The same works for `u` (unread), `m` (mark) and `v` (unmark)
- configuration directory resolution is now a bit more flexible, in particular, using `~/.config/eilmeldung/` in macos is now possible. **eilmeldung** tries the following directories on startup:
  - `$XDG_CONFIG_HOME/eilmeldung/config.toml` on Linux **and** macos
  - if this doesn't exist: `$HOME/.config/eilmeldung/config.toml` on Linux **and** macos
  - if this doesn't exist
    - Linux: default config is used
    - macos: `~/Library/Application Support/org.christo-auer.eilmeldung/config.toml`
  - if none of the above exists, the default configuration is used
  - by using CLI arguments (see `docs/cli_args.md`) you can adjust the location of eilmeldung's `config.toml`, news-flash configuration and state directories
- optimiziation: batch commands (e.g., `startup_commands`) are now only blocking if they contain more than one entry

# 0.9.6 - 2026-02-25

- *first* things *first*
  - `eilmeldung` is now on [terminaltrove](https://terminaltrove.com/eilmeldung/)!
  - and also on [crates.io](https://crates.io/crates/eilmeldung) --- `cargo install eilmeldung` everybody!
- and here are some new features:
  - want more real estate? That is in eilmeldung at least? Set `show_top_bar = false` in `config.toml` to hide the top bar and gain one whole line of juicy news contents. The status icon is displayed at the bottom right after this.
  - new command `filtersticky` for filter queries which are applied everywhere
    - `filter` is applied to the current article list and deactivated as soon as another entry in the feed list is selected
    - `filtersticky` (same syntax as filter) defines a filter which is always applied (use `filterclear` or `+ r` to reset) 
  - new command `sortfeeds` (key binding `c s`) to sort all feeds alphabetically (this cannot be undone, you have to recreate your manual order afterwards)
- bugfix in article queries: negation (`~`) was not applied in certain circumstances (if the key itself could handle the negation)

# 0.9.5 - 2026-02-21

- **enclosures** are now supported!
  - small icons underneath the article title (in the article panel) show you which enclosures are available
  - press `e` to open the enclosure which calls `xdg-open` (`open` on macos) with the URL to the enclosure (`e` calls the new command `openenclosure`)
  - you can customize which command handles which type of enclosure (`video`, `audio`, `image`)
  - want to quickly open a podcast in VLC? set `audio_enclosure_command = "vlc {url}"`
  - you want to use mpv to watch videos? set `video_enclosure_command = "mpv {url}"`
  - more documentation under `docs/configuration.md` (Opening Enclosures)


# 0.9.4 - 2026-02-18

- **Breaking Changes** `read` and `show` from now on don't accept the target parameter anymore
  - some context: until now, `read` accepted `current`, `articles` or `feeds` as an optional first parameter, to indicate *where* the operation should be executed. `show` to switch the article scope, had the same optional parameter. These are now removed.
  - from now on, the `in` meta-command must be used. Here some examples:
    - `read %` marks all elements in the *currently selected panel* (feeds or articles) as read
    - `in articles read %` marks all articles in the *articles list* as read
    - `in feeds read %` marks all feeds/categories in the *feed list* as read (if you really want that)
    - `show all` shows all items in the *currently selected panel* (feeds or articles)
    - `in articles show unread` shows only unread articles in the *article list*
    - `in feeds show marked` shows only items (feeds/categories) with marked articles in the *feed list* (tree)
    - a more complex example in the default binding of `R`: `confirm in articles read %` asks the user if all articles in the article list should be marked as read (`confirm` is also a meta-command which asks for confirmation); if you enter the command in the command line, it will actually tell you what it does underneath
  - *BTW* `in <panel>` works for all commands, e.g., `in articles down` moves the selection one down in the article list
  - Note that some commands just work in some panels, e.g., `in content read` doesn't do anything as `read` is only supported in `articles` and `feeds`
- small improvement: If no title is given, the summary is shown in the article list. This is useful for, e.g., Mastodon tuts

# 0.9.3 - 2026-02-12

- you can now search in the feed list:
  - press `/` (default mapping) in feed list to open search prompt (command line)
  - enter a search term
    - single word: case-insensitive, e.g., `news`
    - quoted string: exact-match, e.g., `"News"`
    - or regular expression enclosed in `/`: e.g., `/News.*|Nachrichten/`
- new option `zen_mode_show_header`
  - show header (title, feed, date, etc.) in zen/distraction-free 
  - default is `false`, add `zen_mode_show_header=true` to your `config.toml` to activate
- **IMPORTANT**: eilmeldung now fails on `config.toml` files with *unknown settings* instead of silently ignoring them. This is to improve user experience and avoid unexpected behavior.
- bugfix: select first article when a tree item is selected

# 0.9.2 - 2026-02-10

- changed default mapping of `R` to `confirm read articles %` (before: `confirm read %`): now just the elements in the article list are marked as read instead of all feeds and categories when in the tree panel
- new query key `category`: matches articles from feeds in the matching category (only the direct parent category is considered)
- bugfix: content is not updated when article was marked as read
- updated dependencies


# 0.9.1 - 2026-02-08

- hotfixes
  - sensible selection in article list after an article has been marked as read
  - attempt relogin after logged out

# 0.9.0 - 2026-02-07

- **NEW**: Automatic article operations after synchronization!
  - want to automatically mark ads or paywall articles as read?
  - or add tags to articles with certain keywords? Or from your favorite feeds?
  - this is now possible with the new option `after_sync_commands`!
  - read more in `docs/configuration.md`, *After-Sync Commands*

# 0.8.4 - 2026-02-04

- **Breaking Changes**
  - `thumbnail_width` is now a *dimension* value, default is `thumbnail_width = "14 length"` (14 columns)
  - `thumbnail_height` is a *dimension* value which defines the height space reserved for the thumbnail, default is `thumbnail_height = "5 length"` (5 rows)
- bugfix: `libxml` error output messed up TUI; workaround which temporarily redirects `stderr` when scraping an article
- improvement: default keybinding of `r` now selects next unread article (instead of jumping to the top)
- status bar eye candy

# 0.8.3 - 2026-01-30

- hotfix: removed hash for `news_flash` from nix package declaration


# 0.8.2 - 2026-01-30

- new CLI magic for the people
  - `--sync` syncs all feeds and outputs (customizable) sync statistics (for you `cron`/`systemd` tweakers)
  - `--import-opml`/`--export-opml` for importing/exporting OPML directly from the command line for automatic setup; combine with login settings and you can setup `eilmeldung` without manual input!
  - `--logout` to logout
  - for more information checkout `docs/cli_args.md`
  - **Warning**: You should not execute these commands while eilmeldung is running in another process to avoid data inconsistency!
- **inoreader** (OAuth2) provider is now supported (**note**: You need a Pro account to create an application token to grant `eilmeldung` access to **inoreader**)
- bugfixes
  - deleting categories works now (thanks to @JanGernert for updating `news_flash` to 3.0.0)
  - fixed false negatives in reachability checks (thanks to @janbuchar)
  - re-login to prevent auth errors on sync attempts (thanks to @janbuchar)

# 0.8.1 - 2026-01-28

- two new component style modifiers
  - `unread_count` is applied to unread count label in feed tree
  - `marked_count` is applied to marked count label in feed tree
  - default for both is `{ mods = ["italic"]}`; if you want the old style set them to `{ }` (no modification of style)
- feed list now tries to make sure that the "most sensible" item is selected after changes in the tree (in particular after items have been set to read)
- bugfix: feed list now always handles node collapse/expand commands (not just when focused)

# 0.8.0 - 2026-01-23

- new theming possibilities for unread/read items (**breaking changes**!)
  - settings `unread_modifier` and `article_highlighted` have been **removed**!
  - instead use the component styles `unread`, `read`, `highlighted` and `selected` to adjust how the respective items should look like
  - for more details have a look at *Component Style Modifiers* in `docs/configuration.md`
- new commands
  - `expand`: expands the current item in the tree
  - `expandcategories <scope>`: expand categories with articles in scope, i.e., `all`, `unread` or `marked` articles
  - `collapse`: collapses the current item in the tree
  - `collapseall`: collapses all items in the tree
- bugfix: custom colors all mapped to `none`
- switched to system TLS implementation (thanks to @bgiarrizzo for the PR) which makes it possible to use eilmeldung behind SSL injection proxies

# 0.7.9 - 2026-01-22

- removed share keybindings (`S m`, `S t`, etc.). instead `S` opens the command line with the configured share targets (press TAB to cycle through them)
- bugfixes
  - slightly improved default values for thumbnail scaling, more room to bottom
  - custom colors (for styles) are now properly parsed. 

# 0.7.8 - 2026-01-18

- new configuration options: 
  - set `sync_every_minutes` to periodically sync (default: disabled)
  - `startup_commands` to automatically execute commands on startup, e.g., `startup_commands=["sync", "focus articles"]` to automatically sync on startup and focus the articles list
- new modifier for key bindings: `S-...` for shift, e.g., `S-down` for pressing "shift and downward cursor key"
- bugfix: command input doesn't crash on umlaute/unicode anymore

# 0.7.7 - 2026-01-15

- no more switching back and forth between panels by these new convenient default key bindings:
  - use `Ctrl-j` and `Ctrl-k` to move down/up in the feeds list, from **any panel**
  - use `J` and `K` to scroll the article content down/up (scrape before by pressing `x`)
  - use `M-j` and `M-k` to move down/up in the articles list
- of course, you can customize these key bindings by using the new `in` command
  - `in <panel> <command>` runs a command in the given panel (`feeds`, `articles`, `content`)
  - example: `in feeds down` moves the selection down in the feeds list, `in content gotofirst` scrolls to the top in the content panel.
  - the new default key mappings are:
    ```toml
    "C-j"       = ["in feeds down"]
    "C-k"       = ["in feeds up"]
    "J"         = ["in content down"]
    "K"         = ["in content up"]
    "M-j"       = ["in articles down"]
    "M-k"       = ["in articles up"]
    ```
  - note: if you want the old default key mapping for `J` back, add `"J" = ["read", "nextunread"]` to `[input_config.mappings]` in `config.toml`
  - switched to a different network connectivity library (`if-watch`)


# 0.7.6 - 2026-01-13

- bugfix: when in zen mode (distraction-free mode) and a modal dialog is active (confirmation, etc.), zen mode is temporarily deactivated

# 0.7.5 - 2026-01-12

- **new feature**: feed list now supports showing only items with unread or marked items (or all)
  - press `1`, `2` or `3` *in the feed list* to show *all* or items with *unread* or *marked* articles in the feed list
  - of course, this still works in the *article list* 
  - the new setting `feed_list_scope` defines the default setting on startup
  - if you want to synchronize what the feed list and article list show, have a look at the FAQ (*Features and Capabilities*)
  - new display of current scope using only icons
- bugfix: feed list now tries to restore selection after changes (instead of selecting nothing)

# 0.7.4 - 2026-01-10

- fixed bug which made `default-configuration.toml` invalid; now the style set works as documented
- new option: `hide_default_sort_order`, if `true`, hides the sort order if the default sort order is applied

# 0.7.3 - 2026-01-07

- bugfix: feeds imported via OPML in the root level could not be yanked (`c y`). This works now.

# 0.7.2 - 2026-01-07

- bugfix: eilmeldung wouldn't launch if no `config.toml` exists; now it launches with the default configuration


# 0.7.1 - 2026-01-06

- bugfix: when entering a key sequence with multiple alternatives, if there is one which already matches, pressing enter (default key binding) executes the key binding immediately. Otherwise there is a timeout running down after which it is executed. If escape is pressed, the keybinding input is aborted.

# 0.7.0 - 2026-01-05

- **new feature**: you can now **sort** the article list
  - via the new `sort` command: `sort <feed >date` sorts the articles by feed ascending and from oldest to newest (see command documentation for details)
  - define a *default sort* order via the configuration option `default_sort_order` (default value is `<date`, i.e., from newest to oldest)
  - use the new `sort="..."` in article queries, e.g., `#readlater unread sort="<feed <date"` queries all unread articles with tag `readlater` and sorts them first by `feed` then from newest to oldest
  - new default key bindings
    - `\` opens the command line with `sort`
    - `| r` clears the current sort and reverts to default sort order (or query sort order)
    - `| |` reverses the current sort order
    - as always, you can define your own key bindings to your desires
# 0.6.2 - 2026-01-05

- there is now an explicit error when `config.toml` is invalid (e.g., duplicate entries)
- `C-u` was a duplicate mapping in `default-config.toml`
- some remappings in `default-config.toml`:
  - `M-u` maps to `cmd unread` (before `C-u`)
  - `M-m` maps to `cmd mark`
  - `M-v` maps to `cmd unmark` (before `C-v`)
  - `M-r` maps to `cmd read` (before `C-r`)

# 0.6.1 - 2026-01-03

- added MUSL CI targets

# 0.6.0 - 2026-01-03

- added new config section: `[login_setup]` for automatic login

# 0.5.2 - 2025-12-31

- added example for light theme
- made default theme more consistent between light/dark themes

# 0.5.1 - 2025-12-30
- fixed bug (issue 55): arguments to command are now not quoted anymore

# 0.5.0 - 2025-12-30

- **Breaking Changes**: 
  - The following layout options have been replaced by more flexible options:
  ```
  feed_list_width_percent
  article_list_width_percent
  article_list_height_lines
  ```
  - They have been replaced by
  ```
  feed_list_focused_width
  article_list_focused_width
  article_list_focused_height
  article_content_focused_height
  ```
  - see configuration documentation and section *Layout Configuration*
- content view now shows scraped (full) article content if available. press `x` (command `scrape`) to retrieve full article. I won't implement an automatic scrape to reduce load on websites.


# 0.4.11 - 2025-12-28

- new share target: external command. You can now define a new share target by defining a shell command to which the URL and title of the article is passed
- throbber, which indicates a running process, is now more visible
- bug fixed: window is now redrawn when the terminal window or font is resized

# 0.4.10 - 2025-12-27

- AUR packages `eilmeldung` and `eilmeldung-git` now available

# 0.4.9 - 2025-12-26

- optimized amount of redraw calls for lower CPU consumption 
- tags are now visible again in content view

# 0.4.8 - 2025-12-25

- placeholder image is now shown when thumbnail could not be loaded
- fixed wrong display of title (and other elements) when an HTML-escaped code used a wide ampersand instead of a regular ampersand
- article content now also shows author
- the option `keep_articles_days` (default 30) sets the amount of days before articles are removed

# 0.4.7 - 2025-12-24

- automatically fetching feed after adding, squashed some related bugs
- optimized logic for sensing if service is reachable, leads to faster reconnect on unstable networks or after disconnects
- after service is reachable again (after a disconnect), the reqwest client is rebuilt. this is needed for some providers to accept the connection after a reconnect (e.g. inoreader)

# 0.4.6 - 2025-12-23

- scrollbar appearance is now configurable

# 0.4.5 - 2025-12-22

- added spaces between tags in content display
- added sexy scrollbars
- removed scroll amount displays from article list and content
# 0.4.4 - 2025-12-21

- refactored content layout to be more consistent

# 0.4.3 - 2025-12-21

- HTML/markdown content now renders if `content_preferred_type` is set to `markdown`
- `content_preferred_type`'s settings changed to `plain_text` and `markdown`, example updated

# 0.4.2 - 2025-12-20

- zen/distraction-free mode now shows no summary/thumbnail

# 0.4.1 - 2025-12-20

- fixed: scrolling now works on filtered content in help dialog

# 0.4.0 - 2025-12-20
- command `helpinput` (default keybinding `?`) now shows a popup with all key bindings which can also be searched (default keybinding `/`)
- new input-related commands: `submit`, `abort`, `clear` applicable for situations where a user input is required (e.g. command line or search)
- new input-related command: `find` depending on context, open a search input (default keybinding `/`)

# 0.3.0 - 2025-12-18

- added cli arguments (see `docs/cli_args.md`)

# 0.2.1 - 2025-12-18

- remove clang dep from homebrew formula

# 0.2.0 - 2025-12-17
- added tag matching without `tag:`, i.e., use `#tag` instead of `tag:#tag`
- switched to homebrew release from source
- fixed wrong syntax in default config (input mappings need arrays)
- removed md marker from default config
- added instructions for homebrew installation
# 0.1.0 - 2025-12-14
- initial release. see `README.md`

