Elytra Blog

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

Elytra Winter 2019 Update

Winter is coming… soon. The Elytra Winter 2019 update is already here though. 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 the change log:

iOS App

What’s New

Elytra's Updated Sign In Interface

New Push Notifications Interface

New Image Viewer Interface

  • Added a new Bookmarks Manager. This is much more efficient system compared to the previous system and is much more scalable. This is a non-UI update so you’ll see a lot of performance benefits from this.
  • Sign in With Apple. If you’re new to Elytra, you don’t need to take any additional steps. If you’ve been using Elytra and are updating to the latest version, please head over to Settings > Account and link your account from there.
  • Image Viewer: Tap on an image in an article to open it in a full screen image viewer. All images from the article are gathered in single place for easier viewing.
  • Push Settings: View a list of publishers you’ve subscribed to receive push notifications from.
  • Added Settings Sync to work in tandem with the web app. More on this soon.

Improvements

  • Adding a new feed from the search interface now increments the unread count.
  • Removing a feed now decrements the unread count.
  • Recommendations interface now correctly shows the custom Feed name if one is set.
  • Improves how the app handles & reacts to memory pressure warnings from the OS.
  • The Author Interface now shows the author’s name prominently and defers the blog’s name to the subtitle.
  • Drastically improved managing of unread counts in the app.
  • Improved behaviour of the app when marking backdated articles as read.

Fixes

  • Fixes push notifications opening the wrong feed.
  • Fixes push notifications not opening the article on iOS 13.
  • Fixed a bug where the app would re-sync all bookmarks even if they existed locally.
  • Fixed the Settings icon for the Push Notifications row not showing up on some devices.
  • Fixed the activity indicator persisting on screen when only one or no page exists for unread items.
  • Fixed a potential crash when opening new feed interface.
  • Fixes loading of unsupported image formats. Loading an SVG image would cause the app to crash.
  • Fixed last updated date not matching the actual refresh date when manually refreshing through the User Interface. This only updated when fetching via background refresh.
  • Fixed an issue that would cause a corrupted navigation bar in iOS 13.
  • Fixes a crash which could occur when the Trial Interface was presented.
  • Fixed linked images which would not render if they were contained inside an anchor blog with multiple other elements. These other elements were usually line-breaks preventing the entire block from rendering properly. Affected blog: Saturday Morning Breakfast Cereal..
  • Removed webp support.
  • Images are loaded using the same extension from the proxy as the source image.
  • Fixed a small bug with the unread count when marking read automatically from the article reader.
  • Fixed an issue with image loading preferences. “Never Load Images” now works properly in the Articles List & Article Viewer.
  • Fixed some really nasty memory leaks.
  • Fixed a crash that would occur when launching the app. This was a regression introduced in Build 275 of Elytra and OS 13.1.2.
  • Micro.blog posts with images now show the image as a thumbnail in the articles list when settings are enabled for it.
  • Fixed the colour of the summary label (iOS 13 only, correct on iOS 12).

API

I have been discussing with a few developers across platforms to open Elytra’s API to them so they can also build apps on top of it. I hope this takes off because that’ll mean more and more apps will be using a more private and secure way to read their favourite RSS Feeds. 

Other than that, I have made some significant changes to the API and RSS Feed Poller in this update. Here’s a quick change log of things which affects us as Elytra’s Users:

  • The RSS Feed Poller now fetches more frequently and now fully complies with all HTTP caching mechanisms. Previously I only used ETags to know if a feed document was fresh or stale. But this sometimes resulted in unnecessary requests. If a Feed now tells that the content is to be considered fresh for a day, that will be respected. 
  • Improved the WebSub protocol support. If you write on your own blog, I urge that you check if whatever engine runs your blog supports WebSub. If you’re using WordPress, there are plugins with enable this feature. It’s simple to setup and you get free real-time notifications for your readers.  

Thank you for your continued support and feedback and criticism. I will continue to work on the iOS and Web apps through November. I’ll be unavailable on email in December but please feel free to get in touch, I’ll try to reply to you during that time whenever possible. Happy holidays. 

October 2019 Update

Half of October is over and I have a short update for you. 

Elytra v1.5 is on track and includes new systems for:

  • Unread Articles
  • Bookmarks
  • General Articles

What’s new: How articles are loaded, and when they are loaded. I am delaying loading data from the network as much as possible so as to not be too eager to cache too early. This achieves one primary goal: reduced bandwidth usage. Also makes handling and expanding things easier for me in the app, but nothing you should concern yourself with. “Yay!” for both of us! 

I hope to have v1.5 ready to ship towards mid-November and close the pipeline by end of November.

I really did not know a better way to announce the next bit so I am going to sneak this one in here: I give you, a first look at Elytra for the Web

Elytra for Web - Unread - Light Theme

Elytra for Web - Unread - Dark Theme

It is no where close to complete. I have barely gotten the article renderer to work with the basics. Lots of long coffee fuelled sessions still to go.

I decided to do the Web App first while I continue to work on the design of the macOS App and continue to improve the iOS app. The iOS app is pretty stable in v.1.5 now and has everything we need it to have, so now I can assign time to other platforms. 

Over the next couple of weeks, I’ll share more progress on this blog so stay subscribed through the RSS Feed. I’ll share Alpha Testing notes about the Web App later in November.  

Moving to Sign In with Apple

For v1.5, which will be a supplementary update to the v1.4 Fall update, I’m considering moving the authentication system to Sign In with Apple. I’ve just finished testing this system and it works as advertised, however it took much much longer than it should have. 

It works well on iOS, as well as the web. This is very important for me as all previous mechanisms I had looked into to link the session in your browser to the iOS app had too many steps.

Sign In with Apple is by far the most efficient system and still ends up giving me a single User ID to work with, no emails, no names, nothing. So it also keeps in line with Elytra’s Privacy Policy.

These changes should become available in the following weeks as I publish the v1.5 Beta Builds to TestFlight  for preliminary testing. All new users will have to use Sign In with Apple ID. All existing users will have to migrate their account to it, which I’m trying to keep simple. 

Push Notifications & WebSub

Since version 1.0, Elytra has supported the WebSub protocol, and as a natural consequence of it: Push Notifications. 

The WebSub protocol enables Elytra to receive real-time notifications from websites and update the internal cache of latest articles from these websites. 

I recently noticed some abnormalities in the WebSub log that runs every weekend. Quite a few websites:

  • Use an old (outdated) version of the protocol via a plugin (WordPress’ PuSHPress plugin) or similar
  • Use a custom implementation that does not follow the protocol outlined by the W3C Doc. 

This caused several websites to advertise their WebSub Hubs but not respond correctly to the subscription requests. A notable exception was Medium.com. While the RSS Feed URL for these were correct, Medium used to respond with a “incorrect topic url” error which was easy to fix because they also responded back with the correct URL to use for that feed. 

I have since automated the above process, so no further actions are required by publishers relying on such hubs. However, if you are using any other implementation and WebSub doesn’t seem to be working on your blog:

  • Try a different plugin (if you’re using a plugin)
  • Try a different hub (some plugins allow you to define the hubs you would like to use)
  • If you have written a custom implementation, ensure it uses the latest standards defined in the WebSub protocol linked above. 

If you still run in to any issues, please feel free to get in touch with me at support@elytra.app.

Duplicate Blogs

Another issue I noticed is duplicate blogs. A lot of people import their OPML files into Elytra and detecting duplicates is often tricky. The reason is simple, a single blog sometimes has multiple URLs pointing to the same feed. Now the obvious solution would be to check the title, but that doesn’t work either because larger websites have separate feeds based on topics. 

So detecting duplicates is tricky.

Solving the Problem

Both of these issues can be solved in the upcoming dashboard I am working on for Publishers. I hope to create a hub for Publishers to use for a nominal cost as well as enable publishers to group Duplicate blogs and RSS feeds and point to the single source of truth by claiming ownership of these RSS Feeds. 

I’ll be publishing a consultation draft as to which features should be paid and which should be free, but I know one thing for sure: duplicate feeds consolidation will definitely be free for everyone. It is good for Elytra, you and your readers and this shouldn’t be an expense for anyone involved. 

August 2019 Update

Web Service

Over the last couple of days, I have been testing a new way for reliably fetching and caching RSS data from your favourite RSS feeds. 

Ironically, my preliminary implementation of this reliable method wasn’t all that reliable usually not adding new articles to the database. Luckily, I caught this issue within 24h and has now been patched. 

This change matters for two reasons:

  1. Although this new method is slower by almost 50%, it uses less resources like CPU and RAM, so I was able to downsize the server that runs this process. This means a small reduction in operating costs for me. 
  2. I have improved logging across the board so now I’ll know exact reasons why a particular RSS Feed failed to update. So the next time if you reach out to me telling me a feed wasn’t updated in a while, I should be able to resolve it quicker. 

iOS App

The progress on this has been slower than I had hoped. iOS 13 is changing a lot across the Betas, and has been one of the buggiest releases in recent memory. I have all the major things covered but I’m most likely not going to release the iOS 13 release of Elytra until the iOS 13 GM becomes available. 

macOS App

Yes, this is planned. But in the mean time, NetNewsWire is out in Public Beta. Definitely give it a shot. 

Elytra December Update

In this post, I wanted to quickly write down a couple of notes for you to read at your leisure. 

  • There is no release scheduled for this month however I am working on a fix release scheduled for next week to fix a couple of bugs reported by one of the newest users of Elytra. Thank you, Tim! 
  • The next big release is scheduled for after 15th of January 2019.
  • I am continuing to improve the API for Elytra which powers the sync services, automated account creation, OPML imports as well a lot of the real time logic which brings push notifications from certain blogs. 

Real Time Updates

The last point from the above list has kept me wondering, how can I improve the situation where publishers can ping Elytra’s API to notify it about new posts. 

After looking in to how WordPress operates, the answer was obvious: RPC Pings. Starting today, if your blog runs on WordPress, you can add the following URL: https://api.elytra.app/rpc-ping under > WordPress Blog’s Settings > Writing > Update Services. 

That’s all you have to do. This won’t immediately enable your readers to receive real-time push notifications for your blog, but it’ll enable the sync service to immediately fetch new posts. I’ll be working on bringing push notifications to your readers in the coming week. Once that is enabled, the API will no longer periodically poll your Blog’s RSS feed and will solely rely on this mechanism. If you can configure the above setting, I highly recommend that you do. 

Recommendations

I have been tweaking how recommendations are selected, over the last week and I am pretty happy with the results now. Currently, the recommendations are purely based on anonymous statistics which detail which articles were read the most eventually surfacing the Feeds they belong to. In the coming few weeks, this will change to using a combination of anonymous statistics to further randomise and give better recommendations. 

The new system will also remove feeds you are subscribed to so that the recommendations become true recommendations for you instead of a generic “Whats Hot!” list.

Data & Statistics

The core of the Recommendations section has been this anonymous data collected directly on the server based on the articles you read. Since this data is in no way tied to any user account and it reveals a lot of information which publishers may find useful. Early next year, I plan to release a dashboard for Publishers to view this data. Just like the iOS app, the dashboard website will have a private and then a public beta. The final release will be available at nominal fee of $1/month for subscribing publishers. 

Your personal data is never collected by Elytra and as such no information about you can be included in the above stats. If you’re a publisher and would like to be included in the Private Beta, give me a shoutout on Twitter or DM me. 

Closing Notes

I have nothing more to write, so I’ll leave you with my best wishes for the Holidays. Cheers. 

New Servers and Scheduled Downtime (October)

New Servers

I’ve just finished work on a new set of servers in the Singapore region. These servers will now handle traffic for all of your requests from the South East Asia region. You should experience lower latencies, faster load times and over all improved speediness in the app. 

Users in the European and American regions are currently unaffected by this change. 

Scheduled Downtime

There will be a scheduled downtime of the Elytra Service starting 28 October at 09:00PM IST (28 October, 3:30PM UTC) up to 29 October, 02:00 AM IST (28 October, 8:30 PM UTC).

During this time, I’ll be upgrading some of the servers in the US-East region for improved efficiency, reduced costs and higher throughput overall. The service will remain unavailable during that time to the users in the American and European regions. Service will continue as expected for users in the South East Asian region. 

Due to the change in the pricing for the servers, the benefits will be passed on to you. I’ll share more details on this later. 

I’ll appreciate your patience during this scheduled downtime. You can find the discussion on this post on Reddit.

Hello, App Store

Elytra 1.0.0 is now generally available on the App Store. There’s also a shiny new website

From having of the most volatile, overwhelming pre-releases announced on Twitter, to getting some really cool, critical, and supportive Beta Testers, to the Subscriptions rejection a few weeks earlier, my journey with Elytra has been an absolute roller coaster.

When I started working on Elytra back in November I had no idea what to expect. I was very surprised that people really yearned for a new RSS Reader option. The responses on Twitter only made by presumptions more concrete: I want this. A lot of people want this. This needs to be on the App Store. 

There a lot of changes between the last Public Beta build and the App Store version. I wont go into too much detail here, but rest assured, it’s a more stable app. It isn’t completely stable though which is why I have version 1.0.1 ready to go for Review as soon as 1.0.0 is released. 

During the Public Beta, people sent me a lot of emails with feature requests, ideas and suggestions to make Elytra a better app, a better product. I’ve been communicating with a lot of people back and forth to evaluate and solidify these ideas and I am very excited to start working on those. 

As always, please feel free to email me or tweet/toot at me with ideas, questions or just stop by to say hi. 

Last round on me!

This is most likely the last build of Elytra which will be going out to the Public Beta testers. It mostly contains a few minor fixes and two new additions. Read on to learn more.

New

  • Long tapping on the All Read button (Double checkmark) in a Feed’s interface will enable you to mark all unread articles as read, including articles not currently loaded in the interface. This is especially useful when you add a new high frequency feed to your list.
  • You can now optionally use a Dark Application Icon for Elytra. A new Miscellaneous section has been added under settings.

Fixes

  • Tweaked the Application Icons to render correctly on displays which use the sRGB colour profile.
  • Updated the footer text in the Subscriptions Interface to be compliant with Apple’s requirements. This is critically useful for you as well as I have come to realise. (I’m secretly hoping Elytra passes Apple’s review in the first go, as we all do :D)
  • Fixed application launch on iPads when running Elytra for the first time on the device.
  • Scrolling to load the next batch of articles now consumes less power. This is done less frequently now by using an alternate system API.
  • Fixed the status bar being dark (when a dark theme is selected) for the Move Folder interface.
  • Tapping on the Close button on iPads now deselects the currently selected article.

Notes
Version: 1.0.0
Build 127
Pipe: PBeta-04

The Final Epoch

I’ve received numerous emails and messages over the last two weeks requesting new features and reporting bugs. This build is a culmination of all of that including bug reports and feature lists we’ve compiled internally. 

What’s new

  • You can now share the Feed’s URL (and website’s URL when available) from the swipe menu. The same is accessible when dragging cells on iPads supporting drag and drop. 
  • State Restoration has now been implemented in tandem with Background Fetch. 
  • With the background fetch change, the refresh activity indicator will now also show the last refresh time if one is available.
  •  

Improvements

  • Images are no longer affected by Smart Invert. Strict Invert will still invert the colours in images. 
  • Improved image caching
  • Improved memory usage when loading and displaying images (especially on iPhones)
  • Improved multi-tasking behaviour on iPads (Slide Over was majorly broken in previous builds)

Fixes

  • Removed the trailing line-break from Lists
  • Fixed long tapping on the Account ID during setup to crash the app. (This gesture has been removed and replaced with a single tap gesture)
  • Aligns the section header’s title with the labels of the cell. 
  • Correctly manage unread and bookmarked states when article states change via the toolbar in the Article interface. 
  • Fixed a crash when linked header identifiers contained non-URL safe characters.
  • Fixes the blank window on app launch (including bringing the app to the foreground) which occurred in unusual circumstances only on iPads.

Web Service

  • Improved the performance of fetching unread items (on the server) by a huge margin. This could previously take over 30s and now shouldn’t take more than a second.  

This probably brings us to the end of the Beta runs for Elytra. I’ll be resuming work on the launch of the app now and if there are any bug reports that come during this period, I’ll work on those. But the feature list is now frozen and everything deferred to the 1.x versions.

A big thank you to everyone who has been testing the app and sending me feedback. I still have a lot of people to invite to the beta testers list and I’ll resume on that shortly. 

Notes

  • Version: 1.0.0
  • Build 119
  • Pipe: PBeta-04