Winds – An Open Source & Personalized RSS Reader

3 min read
Nick P.
Nick P.
Published December 27, 2016 Updated January 13, 2020

Over the past few years, Stream has made scalable feed technology widely available to all developers. Today if you want to build a Twitter or Instagram-style app, you don’t need to reinvent solutions for scalable, personalized feeds. Personalized feeds offer a large opportunity to improve the user experience around feeds and we are working on helping the world seize this opportunity. To demonstrate the relevance of these sorts of products and show just how easy Stream is to use, we like to periodically release tutorials that show you how to use Stream to build a variety of applications, focusing on a new type of application with each tutorial.

Winds, an RSS Reader we recently built here at Stream, started out as just another one of our tutorials. Since it’s inception, it has (unexpectedly) grown into a monster of a project with nearly 2,000 stars on GitHub. Winds is built on React, Redux, Node.js and, of course, Stream, and showed us how many designers and developers are still very passionate about consuming content via RSS. Given the crazy turn of events we've experienced, we felt it was necessary to take a moment to talk through what the process has been like for us, what the pivotal points were in the growth of the product and how we chose to do the things we did.

Let’s start with a brief explanation of our philosophy. We really try to focus on the developers and designers who employ our product and want there to be little to no barrier to entry for them to play and explore with Stream. As with all of our tutorials, one of the things we feel is most important about Winds is that it is open source. The open source model of Winds resonates well with the people who matter most to us, as it makes it easy for them to improve and customize the app, giving them a sense of ownership of and connection to Stream.

What works well is different for every app and community. We, honestly, weren’t entirely sure what direction to go in with our next tutorial, however, in general, most apps can use personalization to improve content discovery and reduce information overload. With this in mind, we set out to build an RSS reader, as this was the most relatable way to show people how to apply personalization. One of the features of Winds that we have all been most excited about was the extra personalization step to employ machine learning. Powered by the’s Personalization API, Winds provides both a personalized feed, in addition to a chronological view:

There are times that users want to review every single article in the feed, so our designer created the chronological view to allow you to quickly scan over the feed. The personalized feed view highlights the most interesting content. We like it because it’s a more visual layout and works better if you only have time to read some of the articles. We also used personalization to suggest new feeds to follow:

RSS is a tough problem to solve, as very few sites follow the recommended spec. To create the kind of user experience we wanted at Stream, we had to come up with elegant solutions to the disparagement between feeds. We hope that Winds will help developers and individuals in the future as they work with RSS feeds.

We are extremely proud of the product we created and, as always, were excited to give our customers and potential customers a new, fun way to play with Stream, but we were not mentally prepared for what happened after we released Winds. Fortunately, because of the infrastructure we have in place, Winds did not crash our servers. It’s an exciting open source project and we’ll continue to push out new releases.

You can use Winds online for free, or if you’re a developer, head over to GitHub to host your own version. OSX users can also download a native version of the reader, free of charge.