FSL-1.1-MIT < 10 KB gzipped Zero runtime deps WCAG AA

Speed-reading, dropped into any blog.

An embeddable RSVP (rapid serial visual presentation) reader. One <script> tag and every post on your Ghost or WordPress site gets a "Read faster" button. Under 10 KB. No dependencies. No host-page conflicts.

Live demo — the widget auto-installs on this article

Look for the blue Read faster button just above the article body. That button wasn't in the HTML — it was injected by the script.

How embedded tools quietly took over the modern web

The first widgets people added to their websites were small and self-contained. A weather sticker. A visit counter. A chat box. None of them did anything important; all of them announced that someone, somewhere, had been thinking about the page beyond the words on it.

That impulse has not gone away, it has just gotten more useful. The modern web is a stack of embedded behaviour. Comment systems, search bars, video players, payment forms, scheduling widgets, AI assistants, analytics, and reading aids all live inside larger sites that nobody planned to share with anyone else. Each of them solves a real problem the host site does not want to build from scratch.

What ties them together is the embed model. Add one script tag. Maybe set a couple of attributes. The widget does the work of figuring out where it lives and how to behave. The host site keeps its layout, its styling, its content. The widget keeps its independence and its release cadence.

This balance is precarious. The host wants the widget to feel native, but cannot accept it intruding on the rest of the page. The widget wants to be useful, but cannot afford to know much about its environment. The only way that combination works at scale is if the contract between them is small, well-defined, and conservative on both sides.

That is a constraint, but it is also a feature. Constraints push you toward simple things. A reading widget that fits in one script tag, behaves predictably across CMS platforms, and gets out of the way when it is not needed is a more honest tool than one that demands to be installed, configured, and threaded through a build pipeline. It is what you would actually want, if you stopped to think about it.

Embed it in 30 seconds

In Ghost: Settings → Code Injection → Site Footer. In WordPress: paste into footer.php or a footer-injection plugin.

<script
  src="https://cdn.speedreaderwidget.xyz/v0.3.0/rsvp-reader.iife.js"
  data-wpm="300"
  data-theme="auto"
  data-mode="inline"
  defer>
</script>

That's it. The widget detects single-post pages (Ghost body.post-template, WordPress body.single-post, or a generic <article>) and injects a trigger button automatically. No per-post markup required.

What it ships with

Where it works