Readabality Tracking

Free Software

Our script Scrolliris Readability Tracker (codename: siret) is free software. If you want, you can even customize and integrate it into your document system.

% npm install @lupine-software/scrolliris-readability-tracker

See @lupine-software/scrolliris-readability-tracker


We belive that the data which is collected by the reader's understanding is very usefull for the author to keep writing good text. We think also that it must have transparency and be anonymous.

It does not need any relationship between readers. Scrolliris cares only about text and its readability.


The script collects text status and scroll position anonimously based on the user event (e.g. scroll) and action (e.g. tab change) on the web browser.

It does not contain any sensitive data such as user's system id.

Do Not Track Support

The script supports DNT settings on the web browser. See also our Privacy Policy.

Supported HTML Structure

The script supports standard HTML structure below:


First <article> is tracked as target by default. It works great for most modern blog and CMS.

But, if you integrate our script into your system, and your document has another structure, you can customize it by yourself as options.

options = {
  'selectors': {
    'article': 'div#article'  // default: 'body article'
  , 'heading': 'div > h3' // default: 'h1,h2,h3,h4,h5,h6'
  , 'paragraph': 'div > p' // default: 'p'
  , 'sentence': 'p > span' // default: 'p > span'
  , 'material': 'ul,ol,img' // default: 'ul,ol,pre,table,blockquote'

See also Application with Scrolliris section.

Data Example

It looks like this:

  "host": "",
  "path": "/from-the-earth-to-the-moon/chapters/5",  // path or collection name
  "eventKey": "KanaylMKTRuWGJSRczIg_w==", // __anonymous__ key which generated by each access on browser
  "eventType": "scroll", // {scroll|visibilitychange|fullscreenchange}
  "record": {
    "data": { // capturing range data like PostgreSQL's range type `[0, 1] ::int4range`
      "headings": [0, 1],
      "paragraphs": [1, 3],
      "sentences": [3, 14],
      "materials": [0, 0],
      "count": 7, // capturing count at this region
      "duration": 22.90, // captured duration at this region
      "startedAt":  1489082998821 // capturing has been started at
    "info": { // situation information of the document
      "scroll": {
        "position": [0, 345], // (x, y)
        "proportion": [0, 52.35204855842185] // (x, y)
      "view": [1678, 677], // view port size (width, height)
      "page": [1683, 1336], // html document size (width, height)
  "count": 14, // total tracking ount on this article
  "duration": 22.40, // total tracked duration on this article
  "startedAt": 1489083012910, // tracking has been started at
  "timestamp": 1489083035848, // will be sent at
  "extra": {
    // additional field for misc information (like font-family or text size)
    // but, empty for now on

We provide the author this logs as feedback about which part of their text is read eagerly, casually, or skipped altogether.

Usage on Scrolliris

If you use the script on our application (, It has also short session for CSRF. It is needed to protect our service from malicious attack.

Application with Scrolliris

It is very easy to use. We update this script automatically. After setup, you don't need to care about it. It sends data to our server.

It looks like this:

(function(d, w) {
  var config = {
      projectId: '<PROJECT_ID>'
    , apiKey: '<WRITE_KEY>'
  , settings = {
      endpointURL: ''+config.projectId+'/events/read'
  , options = {}
  var a,c=config,f=false,k=d.createElement('script'),s=d.getElementsByTagName('script')[0];k.src=''+c.projectId+'/tracker.js?api_key='+c.apiKey;k.async=true;k.onload=k.onreadystatechange=function(){a=this.readyState;if(f||a&&a!='complete'&&a!='loaded')return;f=true;try{var r=w.ScrollirisReadabilityTracker,t=(new r.Client(c,settings));t.ready(['body'],function(){t.record(options);});}catch(_){}};s.parentNode.insertBefore(k,s);
})(document, window);

Please pick <PROJECT_ID> and <WRITE_KEY> on your console. Its are issued on our server application.


You can proudly show tracking status to your readers. See your console on

tracking status tracking status

Publication on Scrolliris

The publication on Scrolliris ( has already setup above, automatically. You do not have to do by yourself.

results matching ""

    No results matching ""