Changelog
What's new
Recent releases have focused on holding the application in place: a front end split into components, keyboard rings proven by real key presses, the installer under the same coverage requirement as the application and one source of truth for the version. The newest turns the window itself into pictures.
v2.7.0
A window of pictures, plus a way to buy the author a drink
- Every control along the top of the window was an emoji beside a word. An emoji is drawn by whichever font the platform picks, so the row looked different on each of the three platforms Meridian ships to; at a word's height none of them carried much meaning either. They are pictures now, drawn at four times the height of the type the emoji were set in, with the words removed entirely
- Hovering a control names what it does; so does moving to it with the keyboard, which leaves the Tab ring readable without ever touching the mouse. The same words are what a screen reader is given
- The row has been rearranged. The two licences moved off the header into a new strip along the foot, since they state what is true of Meridian rather than acting on what you are reading. What is left on the right is a new button opening the MMSP specification, then the light and dark toggle, then About
- The new strip carries a donation button at its left, apart from everything else because it is the only control that leaves the application. Meridian is free and stays free: no paid tier, no licence key and nothing held back behind a donation
- Neither the donation nor the specification button adds a place Meridian touches the network. Each hands its address to your desktop and the browser does the asking, so the list of six is unchanged. A desktop that declines to open a browser says which page it could not open rather than leaving you pressing a button that appears to do nothing
- Every picture is derived from a single master by the icon generator, cropped to its artwork and scaled by height, so the application carries 705KB of pictures rather than the 13.5MB of source artwork they came from
- The About dialog now carries the year alongside the copyright notice, taking both from the same place the rest of Meridian's identity comes from
v2.6.0
An update check that respects you
- Meridian now notices when a newer release has been published: a few seconds after launch and once a day while it stays open, it asks GitHub's releases API and offers what it finds. Download opens the right file for your platform (installer, DMG or Flatpak, falling back to the release page), Skip This Version silences that version permanently and Later closes the prompt until the next check
- A manual check lives on the About dialog and reports every outcome, including an honest failure when GitHub cannot be reached; it deliberately ignores a skipped version so a declined release stays reachable
- Built not to intrude: only a formally published release can prompt, every failure is silent on the automatic path and the request carries no identifier and nothing about your subscriptions or your reading. The README's account of exactly where Meridian touches the network now names this sixth place alongside the other five
v2.5.1
A selection that survives scrolling
- Selecting feeds in the subscription manager and then scrolling the list quietly dropped every row that scrolled out of view. The selection was tied to the lifetime of the row on screen rather than to the feed; a list only keeps the rows you can see. Select a long list, scroll it to check what you had chosen, only for the confirmation to offer a fraction of it while reporting that smaller number as though it were your selection
- The selection is now held by feed, so scrolling cannot touch it. Confirming a bulk removal deletes exactly what was selected and the dialog counts exactly that. Short lists were never affected, which is why this went unnoticed: nothing is dropped until a list is long enough to scroll
v2.5.0
A hardening release: the front end split, the keyboard proven, the installer tested
- The QML front end is four composition files with their panels, rows and dialogs beside them, where it was four files of more than three and a half thousand lines between them. Nothing about using the application changes
- Every keyboard ring is now walked by real key presses through a real window, forwards and backwards: the window, the reader, the subscription manager and the discovery drawer. Each test was checked by cutting one connection at a time, forty two in all
- Long content reads itself: the licence dialogs and the URL list shown before a bulk subscribe hold still, take themselves down the page, hold at the end and go round again. Touch the surface and it stops where it is, then carries on from there rather than the top
- The size rule reads the QML, the tests and the installer as well as the package; nothing is left over the limit
- The part of the installer that touches your machine is inside the same complete coverage requirement as the application; an upgrade whose swap and rollback both fail now leaves the previous installation in place
- The progress bar fills during a repair and an uninstall. Both reported their work as text rather than as a percentage, so the bar stood empty from start to finish and read as missing; both now report percentages, with the bar itself moving until the first one arrives
- The installer offers to launch Meridian when it has finished, ticked by default, after a repair and a reinstall as much as after a first install. It waits for the window, brings it to the front and then closes itself; untick the box and nothing starts
- The bundled sample subscriptions are now a neutral set in examples/feeds_sample.json, still covering RSS, Atom and MFEED
- The version lives in a single VERSION file at the repository root that the application, the packaging metadata and every build script read
- The protocol version rule is asserted against the specification's own published schema, so the client and the document it implements cannot drift apart
- The site is five focused pages instead of one long scroll, with live download metadata, social previews and structured data
- Every document was read against the code: feed discovery is Feedly's search API and the typeahead is Wikipedia, both now named wherever discovery is described
- The same reading found one undisclosed thing, now stated plainly everywhere: playing a YouTube item loads Google's own player in an embedded browser, so a video you watch is visible to Google as it would be in a browser tab. Nothing about the behaviour changed; it is simply no longer unsaid
- Two dependencies that nothing imported have been dropped, taking with them the claim that feed HTML was sanitised before display. Qt's rich-text engine is what stands between a feed and the reader, as it always was
- A standing technical-debt reference ships with the repository, recording what is open and what is deliberately left alone. It currently records nothing open
v2.4.0
Component-split licensing
- Licensing split by component: user interface under LGPL-3.0, model under Apache-2.0
- Header now shows two licence buttons: "UI Licence" (LGPL-3.0) and "Model Licence" (Apache-2.0), each with its own dialog
- CONTRIBUTING.md added with contribution guidelines and the layer invariant
- Licence texts split into LICENSE-LGPL-3.0.txt and LICENSE-APACHE-2.0.txt, mapped from the root LICENSE
v2.3.0
Cross-Platform Release + Diagnostics
- macOS DMG build, tested on Tahoe
- Linux Flatpak, tested on Ubuntu
- Windows installer rebuilt and re-tested on Windows 11
- Crash diagnostics: stdout/stderr redirected to ~/Library/Logs/Meridian/meridian.log in frozen mode
- About dialog icon and Licence dialog text rendering fixed
- Bulk subscribe confirmation dialog height corrected; it previously showed only one URL
v2.2.0
UI/UX Overhaul + Keyboard Navigation
- Full UI/UX layout overhaul: buttons replace menus throughout
- Complete Tab/Shift+Tab and arrow key navigation across all controls
- Dark/light theme preference persists across restarts via Qt.labs.settings
- Escape closes the Feed Discovery panel from any control
- 371 tests, 100% branch coverage
v2.1.0
Full Keyboard Navigation
- Every interactive element reachable and operable without a mouse
- Tab chain: File menu → Search → Manage → Theme toggle → Feed list → Item list → Open in Browser → wraps
- Amber focus ring on all focusable controls
- Full keyboard nav inside Manage Subscriptions and all its dialogs
- Filter dialog opens pre-populated with existing terms as tabbable toggleable rows
- Left/Right cursor navigates between dialog footer buttons (Cancel / OK)
v2.0.0
Feed Discovery
- Search by topic or keyword, then subscribe to one or many feeds without leaving the app
- Discovery panel runs on an isolated async event loop in a daemon thread
- DiscoveryFetcher ABC with FeedsearchFetcher implementation: same layered boundaries as the rest of the system
- HTTP and HTTPS feed URLs accepted (HTTP feeds follow redirects transparently)
- Splash screen with rounded corners; Win32 mutex prevents multiple instances
- 100% branch coverage maintained including the new discovery stack
v1.0.1
Feed Reader UI + Sample Feeds
- Reworked FeedReader layout: hero thumbnail, media player, sort controls, unread indicator dot
- feeds_export.json ships with the repo: curated RSS, Atom and MFEED subscriptions ready to import
- LGPL-3.0 licence added to Help menu and corrected throughout documentation
- black formatting and flake8 clean across all Python sources
v0.3.0
Windows Installer + Splash Screen
- MeridianSetup.exe: per-user installer with upgrade, repair and uninstall workflows
- Registers with Windows Settings > Apps; creates desktop and Start Menu shortcuts
- No administrator privileges required; user data preserved across upgrades
- Branded splash screen displayed on launch while the app initialises
- Full multi-resolution icon set (16 px through 512 px) for sharp rendering everywhere