I need to take Unread Cloud offline for maintenance on Friday, August 5, at 5:00 AM EDT (09:00 UTC). Specifically I need to resize the Linode instance hosting the primary databases. This maintenance should last no more than 30 minutes. During this 30-minute time period Unread will be unable to refresh Unread Cloud accounts and Local accounts.

Update August 5, at 5:17 AM EDT (09:17 UTC): The maintenance work is complete, and Unread Cloud is back online. Thank you for your patience.

Unread 3.0.2 is available in the App Store.

Keyboard Shortcut Changes

  • This update removes command-w as a keyboard shortcut for backing out of the current screen. On iPadOS 16 this keyboard shortcut closes the current app window. Instead, use left arrow, command-period, or escape to back out of the current screen.
  • The previous keyboard shortcut for marking an article read or unread conflicts with a Stage Manager keyboard shortcut on iPadOS 16. Therefore the primary keyboard shortcut for marking an article read or unread is now m (with no modifiers). The keyboard shortcuts u, r, and command-shift-u now also mark the article read or unread. The previous keyboard shortcut for marking an article read or unread also works when possible, but it does not work when using Stage Manager.
  • The primary keyboard shortcut for saving/starring or unsaving/unstarring an article is now s (with no modifiers). The previous keyboard shortcut, command-s, still works as well. This update also adds l and command-shift-l as alternative keyboard shortcuts for saving/starring or unsaving/unstarring an article.

Other Improvements

  • This update fixes bugs around showing the search field via keyboard shortcut.
  • This update adds improvements to the heuristics used to determine whether an article is a linked list article.

iPadOS 16 adds system-wide keyboard shortcuts that conflict with Unread’s keyboard shortcuts:

  • On iPadOS 16, command-w closes the current app window, exiting the app under most circumstances. The shipping version of Unread allows you to back out of the current screen using command-w. For example, pressing command-w while reading an article brings you back to the article list.
  • On iPadOS 16, command-m minimizes the current app window when using Stage Manager. The shipping version of Unread allows you to toggle the read/unread status of an article using that keyboard shortcut.

Therefore later this week I am going to release an update to Unread that incorporates these changes:

  • Pressing command-w will no longer back out of the current screen. Pressing command-w will close the swipe left menu when displayed, and will close a modal dialog such as the one letting you edit a feed subscription. But when no modal is displayed and when the swipe left menu is not shown, pressing command-w will close the Unread window on iPadOS 16 and will have no effect on iPadOS 15. Instead you can use left arrow to back out of the current screen. The left arrow keyboard shortcut already works in the shipping version of Unread.
  • The update will add a new keyboard shortcut for toggling the read/unread status of the article. The command-m shortcut will continue to work when not using Stage Manager.

I know that customers rely on and build up a muscle memory for keyboard shortcuts. I do not like removing them, but it is important that system-defined keyboard shortcuts work as expected when using Unread.

Unread 3.0.1 is available in the App Store with these improvements:

  • This update fixes a bug that caused some articles in Feedly accounts to look like linked list articles when they are not. Under some circumstances this resulted in Unread showing feed text when webpage text should have been displayed by default. This fix applies to articles downloaded after installing this update.
  • This update fixes a bug that prevented article list images from appearing for straitstimes.com articles.
  • This update addresses wording issues with the Account Help screen.

I also deployed server-side improvements around webpage text for YouTube videos. If you subscribe to YouTube feeds you may have seen YouTube-generated error messages for some videos in the past few weeks. These improvements fix that. They also replace straight quotes with curly quotes in YouTube video descriptions.

After importing subscriptions into an Unread Cloud account or Local account, how can I later add another subscription?

From a subscription list or article list, swipe the screen to the left and select Add Subscription from the resulting menu. This also works for Feedly accounts and Inoreader accounts.

For Feed Wrangler, Feedbin, and NewsBlur accounts, the procedure is similar. From a subscription list or article list, swipe the screen to the left, select Add from the resulting menu, and then select Add Subscription from the resulting submenu.

If using a hardware keyboard, you can add a subscription with command-shift-n.

I no longer see Settings, About, or Release Notes from the Home screen of Unread.

Settings is now available from the swipe left menu of the home screen, subscription lists, and article lists. Release notes, the About screen, and similar functionality that was available from the Home screen is now part of Settings.

Why does Sign in with Apple not offer to use a private email relay address for Unread Cloud?

Unread Cloud does not request or see your email address at all. Unread Cloud also does not request or see your name when creating or logging in to an account.

Unread Cloud performs two complementary functions: retrieving articles from feeds, and syncing account data across devices. This was my thought process behind deciding to build Unread Cloud instead of letting the app retrieve articles directly from feeds and instead of syncing via iCloud.

Article Retrieval

I have customers who subscribe to more than a thousand RSS feeds. I wanted to avoid the app polling each feed individually, especially while in the background. Unread can retrieve up to 100 articles from Unread Cloud with a single HTTPS request. Unread Cloud also removes inline scripts and other cruft from article HTML before the app retrieves it, making the article HTML retrieved from Unread Cloud more compact.

Some feeds age out articles quickly. For example, this feed from The Verge tends to have only a few hours’ worth of articles at a time. If the app retrieved articles directly from feeds, it would miss articles that were posted and aged out of a feed before the app retrieved it. Unread Cloud checks feeds often enough to prevent that from happening, and can do so regardless of whether your device is online. Therefore Unread Cloud’s article retrieval ensures that you do not miss articles.

Without a server-side article retrieval mechanism, any syncing system would also need to store full article content. Otherwise when adding an account to a new device, that new device would not see articles that had aged out of feeds. The centralized article repository ensures that a new device contains the same set of articles that exists on other devices, without other devices needing to upload article content to a syncing system.

Syncing

In addition to retrieving articles, refreshing an account also involves syncing account data such as:

  • The set of feeds to which an account is subscribed, along with subscription titles, associated tags, and webpage text settings.
  • The set of articles that have been marked read.
  • The set of articles that have been saved.

I initially built a web service just for article retrieval and intended to use iCloud for syncing, but I quickly encountered some drawbacks. The most significant issue is that iCloud throttles requests, making it difficult to store or retrieve a large volume of data in a timely manner.

Using iCloud would also make the device responsible for deleting old data from iCloud. If an article has aged out of the account, the syncing system should no longer be storing that the article is marked read. I wrote code to retrieve old read article identifiers from iCloud, determine which were still necessary, and delete the others. That would sometimes be throttled and the operation would not complete in an acceptable timeframe. With Unread Cloud, old server-side data is removed without any work by the app, and without being throttled by systems outside my control.

If you have not yet tried Unread 3, you can download it from the App Store.

The most important factor in maintaining reliability of a cloud service is monitoring. Code quality, redundancy, and other factors are also important, but a good monitoring system will prevent some outages and minimize the impact of others. This is a guiding principle behind my work on Unread Cloud, and on the Webpage Text API that powers Unread’s webpage text capabilities.

There are two parts to monitoring: verifying that systems are running as expected, and generating appropriate notifications when something is amiss.

Verification

I have a Monitor application with a process that does an exhaustive health check on my Authentication system, on Unread Cloud, and on the Webpage Text API. Checks include:

  • That disk space, memory usage, and load on all instances are within acceptable thresholds.
  • That no TLS/SSL certificate is nearing expiration.
  • That all DNS records are in-place and configured as expected.
  • That database backups are happening as expected.
  • That all instances have the correct date and time.
  • That automated security updates have been applied as expected.
  • That retrieving webpage text for a not-yet-known webpage URL works as expected the first time, and is returned from cache when requested again.
  • That creating a new Unread Cloud account, subscribing to a feed with a URL not yet seen by Unread Cloud, getting new articles for that feed, saving an article, marking an article as read, and then deleting that account works as expected.
  • That all Unread Cloud feeds have been polled as recently as expected.
  • That any failures to poll feeds appear to be a problem with the feed publisher, not the result of an issue with Unread Cloud.
  • That the percentage of feeds where polling fails is within certain thresholds. There will be some feeds that are inaccessible because of issues with or changes to websites publishing those feeds, but if polling most feeds is failing then something else is wrong.

The Monitor application also has a web component with two API endpoints: one indicating whether there is an urgent problem demanding my immediate attention, and another indicating whether there is an issue that should be investigated within the next day or two.

Notification

I use Pingdom for notification of server issues. If Monitor is reporting an urgent issue, I get a text message. If Monitor is reporting an issue that should be investigated within the next day or two, I get an email.

Since Monitor does the work of detecting problems, I can easily switch to a different service for notifications if necessary.

I have been using this system to monitor the Webpage Text API since before releasing Unread 2 in February 2020. I added verification of Unread Cloud functionality in late 2021. This system is serving me well, and helps ensure that any issues come to my attention right away.

If you have not yet tried Unread 3, you can download it from the App Store.

Earlier this week I released Unread 3.0 with Unread Cloud. Unread Cloud is a new syncing and article retrieval system for Unread.

I have written before that Local accounts use the Unread Cloud infrastructure to efficiently retrieve articles. I want to give more detail about what that means. What is a “Local” account if it uses Unread Cloud? This is a look behind the scenes at how Local accounts work in Unread 3.

A Local account operates like an Unread Cloud account in these ways:

  • Creating a Local account creates an account with my authentication service for use with Unread Cloud.
  • A Local account saves its subscriptions to Unread Cloud. Unread Cloud needs to know which feeds to poll, and which new articles to return when a Local account is looking for new articles.
  • Local accounts retrieve articles from Unread Cloud.

Since Local accounts do not keep multiple devices in sync, Local accounts do not store this information to Unread Cloud:

  • Which articles are marked read.
  • Which articles are saved.

That information is stored locally and does not sync for a Local account.

Device Backups

Unread excludes its database files from iCloud Backups. For an Unread Cloud account or a feed service (such as Feedly) account, the data can be downloaded again.

Under some circumstances iCloud Backups exclude keychain entries such as those storing login credentials. If you restore a device from iCloud Backup and your credentials for an Unread Cloud account or a feed service account are missing, Unread will ask you to log in again.

Since there is no way to ask a user to log in to a Local account, more information needs to be incorporated into backups of a Local account. I considered including database files for Local accounts in iCloud Backups, but that would have consumed an excessive amount of iCloud storage. Content of recent articles and cached webpage text can be downloaded again, and the article database contains a bulky full text index of article content.

Instead Unread maintains an on-device export of Local account data in compressed JSON files that contain:

  • The list of subscriptions.
  • Identifiers of articles that have been marked read.
  • Saved articles.

The compressed export files are backed up. When Unread is opened on a device after being restored from an iCloud Backup, it creates a new server account and restores its data using the JSON export files. The process is seamless. It looks like you are just downloading your articles again.

Handling Abandoned Accounts

Unread Cloud accounts are never deleted except at a user’s explicit request. As long as you can log in to your Apple ID, you can log in to your Unread Cloud account using Sign in with Apple.

However if a customer creates a Local account on a device and then deletes Unread from that device, my service has no way to know that the account cannot be used again. For the sake of both preserving customer privacy and minimizing the sizes of my databases, I felt it important to delete Local accounts that are likely abandoned.

It is also important that if a customer creates a Local account and does not use it for a very long time, it continues to work if and when the customer returns to it. Therefore after a Local account goes 90 days without being accessed, that account will be deleted from my servers. If the app later tries to access that account, it will see that the account has been deleted and will recreate it. This process is seamless. Creating a replacement server-side account with the same subscriptions happens quickly at the start of an account refresh.


I did a considerable amount of work to avoid storing data for accounts that are abandoned, to avoid storing data that does not need to sync, and to minimize the iCloud storage required for a backup of a Local account. But I also ensured that Local accounts work as one would expect:

  • A Local account will continue to work after going unused for a long period of time.
  • If your device is backed up and later restored via iCloud Backup, the restored device will have your data including: subscriptions, current articles, saved articles, and which articles are marked read.
  • If you restore a new device from a backup of an old device, Local accounts from the old device will be cloned to the new device.

If you have not yet tried Unread 3, you can download it from the App Store.

Yesterday I released Unread 3.0 with Unread Cloud. Unread Cloud is a new syncing and article retrieval system for Unread.

Unread Cloud has five subsystems: the Subscription Manager, the Feed Retriever, the Article Repository, the Article Status Manager, and the API Gateway. Each subsystem has its own PostgreSQL database, a Rails app with a REST API, a Sidekiq-based background processor, and a Redis cache.

Unread Cloud Architecture Diagram
Unread Cloud Architecture Diagram

External Dependencies

Unread Cloud also has two external dependencies: an Authentication Service and the Webpage Text API.

The Authentication Service handles the server-side component of creating or logging in to Unread Cloud accounts via Sign in with Apple, and periodically refreshing authentication tokens. Since Local accounts also use Unread Cloud for efficient article retrieval, the Authentication service also allows the app to create and delete Local accounts. I will publish more detail about how Local accounts work differently from Unread Cloud accounts in a subsequent post.

Unread Cloud uses the Webpage Text API to incorporate author names and hero images into articles from feeds that omit them. Unread Cloud also uses the Webpage Text API to determine which feeds are summary-only and to set appropriate default webpage text options on imported subscriptions. Caching of webpage text from summary-only feeds is done outside the context of Unread Cloud. When using an Unread Cloud account or a Local account, Unread retrieves webpage text directly from the Webpage Text API just as it does when using an external feed service account.

Subsystems

The Subscription Manager stores the set of feeds to which each customer subscribes. This includes customer-specific feed titles, tags, and webpage text settings. Its responsibilities include:

  • Being the authority for the current set of subscriptions when the app refreshes an account.
  • Processing requests to subscribe to a feed, to update a subscription, to delete a subscription, or to bulk import a set of subscriptions.
  • Keeping the Feed Retriever updated with the set of feeds it needs to poll.
  • Keeping the Article Repository updated with the set of feeds to which each customer subscribes.
  • Using the Webpage Text API, determining which feeds are summary-only feeds and setting default webpage text options for imported subscriptions.

The Feed Retriever checks feeds for new articles and changes to articles. It does not store article content, but it stores enough metadata for each article to know when an article has been seen and to detect when an article has changed. When it sees a new or changed article it sends that article to the Article Repository. The Feed Retriever does not know who is subscribed to what feed, but it has an active subscriber count for each feed. Feed Retriever responsibilities include:

  • Sending new articles and changed articles to the Article Repository.
  • Using the Webpage Text API, supplementing article content with hero images and author names when a feed omits them.
  • Determining how often each feed should be polled, taking into account the number of active subscribers, how often the feed publishes new articles, and whether recent attempts to poll the feed have been successful.
  • Sending polling status changes to the Subscription Manager. Feed polling status is synced with Unread, and Unread reports polling failures on its Feed Errors screen.

The Article Repository stores articles. It knows what users are subscribed to what feeds, but does not know anything about an individual user or feed other than their unique identifiers. The Article Repository also stores what users have saved what articles. Its responsibilities include:

  • Receiving new articles and article updates from the Feed Retriever.
  • Receiving subscription additions and removals from the Subscription Manager.
  • Processing requests from the app to save or unsave an article.
  • Responding to requests from the app for lists of article IDs for articles that are new, have been updated, have been saved, and have been unsaved since the last refresh.
  • Responding to requests from the app for article content for specific articles.
  • Deleting old articles. An old article is deleted if it is more than 90 days old, there are at least 10 newer articles from the same feed, and no user has saved that article.
  • Responding to requests from the Article Status Manager for a list of current article identifiers for a specific user. The Article Status Manager uses this to delete information for articles that have been aged out.

The Article Status Manager stores which articles have been read or marked read for each account. Its responsibilities include:

  • Being the authority for the set of articles marked read and for article-specific webpage text settings when the app refreshes an account.
  • Accepting requests from the app to mark articles as read or unread.
  • Accepting requests from the app to mark a specific article as one where the user prefers webpage text, feed text, or both, when that setting differs from the default for the associated feed.
  • Deleting information pertaining to articles that have aged out of an account.

The API Gateway accepts requests from the app and forwards those request to an appropriate subsystem. This is the only subsystem of the five that accepts requests directly from the app. Its responsibilities include:

  • Authenticating requests, and routing them to the appropriate subsystem: the Subscription Manager, the Article Status Manager, or the Article Repository.
  • Accepting and processing notifications from the Authentication Service that an account has been deleted. When an account has been deleted, it is up to the API gateway to tell each of the other subsystems that they should delete their data associated with that account. The API Gateway is also responsible for rejecting otherwise-valid requests associated with a deleted account.

If you have not yet tried Unread 3, you can download it from the App Store.

I am excited to announce that Unread 3.0 is available now from the App Store. Unread 3.0 adds Unread Cloud, a new syncing and article retrieval system for Unread.

Create or sign in to an Unread Cloud account via Sign in with Apple. With an Unread Cloud account, Unread’s servers retrieve articles from feeds, and your device retrieves articles from those servers. This makes refreshing your account fast, reduces the battery power and bandwidth required by your device, and ensures that you do not miss articles when your device is offline.

Unread 3.0 also adds Local accounts. Local accounts use the Unread Cloud servers to efficiently retrieve articles, but a Local account is only available from a single device.

Support for external feed services such as Feedbin and Feedly remains important for Unread. If you are happy using an external feed service, I encourage you to continue doing so. You do not need to change anything. You will want to continue using your external feed service if you use it to keep Unread in sync with other RSS readers or if you use the website that your feed service provides. Unread Cloud is focused on syncing and article retrieval for Unread.

Other Improvements:

  • The default icon for Unread is now its Day theme icon.
  • The launch screen is now more subtle, and uses either a white or black background depending on whether the device is in light mode or dark mode.
  • Share sheet interaction has been modernized.
  • The Settings screen has been completely revamped, and is now available from the swipe left menu of the home screen, subscription list, and article list. It now includes release notes and information that had been on the About screen. The Release Notes and More sections have been removed from the home screen. The ability to change the current theme is no longer available from the swipe left menu of most screens.
  • The General font size setting has been removed, since iOS and iPadOS now let you set app-specific font sizes. The article list and article view font size settings are still available.
  • The iOS 13-style preview functionality and Drag and Drop functionality has been removed in favor of Unread’s custom context menus.
  • The bottom of the screen no longer displays status text indicating when it is indexing articles.

Unread 3.0 requires iOS/iPadOS 15.5 or later. The addition of Unread Cloud required significant changes to the Unread Privacy Policy.

Unread 3.0 is available now from the App Store.

Feedly announced on Twitter that its service will be offline for maintenance for some time on Saturday, June 11:

This is a friendly note to inform you that Feedly will be offline for maintenance on Saturday June 11th at 6am PDT (1PM UTC) 🚧

The maintenance will last 4 hours.

You will be able to monitor the status of the service on http://status.feedly.com

Thanks for your patience!

During this time, Unread will be unable to refresh Feedly accounts. Follow status.feedly.com or @feedly on Twitter for updates.

I am excited to report that Unread 3 is coming soon! Unread 3 will add support for standalone accounts. Standalone accounts are based on a cloud service that I have been working on and using myself for over a year. The cloud service polls feeds periodically looking for new articles. Unread then downloads the articles from the cloud service. Your feed subscriptions, read/unread status values, saved articles, and even webpage text settings will be synced across devices.

I am most excited about the improved first run experience for new customers. Today a new customer cannot get started without first obtaining an account from an external service. With Unread 3, you can quickly create a standalone account that syncs across devices from inside the app.

Why a Cloud Service?

The cloud service adds a variety of benefits over the app retrieving articles directly from feeds:

  • Refreshing the list of articles is much faster, and uses less battery power and bandwidth.
  • Some feeds age out articles after only a few hours. The cloud service ensures that you do not miss articles.
  • The cloud service takes advantage of the webpage text service to incorporate hero images and author names into articles when feeds omit them.
  • Since the cloud service is independent of iCloud, syncing is not subject to iCloud’s throttling and does not consume iCloud storage.

External Feed Services

Support for external feed services such as Feedly and Feedbin remains important for Unread. If you are happy using an external feed service, you can continue doing so. You will not need to change anything.

You will want to continue using your external feed service if you use it to keep Unread in sync with other RSS readers or if you use the website that your feed service provides. The cloud service for standalone accounts is focused on article retrieval and syncing for Unread.

Feed Wrangler

Feed Wrangler recently announced that it is shutting down on March 1, 2023. Standalone accounts will be available before Feed Wrangler shuts down. If you are using Feed Wrangler and are using it only as a backend for Unread, Unread’s standalone accounts will provide a suitable replacement. If you also sync to other RSS readers or if you also need a web interface, Unread supports Feedbin, Feedly, Inoreader, and NewsBlur.

I thank Feed Wrangler’s developer, David Smith, for his work on Feed Wrangler and for giving a generous amount of advanced notice before the shutdown.

Stay Up to Date

There is not yet an estimated release date for Unread 3, and there is no room for additional beta testers right now. But I am excited to announce that standalone accounts are coming soon. For updates, follow this blog via RSS or follow @unread_app on Twitter.

I just released Unread 2.8.6 with these improvements:

  • Feedly recently started referring to feed groupings as folders. Previously Feedly referred to them as categories. With this update, Unread now refers to feed groupings in Feedly accounts as folders in order to be consistent with Feedly’s nomenclature.
  • This update adds modest improvements to article list thumbnail selection for articles with embedded YouTube videos.
  • This update fixes a crash.

The update is available in the App Store.

Unread 2.8.4 is available through the App Store. This update incorporates these improvements:

  • For customers who have not yet purchased a subscription, there is now an Upgrade menu item in place of the Light/Dark Mode Theme menu item in the swipe left menu of the article list and the subscription list. This change does not apply to customers with an active subscription.
  • This update fixes a bug that prevented steampowered.com images from being displayed under some circumstances.
  • This update improves discovery of Reddit feeds.
  • This update fixes a bug that would cause a crash when tapping a GIF from the article view under some circumstances.
  • This update fixes a background crash.

2021 brought significant updates to Unread:

  • Version 2.5 expanded Unread’s free tier.
  • Version 2.6 added full text search capabilities and a compact article list option for iPhone. Both features were in high demand and have been well received.
  • Version 2.7 improved handling of linked list articles. When, for example, a Daring Fireball article is a link to a MacStories article, the full text of both the Daring Fireball article and the linked MacStories article will appear on Unread’s article screen. This works with most websites that publish linked list articles including Daring Fireball, Hacker News, The Loop, MacStories, Michael Tsai’s blog, and Six Colors.
  • Version 2.8 added extra large widgets for iPad, support for Quick Notes on iPad, handoff between two devices running Unread, support for Siri Suggestions and Siri Search, and more.

I also released the Webpage Text API that powers Unread’s webpage text parsing and caching system as a standalone service.

Last year I wrote that I was working on Unread 3, trying to spend half my time on a big area of focus for Unread 3 and half my time on incremental updates. I am now working full time on Unread 3 functionality. While the pace of incremental updates has slowed over the past few months, the pace of development work on Unread has not. I still cannot promise a release date, and I hesitate to describe the new functionality before it is ready. However development work is progressing well. I hope to share my work soon.

Have a happy and healthy 2022.

Unread 2.8.3 is available from the App Store with these improvements:

  • When sharing an article to Discord via the share sheet, Unread will now send only a link to the article. Unread will let Discord generate its own link preview.
  • This update fixes a bug that could cause a crash under some circumstances.
  • Unread no longer uses a third-party crash reporting service. The privacy policy has been updated accordingly.

Unread 2.8.2 is available from the App Store with these improvements:

  • This update fixes a bug that could cause a background crash or a crash at startup under some circumstances.
  • This update fixes a bug that prevented the feed title from appearing in the article view under some circumstances.
  • This update fixes bugs around saving the webpage text vs. feed text setting for an individual article when it varies from the setting for its feed.
  • The General font size setting now has text indicating that it is a legacy option. I intend to remove this setting when I can require iOS 15 or iPadOS 15. iOS 15 and iPadOS 15 let one specify system type sizes for individual apps, making the General font size setting redundant. The Article Lists and Article View type size settings will remain.

Unread 2.8.1 is available from the App Store. This update incorporates these improvements:

  • This update fixes bugs around refreshing an account on a new device after migrating or restoring data from an old device.
  • This update fixes a bug that caused some videos to be invisible under some circumstances on iOS 15 and iPadOS 15.
  • This update fixes a bug that caused broken thumbnail images for some articles from abc.net.au.
  • This update removes support for entering credentials via the 1Password share sheet extension. AgileBits discontinued that extension. You can still enter credentials from 1Password via AutoFill.

iOS 15 and iPadOS 15 are here, and Unread is ready. Unread 2.8 is available from the App Store with these improvements:

  • On an iPad running iPadOS 15, Unread now includes an extra large Articles widget and an extra large Unread Counts widget.
  • This update adds support for Quick Notes on iPadOS 15.
  • This update adds support for handoff, allowing you to start reading an article on one device and continue reading it on another.
  • This update adds support for Siri suggestions and Siri search.
  • This update adds a monthly pricing option of $2.99 (USD)/month for Unread subscriptions.

Additional Changes

  • The Recent Articles widget is now called Articles.
  • The Context Menus setting is now on the Advanced settings screen.
  • This update fixes a bug that caused the Clear Read Articles menu item to be unavailable while refreshing an account.
  • Unread now downloads new articles more quickly from Feedly accounts that have large numbers of Read Later articles.
  • This update improves the formatting of articles from drive.com.au.
  • This update fixes a bug that caused articles from sloanreview.mit.edu to contain author names with HTML tags.
  • This update fixes a bug that caused broken images in articles from higashihonganjiusa.org.
  • This update fixes a bug that caused iframe elements in articles from thebestsocial.media to be cut off.

If you enjoy using Unread or are happy about this update, please consider leaving a review, writing about it on your blog, or telling your friends on social media.