Reader Mode - Natural Reader and dark mode

Reader Mode - Natural Reader and dark mode

ID: fbmlcbhdmilaggedifpihjgkkmdgeljh

Extension Info & Metadata

Status
Active
Version
1.3.7
Size
0.12 MB
Rating
4.3/5
Reviews
29
Users
10,000
Type
Extension
Updated
Feb 27, 2026
Category
Tools
Price
Free
Featured
Yes
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes

Publisher Contextual Analysis

Trusted
Author
Ciao Apps LTDView Profile
Country
GB
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Address
64 Nile Street London N1 7SR GB
Website
Visit
Total Extensions
5
Active
5
Obsolete
0
Listed
5
Unlisted
0
Total Users
12,143

Email Change History

1 change
Jan 7, 2025
Domain changed
Screenshot 2
Screenshot 3
Screenshot 4
Screenshot 5
Screenshot 6

Distraction-free reading experience for Chrome.

Reader View is a clean reading mode extension for Chrome that helps you focus on what matters: the content. Remove ads, popups, and clutter from any webpage and enjoy a distraction-free, eye-friendly reading experience. Features: ✅ Reader Mode for Chrome
 🚫 Ads free reading 🔊 Read Aloud – Text-to-Speech (TTS) natural reader 🌙 Dark Mode + Light Mode 📚 Save to Read Later 💻 Offline Reader

 Instantly turn any web article into a clean, readable format — no ads, sidebars, or visual noise. Bookmark articles to catch up anytime, even offline. Access saved pages even when you’re not connected. 
Reader View - natural reader extension for Chrome 📚✨ 

Listen to articles with natural-sounding voices. Reader View supports multiple languages: 🇺🇸 English | 🇬🇧 English (M) | 🇩🇪 Deutsch | 🇪🇸 Español | 🇫🇷 Français | 🇮🇳 हिंदी | 🇮🇩 Bahasa | 🇮🇹 Italiano | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇳🇱 Nederlands | 🇵🇱 Polski | 🇧🇷 Português | 🇷🇺 Русский | 🇨🇳 中文 🔥 Why to use Chrome Reader Mode: - Transform any webpage into a clean reader view format instantly. - Our ML model ensures only the main content is displayed, removing clutter. - Print clean, formatted articles without ads or clutter. - Instantly enables reading mode for Chrome. 
❤️ What Makes Reader View Different? Unlike other “reader modes,” Reader View uses smart content detection to show only the article—no menus, footers, or ads. It’s fast, lightweight, and works great offline too.
 🎹 Enable reader view with hotkeys: Windows: “Shift + Alt + S” MacOS: “Shift + Command + S” And “Esc” to close Reader. Natural Reader Chrome extension offers both light and dark mode color schemes designed for eye comfort. It not only adjusts colors but also changes background and font colors to the best combinations. Dark reader chrome extension reduces strain on your eyes, making reading more comfortable, even on the most ad-heavy websites. It also removes all irrelevant content to enhance your reading experience. 💡 Chrome reader mode is perfect for: – Students researching online. – Professionals staying up-to-date in their field. – News enthusiasts who want a cleaner reading experience. – Anyone who loves to read but hates online distractions. 🔒 Privacy Focused: We respect your privacy. Reader View works locally in your browser and doesn't collect any personal data. 🆕 Regular Updates: We're constantly improving! Expect new features and optimizations regularly based on user feedback. 📥 How to get reader view in Chrome: Click "Add to Chrome" to add Reader View extension to Chrome. 📥 How to turn on reader mode in Chrome: Open any webpage. Click the Reader view icon. Enjoy distraction-free reading! ❓ Does Chrome have a reader mode? At the moment we were unable to find it. Transform your online reading experience today with Reader View - Your personal reading assistant! 🚀📚



 ## [1.2.8] - 2025-11-14 ### Changed - Enhanced content extraction to properly render lists, images, and inline elements - Improved main article image detection with support for meta tags and srcset - Widened content card from 680px to 900px for better readability - Refined typography with Georgia serif font, improved line height and spacing - Enhanced visual design with better image styling, borders, and shadows ### Bug Fixes - Fixed content cleaning to preserve list structures and inline formatting - Resolved issue where reader mode wouldn't reopen after being closed - Improved cleanup mechanism for more robust state management - Fixed TTS state reset when exiting reader mode What’s new: 


[1.2.7] - 2025-04-04 ## Added - Expanded text-to-speech support with 15 languages including English, German, Spanish, French, Hindi, Indonesian, Italian, Japanese, Korean, Dutch, Polish, Portuguese, Russian, and Chinese - Enhanced natural reader voice quality for improved listening experience ### Changed - Streamlined UI with simplified controls for better usability - Optimized performance for faster page loading and smoother transitions ### Bug Fixes - Fixed theme toggle synchronization across saved articles - Resolved font size inconsistencies in reader mode - Addressed various stability issues for improved reliability 

[1.2.6] - 2024-08-15 ## Added - Implemented hotkeys for improved user interaction - Added Shift+Command+R (Mac) / Shift+Alt+R (Windows/Linux) to open the extension - Implemented Esc key functionality to exit reader mode ## Changed - Updated manifest.json to include keyboard shortcuts - Modified content script to handle Esc key for exiting reader mode

 [1.2.5] - 2024-08-09 ## Bug Fixes - Fixed the issue with the bookmarks not being saved correctly 

[1.2.4] - 2024-08-09 ## Added - Implemented bookmarks logic - Created all necessary pages for managing bookmarks - Users can now add, edit, and delete bookmarks - Bookmarks are saved locally and can be synced across devices 

[1.2.3] - 2024-08-07 ## Changed - Enhanced CSS styling and animations - Improved button styles for better user interaction - Added smooth animations for a more polished user interface

 [1.2.2] - 2024-07-26 ## Added - Support for multiple languages through `default_locale` and `__MSG_` placeholders - Implemented localization system using JSON files for each supported language - Added ability to dynamically load translations based on user's browser language - Integrated `__MSG_` placeholders in HTML, JavaScript, and manifest files for seamless localization

Item
Type
Severity
Description
scripting
Permission
Critical
This permission allows injection and execution of JavaScript on any webpage. Rated Critical because it can modify page content, steal sensitive data, and inject malicious code into any site the extension has access to.
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
Broad Host Permissions
Risk Factor
High
This extension has broad host permissions allowing it to access many or all websites.
Broad Content Script Access
Risk Factor
High
This extension can inject scripts into any website.
activeTab
Permission
Medium
This permission grants temporary access to the current tab. Rated Medium because it can access current page content when invoked, though limited to user-initiated actions.
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
tts
Permission
Low
This permission enables text-to-speech functionality. Rated Low because it can only convert visible text to speech without accessing sensitive data.

A hardcoded external analytics endpoint ('https://cleaner.reader-view.com/ingest'), live bearer token ('sk_live_a893f9634394b2d93c1cdea8657cbd5f'), and stream ID are embedded in the content script. The tracker initializes automatically on every page load and hooks `pushState`/`replaceState` to capture every SPA navigation — including on all URLs the user visits, not just pages where reader mode is active.

javascripts/contentScript.js (Line 3531)
Ce = "https://cleaner.reader-view.com/ingest",  xe = "ext_reader",  ke = "sk_live_a893f9634394b2d93c1cdea8657cbd5f",  Le = 20;let we = [],  Ie = !1;const De = "analytics_last_url";function Re() {  Ie || (Ie = !0, "undefined" != typeof window && "undefined" != typeof document && (window.addEventListener(    "popstate", (() => Me())), ["pushState", "replaceState"].forEach((e => {    const t = history[e];    t && (history[e] = function(...e) {      t.apply(this, e), Me()    })  })), Me()))}async function Me() {  const e = await Pe();  Oe(), Be(e)}

Each analytics event payload includes the full current URL (`u: window.location.href`), the prior URL as referrer (`r`), a persistent cross-session user ID (`pid`) stored in `chrome.storage.local`, the user's timezone, browser language, platform, screen dimensions, tab ID, and extension ID. This reconstructs a detailed browsing history profile tied to a stable user identifier — entirely without user disclosure or consent.

javascripts/contentScript.js (Line 3557)
async function Pe(e = {}) {  const {    referrer: t  } = "undefined" == typeof sessionStorage ? {    referrer: null  } : {    referrer: sessionStorage.getItem(De) || ("undefined" != typeof document ? document.referrer : null) ||      null  }, n = await async function() {    const e = "analytics_pid";    if (globalThis._pid) return globalThis._pid;    try {      const t = await chrome.storage.local.get(e);      if (t[e]) return globalThis._pid = t[e], globalThis._pid;      const n = `${Date.now()}-${Math.random().toString(36).slice(2,11)}`;      return await chrome.storage.local.set({        [e]: n      }), globalThis._pid = n, n    } catch (e) {      return `temp-${Date.now()}`    }  }(), i = {    r: t,    u: e.u || ("undefined" != typeof window ? window.location.href : "background"),    t: Date.now(),    d: "undefined" != typeof navigator && navigator.userAgentData?.platform || "unknown",    z: Intl.DateTimeFormat().resolvedOptions().timeZone,    l: "undefined" != typeof navigator && navigator.language || "unknown",    tab_id: e.tab_id || null,    pid: n,    eid: chrome.runtime.id  };  return "undefined" != typeof window && (i.s = {    w: window.innerWidth,    h: window.innerHeight  }), i}

The content script batches 20 page-view events and then routes them through the background service worker (bypassing content-script CSP) to POST the full payload — including URLs, persistent user ID, and device fingerprint — to the external endpoint. The call to `Re()` at line 3618 means tracking starts immediately on every page load across all sites, not just when reader mode is invoked.

javascripts/contentScript.js (Line 3597)
function Be(e) {  Ie || Re(), we.push(e), we.length >= Le && async function() {    if (0 === we.length) return;    const e = [...we];    we = [];    try {      const t = await chrome.runtime.sendMessage({        action: "trackAnalytics",        endpoint: Ce,        token: ke,        d: {          stream_id: xe,          data: e        }      });      if (!t || !t.success) throw new Error(t?.error || "Analytics transmission failed")    } catch (t) {      we = [...e, ...we]    }  }()}Re(), window.__CONTENT_SCRIPT_INJECTED__ = !0;

The service worker acts as a fetch proxy for the analytics pipeline: it appends the real tab ID to each event (which the content script cannot obtain directly) and then POSTs all data with a hardcoded `Authorization: Bearer` token. This design deliberately routes the exfiltration through the background context to circumvent content-script network restrictions and avoid being blocked by page-level CSP headers.

javascripts/background.js (Line 160)
case "trackAnalytics":return s.tab && s.tab.id && r.d && Array.isArray(r.d.data) && r.d.data.forEach((e => {    null !== e.tab_id && void 0 !== e.tab_id || (e.tab_id = s.tab.id)  })), fetch(r.endpoint, {    method: "POST",    headers: {      "Content-Type": "application/json",      Authorization: `Bearer ${r.token}`    },    body: JSON.stringify(r.d)  })  .then((async e => {    const t = await e.text();    let r = {};    try {      r = JSON.parse(t)    } catch (e) {}    e.ok ? o({      success: !0,      data: r    }) : o({      success: !1,      error: t || e.statusText,      status: e.status    })  }))  .catch((e => {    o({      success: !1,      error: e.message    })  })), !0

By severity

Critical4
High0
Medium0
Low0

Versions scanned

Showing 1 of 14 scanned versions with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
1.3.74

Files with findings

2 distinct paths — top paths by unique finding count:

  • javascripts/contentScript.js3
  • javascripts/background.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Data Exfiltration
critical
javascripts/contentScript.js (line 3597)The content script batches 20 page-view events and then routes them through the background service worker (bypassing content-script CSP) to POST the full payload — including URLs, persistent user ID, and device finger…
1.3.7
2Data Exfiltration
critical
javascripts/background.js (line 160)The service worker acts as a fetch proxy for the analytics pipeline: it appends the real tab ID to each event (which the content script cannot obtain directly) and then POSTs all data with a hardcoded `Authorization: …
1.3.7
3Tracking
critical
javascripts/contentScript.js (line 3557)Each analytics event payload includes the full current URL (`u: window.location.href`), the prior URL as referrer (`r`), a persistent cross-session user ID (`pid`) stored in `chrome.storage.local`, the user's timezone…
1.3.7
4Unauthorized Data Collection
critical
javascripts/contentScript.js (line 3531)A hardcoded external analytics endpoint ('https://cleaner.reader-view.com/ingest'), live bearer token ('sk_live_a893f9634394b2d93c1cdea8657cbd5f'), and stream ID are embedded in the content script. The tracker initial…
1.3.7
URLs
8
IPv4
0
IPv6
0

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

Gain full insight into all external connections.

Upgrade for full visibility.

fonts.googleapis.com-https://fonts.googleapis.com
fonts.gstatic.com-https://fonts.gstatic.com
fonts.googleapis.com/css2https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap
images.unsplash.com/photo-1495446815901-a7297e633e8dhttps://images.unsplash.com/photo-1495446815901-a7297e633e8d?auto=format&fit=crop&q=80&w=1600
www.w3.org/1998/Math/MathMLhttp://www.w3.org/1998/Math/MathML
www.w3.org/2000/svghttp://www.w3.org/2000/svg
www.w3.org/1999/xhtmlhttp://www.w3.org/1999/xhtml
cleaner.reader-view.com/ingesthttps://cleaner.reader-view.com/ingest

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Showing 1 to 10 of 20 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

No comparable text files found between these versions.

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.