Elytra Blog

The simple RSS Reader. This blog publishes release notes, engineering and design details.

Upcoming Improvements to Elytra on iPadOS

For the iOS 16 release of Elytra, I’m working on bringing improvements to the iPadOS side of things. 

Lots of things are planned but the very first I wanted to tackle was improved multi-scene support for Elytra. 

There is a lot of work to be done in this aspect, but the initial stage is set. Here’s a glimpse of that:

Elytra running on an iPad Air, with two simultaneous scenes opened at the same time with different articles in view

If you have a special request for Elytra for iPadOS, feel free to open an issue here or email me at support@elytra.app.

July 2022 Release

The July 2022 release of Elytra focuses on clearing up old code and files from Elytra’s codebase and the final release in the upgrade pipeline started back in 2022 during the May 2022 release.

If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

Improvements

  • Improved performance of loading feeds, articles and processing filters.

  • Improved performance of pulling new articles from Elytra Cloud.

  • Improved article rendering performance by nearly 2x.

  • Improved internal caching mechanisms.

  • Reduced power usage signficantly when scrolling through long lists of articles.

Fixes

  • Fixed onboarding getting stuck when signing-in with a Private ID.

  • Fixed OPML import issue.

  • Fixed search crashing on iOS

  • Fixed crash on sign up (after a fresh installation)

  • Fixed a critical bug causing older articles to be marked as filtered even when no filters were applicable.

  • Fixed a critical bug causing Re-sync to crash sometimes.

May 2022 – 3 Release

The May release of Elytra focuses on clearing up old code and files from Elytra’s codebase. A lot is changing under the hood, but very little is changing visually in the app.

This is to prime the codebase for WWDC 2022 which will bring in new OS versions and features to the app.

This will be the final release to support iOS 14. This will also be the final release with new features until the next release shipping with iOS 16 support.


As WWDC approaches, we’ll be seeing a lot of articles coming from the press surrounding the event. RSS feeds are a great way to follow this news as it happens.

So to get you setup, first 1000 users can get their first three months at a discounted price using the code: EYTWWDC22 for the monthly subscription, and EYYWWDC22 for the yearly subscription.

These codes will be valid till the 12th of June, 2022, 12:00AM GMT.


Fixes

  • [iOS] Deleting your account now prompts for cancelling your active subscription and backing up your data before deleting it.

  • Fixed a crash when opening the filters view.

  • Fixed a crashing bug that would sometimes occur when marking over a hundred articles as read.

  • Fixed a crashing bug that would occur when no items are pending to be marked as read.

May 2022-2 Release

The May release of Elytra focuses on clearing up old code and files from Elytra’s codebase. A lot is changing under the hood, but very little is changing visually in the app.

This is to prime the codebase for WWDC 2022 which will bring in new OS versions and features to the app.


As WWDC approaches, we’ll be seeing a lot of articles coming from the press surrounding the event. RSS feeds are a great way to follow this news as it happens.

So to get you setup, first 1000 users can get their first three months at a discounted price using the code: EYTWWDC22 for the monthly subscription, and EYYWWDC22 for the yearly subscription.

These codes will be valid till the 12th of June, 2022, 12:00AM GMT.


If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

New

  • New User Interface and manager for OPML Imports

  • New marking articles as read now happens in the background. The operations complete instantly and whenever your device has an opportunity to update this with the API, it’ll make an attempt. If you’re offline, it’ll try the next time you’re online.

Fixes

  • Fixed marking read blocking the UI in some cases.

  • Fixed some data-race bugs.

  • [iOS] Fixed Safari extension showing blank feed items.

  • [iOS] Fixed Safari extension showing the UI when only a single feed is identified. It now directly opens the app with that URL instead.

  • Fixed a bug where image re-downloads would fail immediately when retrying with the image proxy.

  • Fixed push tokens not being synced with the server when push notifications are already authorized.

  • Fixed full re-sync causing the app to crash instantly.

May 2022 Release

The May release of Elytra focuses on clearing up old code and files from Elytra’s codebase. A lot is changing under the hood, but very little is changing visually in the app.

This is to prime the codebase for WWDC 2022 which will bring in new OS versions and features to the app.

As WWDC approaches, we’ll be seeing a lot of articles coming from the press surrounding the event. RSS feeds are a great way to follow this news as it happens.

So to get you setup, first 1000 users can get their first three months at a discounted price using the code: EYTWWDC22 for the monthly subscription, and EYYWWDC22 for the yearly subscription.

These codes will be valid till the 12th of June, 2022, 12:00AM GMT.

If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

Fixes

  • fixed a bug preventing manual refresh

  • [iOS] fixed a bug causing background refresh to hang until the app was active again.

  • [iOS] implemented Offer Codes Redemption

  • [iOS] fixed viewing logs

  • fixed a bug causing indexed articles to be re-indexed on launch

  • miscellaneous internal fixes

April 2022 Release

The April release of Elytra focuses on clearing up old code and files from Elytra’s codebase. A lot is changing under the hood, but very little is changing visually in the app.

This is to prime the codebase for WWDC 2022 which will bring in new OS versions and features to the app.

If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

New

  • Spotlight integration for articles.

  • Re-enabled feeds indexing for Spotlight.

Improvements

  • Improved logging system

  • Sharing logs is now faster

  • Improved mini-audio player reactiveness.

  • When contacting support, logs are automatically attached to the email.

  • When no email accounts are setup, Elytra will now let you share the debug information and logs through the share sheet.

  • macOS users can view the app logs now. Help (Menu) > View Logs

Fixes

  • Fixed a few random crashes caused by the previous available SDK.

  • Fixed a regression where the blog label was not tappable in the article reader.

  • Fixed a bug with updating selected state of article in the list on iPadOS/macOS.

  • Fixed localisation, Voice Over and some accessibility tokens on the article switcher and helper buttons.

  • Fixed importing OPML files not correctly parsing unencoded html entities in feed titles.

Others

  • Updated attributions of 3rd party libraries.

Introducing Neptune

Prelude

RSS Feeds are amazing! Many of us have built entire apps, services and businesses around it. The specifications for it have existed for a long time. Newer specifications like JSONFeed are powering new workflows around it.

Earlier in the previous decade, websites began injecting ads, trackers into their RSS feeds. Those were easy to get around for Elytra.

However, soon after the rise of Ad Blockers and similar technologies, more and more websites wanted people to open their web pages through their RSS feeds. This leads to websites providing only truncated excerpts in their feeds.


This become a legitimate problem soon after Social Media Giants began fiddling with users feeds by converting a timeline to a suggestions list like the coupons section from a local newspaper ¯\_(ツ)_/¯.

To solve this problem, a lot of genius services like Postlight’s Mercury popped up. They provided a huge boost to feed reader apps (and many others). Almost every app I used before Elytra used it. Elytra used it up till version 2022.2.4.

However, Postlight later made Mercury an open-source project which didn’t receive much attention from the original authors and the community since 2019. I tried to add my own patches to it however, it became tedious to maintain in its current form without doing a complete rewrite against the latest tooling and NodeJS versions.

Since I was considering a rewrite anyway, I thought to myself: why not do it with my new favourite programming language as of 2022: Swift. And as I was going to rewrite things, why not do it simpler (if not better!).

Introduction

This led me to create Neptune, a pure Swift based system to fetch and parse full-text content from webpages for Elytra. It’s fast, very very fast (more details below) and uses a simpler logic compared to mercury to parse and process webpages.

The Swift programming language, by its design, leads to type safe code that brings fewer surprises compared to NodeJS. It also compiles down into a single executable binary, which has its own tradeoffs, but brings three powerful, key features:

  • maintainability
  • performance
  • more performance

Numbers

Oh, and I’m not kidding. On a tiny t3.nano (512MB RAM, 2GB swap, 1vCPU) server, these are some numbers:

Process 0.1K Articles 1K Articles 10K Articles
Mercury 28s 378s 3500s
Neptune 12s 135s 1428s
Change +40% +41.17% +42.05%
  • These tests were performed with the t3.nano instance having full CPU credits available to it.
  • These tests did not persist any data to disk by itself.
  • These tests were performed in partial isolation: only the process being tested was run along with the test script.

If you’re asking yourself, what the numbers mean for you: the answer is quite simple: Neptune is very quick at fetching full-text context from your favourite blogs. Additionally, because it’s simpler to maintain and upgrade, adding support for new websites is vastly simpler and requires only a few lines of code of me (sometimes only 6 lines, 4 of which are bootstrap code).

The Future

I’m sure Neptune is not ready for any commercial use, not in its current form anyways. But I will eventually offer Neptune as a standalone service for other apps to use. I’ll document this at a later point in time.

Users of Elytra can take advantage of Neptune starting with the v2022.03 release as the default extractor. No settings to toggle. It’s all set up.

If you spot any issues, or articles from specific websites failing to load, please submit an issue on Github. It has a standard format making it easy for you to submit reports. I look forward to reading from you about your experience with Neptune.

March 2022 Update

The first release of March, 2022 is here and includes a variety of improvements and bug fixes.

The is the first release to introduce Neptune, Elytra’s own full-text extractor based on modern technologies.

If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

Here’s what’s new and changed in v2022.03.0:

New

  • The app now uses Neptune, a new full-text extractor, for fetching full-text content for articles.
  • [macOS] Added Read and Bookmark buttons to the toolbar.
  • You can now import and export your feed settings.

Fixes

  • Fixed articles rendering an image caption again as a normal paragraph.
  • Fixed an accessibility bug where large bodies of text would not be picked up by VoiceOver.
  • Fixed an accessibility bug where image captions would sometimes skip punctuations when using VoiceOver.
  • Fixed a crash that would sometimes occur when opening an article in its own window.
  • Fixed fetching full-text and reloading full-text content.
  • Fixed discarding loaded full-text content.
  • Fixed a critical issue where the app would start into an invalid state after setting up the account.
  • Fixed a crash which would sometimes occur when opening an article in the browser.
  • Fixed a crash which would sometimes occur when setting up an article.

Notes

If you see continous errors when fetching information about subscriptions, purchasing or restoring: please check if you have a custom DNS blocker enabled on your device. Some of these prevent connections to the service Elytra now uses to manage subscriptions. You may have to unblock api.revenuecat.com in your DNS blocker settings to get things to work.

February 2022 Update

Elytra got multiple releases in February. This post outlines the changes across all those releases and acts as a monthly summary of things happening here.

Version Numbers

Starting with the recent releases, the versioning scheme for the apps has changed. The previous version numbers wouldn’t make much sense to either of us, except for identifying a particular release.

That’s not helpful if I have tens of builds for the same version and the macOS and iOS apps are running two separate builds for the same version.

Now, the versions are numbered as year.month.release, the latest release being 2022.02.4. That makes it easy for the both of us to identify when this build was released. For people browsing the App Store, it’s a clear indication of a regularly updated app as well.

Changes, Improvements and Fixes

Improvements

  • Added new keyboard shortcut to load Full-Text when an article is open.

  • Updated Japanese translations

  • Improvements to bulk marking read and improvements around on-device logging for the same.

  • Hint for externally opening articles

Fixes

  • Some fixes around images from specific hosts failing to load.

  • Fixed some issues around fetching full-text.

  • Fixed a bug causing full-text cover images not being drawn in the article view.

  • Fixed an issue with some attachments not appearing in articles.

  • [iOS] Added Logs viewer and export under settings.

  • Fixed swipe action on article not correctly marking an article as unread.

  • Clear local data correctly when resyncing.

  • Fixed shadows of the categories in the New Feed section.

  • Fixed a crash when processing block quotes in some articles.

  • Fixed a crash occurring after a successful OPML import.

  • Fixed crashes around importing feeds from OPML files.

  • Fixed feeds not mapping to folders when importing structured OPML files.

  • Fixed a bug with first time account setup causing multiple not-found errors in some cases.

  • Fixed a crash when syncing new articles which only contain a cover image.

  • Fixed adding a new feed directly to a folder.

  • Fixed feeds resync discarding feed settings.

  • Fixed feeds resync not remembering custom feed names.

  • Fixed shadows of the categories in the New Feed section.

I’m going to make this a habit: post a monthly summary at the beginning of each month so changes to app can be clearly tracked and if we missed out anything, we can go back and look at these logs to figure things out.

There are a few new repos I’d like to mention here:

  • Localisations All the translation files used by Elytra. If you find a mistake in a translation, please feel free to submit a correction there. You can also add a new language that you’re comfortable translating to. The contents of that repo use a permissive license, so other developers can also use translations that fit their apps from there.

  • IssueTracker The Issue Tracker is a public repo for tracking bugs and feature requests. If you have one, please open an issue there with the correct type so other users with similar requests can also chime in.

Thank you for reading, have a safe and cheerful day.

Elytra v2.6 is now available

The first release of 2022 is here and brings some incredible performance enhancements to Elytra. This is the culmination of all the work I put into the app’s engine in 2021.

If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

Here’s what’s new and changed in v2.6.0:

New

  • Moved to a new of storage engine (Apple’s own) which is much faster, reliable and will help implement a lot of the upcoming features in Elytra.
  • New Small widget that shows the latest unread article from a single feed of your choice.
  • New onboarding flow
  • The app is now localised for 10 languages. If you spot any mistakes in the text translations, please get in touch.
  • Reset Account: You can now reset parts of or your entire account without having to create a new account.
  • Added Source Han Serif font for improved support in CJK articles.
  • macOS: Added a “Reset App” item under preferences.

Improved

  • Notifications will now include the cover image if the article includes one.
  • Major improvements to handling and managing subscriptions in the app. See note below if subscriptions data fails to sync.
  • Widgets now directly load data from the common data store, so they update much faster and sync more reliably.
  • macOS: Added Internet Access Policy items to give descriptive messages of connections in apps like LittleSnitch and MicroSnitch.
  • macOS: Fixed spacing for items in Preferences.
  • macOS: Improved full-screen support for videos in Big Sur. Toggling full-screen on a video will now open it in the OS’s fullscreen, not limited to the app window’s area.

Fixes

  • Fixed a bug where favicons would sometimes never load for a feed even with a valid URL.
  • Fixed loading indicator showing when no where articles available (after switching sorting order).
  • Opening articles from feeds with reader mode enabled now works across all article list types (unread, today, folder…)
  • Fixed a crash that would occur on opening certain articles with deeply nested content.
  • Fixed a critical range overflow bug when applying attributes to paragraph content.
  • Fixed a bug where toolbar article navigation buttons would not update after changing the article.

Temporary Removals

Due to some bugs in modern systems, the following have been temporarily disabled:

  • Hide bars on scroll (iOS and iPadOS)
  • Search on macOS

If you notice any translation errors, please feel free to reach out to me on support@elytra.app. I’m continuously working with wonderful people who are helping with translating the app and introduce new languages to Elytra. If you’d like to help, you can check out the instructions here.

Notes

If you see continuous errors when fetching information about subscriptions, purchasing or restoring: please check if you have a custom DNS blocker enabled on your device. Some of these prevent connections to the service Elytra now uses to manage subscriptions. You may have unblock api.revenuecat.com in your DNS blocker settings to get things to work.