We’ve Updated Our Review of the Best RSS Reader for Mac: Reeder 4



After the debut of Reeder 4 a few weeks ago, it was time we paid our reviews of the best RSS apps for the Mac and iOS a visit.

Reeder 4 for Mac
First on the docket is Reeder 4 for Mac , which is still our pick for the best RSS app for the Mac . Reeder has grown up over the years, moving from iOS to the Mac in the early years before becoming extremely powerful and nearly bloated with features.
Reeder 4 dials back some of the feature sets (specifically those which overlapped with system-level features) and focuses on what it does best. It has a retouched design and animations, quick and powerful feed navigation, and customizable reading experiences.
Reeder 4 debuts two new features, which could catch an eye or two:


Bionic Reading mode: This reading feature bolds specific segments of words to increase reading comprehension. You can toggle Bionic Reading mode on and off by simply tapping the “BR” button in Reeder’s toolbar.


An internal Read Later feature: This is now built right into Reeder. You’ve long been able to add an Instapaper account to Reeder to read your read-it-later queue right within the Reeder app, but now you can create a simple “Reeder-only read-later service” that syncs between Mac and iOS and keeps your RSS read-it-later queue separate from Instapaper or Pocket. Read Later also syncs lightning quick between devices — perfect if you’re perusing on your Mac but want to read the article on the iPad on the couch.



Our updated review tackles the Reeder 4 debut and comes with new photography, screenshots, and feature discussions.
The RSS app category — especially on the Mac — is a little slower moving than other areas of app development, so while Reeder 3 was already a ways ahead of the competition, Reeder 4 is doubly so.
Check out the updated review and keep your eyes peeled for our upcoming, updated review of the best RSS reader for iPhone and iPad . One of the major competitors in that field is receiving a big update this week, so we’ll explore everything once the update drops.
Read the full review here: The Best RSS Reader for Mac is Reeder 4 &rarer;

The 5 Best Productivity Apps (Sweet Setup Favorites)
Download: We spend an inordinate amount of time sorting through hundreds of apps to find the very best. This list of must-have productivity apps includes app links, quick-start info, and pro-tip workflow recommendations for each app.
Get Access to the List Here »



window.rmpanda = window.rmpanda || {};
window.rmpanda.wpvars = window.rmpanda.wpvars || {};

var debug = (window.rmpanda || {}).debug || /rmdebug=1/.test(window.location.search);
var logger = {};
Object.keys(console).forEach(f => {
if (typeof console[f] === 'function') {
logger[f] = function() {
debug && console[f].apply(console, Array.prototype.slice.call(arguments));
};
}
});

function pipelistToArray(pipelist) {
return (pipelist || '').replace(/^|||$/g, '').split('|');
}

function arrayToPipelist(array) {
return '|' + (array || []).join('|') + '|';
}

function createLeaderboard(cachedPosts, dataKey) {
var leaderboard = {};
var totalRead = cachedPosts.length;

cachedPosts.forEach(function(pageview, idx) {
var pID = pageview[0]; var slugs = pageview[1][dataKey];
var score = 0.5 + ((1.0 - (idx / totalRead)) * 0.5);
slugs.forEach(function(slug) {
leaderboard[slug] = leaderboard[slug] || 0;
leaderboard[slug] += score;
});
});

return leaderboard;
}

function findLeaderboardWinners(leaderboard) {
var winningScore = 0;
var winners = [];
Object.keys(leaderboard).forEach(function(candidate) {
var candidateScore = leaderboard[candidate];
if (candidateScore >= winningScore) {
winningScore = candidateScore;
if (candidateScore > winningScore) {
winners = [];
}
winners.push(candidate);
}
});
return winners;
}

window.rmpanda.wpvars = {};

var cachedPosts = JSON.parse(localStorage.getItem('rmCachedPosts')) || [];


var categoriesLeaderboard = createLeaderboard(cachedPosts, 'categories');
logger.log("CATEGORIES LEADERBOARD:", categoriesLeaderboard);

var tagsLeaderboard = createLeaderboard(cachedPosts, 'tags');
logger.log("TAGS LEADERBOARD:", tagsLeaderboard);

window.rmpanda.wpvars.favoriteCategorySlugs = arrayToPipelist(findLeaderboardWinners(categoriesLeaderboard));
window.rmpanda.wpvars.favoriteTagSlugs = arrayToPipelist(findLeaderboardWinners(tagsLeaderboard));

localStorage.setItem('rmCachedPosts', JSON.stringify(cachedPosts));




window.rmpanda = window.rmpanda || {};
window.rmpanda.wpvars = window.rmpanda.wpvars || {};

var debug = (window.rmpanda || {}).debug || /rmdebug=1/.test(window.location.search);
var logger = {};
Object.keys(console).forEach(f => {
if (typeof console[f] === 'function') {
logger[f] = function() {
debug && console[f].apply(console, Array.prototype.slice.call(arguments));
};
}
});

function pipelistToArray(pipelist) {
return (pipelist || '').replace(/^|||$/g, '').split('|');
}

function arrayToPipelist(array) {
return '|' + (array || []).join('|') + '|';
}

function createLeaderboard(cachedPosts, dataKey) {
var leaderboard = {};
var totalRead = cachedPosts.length;

cachedPosts.forEach(function(pageview, idx) {
var pID = pageview[0]; var slugs = pageview[1][dataKey];
var score = 0.5 + ((1.0 - (idx / totalRead)) * 0.5);
slugs.forEach(function(slug) {
leaderboard[slug] = leaderboard[slug] || 0;
leaderboard[slug] += score;
});
});

return leaderboard;
}

function findLeaderboardWinners(leaderboard) {
var winningScore = 0;
var winners = [];
Object.keys(leaderboard).forEach(function(candidate) {
var candidateScore = leaderboard[candidate];
if (candidateScore >= winningScore) {
winningScore = candidateScore;
if (candidateScore > winningScore) {
winners = [];
}
winners.push(candidate);
}
});
return winners;
}

window.rmpanda.wpvars = {};

var cachedPosts = JSON.parse(localStorage.getItem('rmCachedPosts')) || [];


var categoriesLeaderboard = createLeaderboard(cachedPosts, 'categories');
logger.log("CATEGORIES LEADERBOARD:", categoriesLeaderboard);

var tagsLeaderboard = createLeaderboard(cachedPosts, 'tags');
logger.log("TAGS LEADERBOARD:", tagsLeaderboard);

window.rmpanda.wpvars.favoriteCategorySlugs = arrayToPipelist(findLeaderboardWinners(categoriesLeaderboard));
window.rmpanda.wpvars.favoriteTagSlugs = arrayToPipelist(findLeaderboardWinners(tagsLeaderboard));

localStorage.setItem('rmCachedPosts', JSON.stringify(cachedPosts));


Top News