Software

a woman sitting at a table reading at her smartphone

Thorium Reader

Thorium Reader is the EPUB reader of choice for Windows 10, MacOS and Linux.

This is the only “reader” developed by EDRLab, which mostly leads the development of the Readium Mobile and Readium Desktop toolkits (see below).

More about Thorium Reader

Origin of the Readium project

The Readium project was initiated by the IDPF in 2012 in order to create an open-source implementation of an EPUB 3 parser and reading toolkit. Initially written in Javascript as a Google Chrome extension, it soon evolved with the addition of a C++based native SDK, for use in iOS, Android and desktop applications. A more complete description of the Readium project goals is found on the Readium website.

Open-source projects need to be funded, it was therefore decided to create the Readium Foundation as “an Open Source Foundation collaboratively developing technology to accelerate the adoption of EPUB 3 and the Open Web Platform by the Digital Publishing Industry”. For some time, contributions and membership fees provided the necessary funding for the Readium SDK to evolve.

Thanks to Readium member efforts, the Readium C++ SDK and the Readium JS toolkit became solid open-source projects, a reference implementation for EPUB 3 processing, one of the rare software supporting EPUB 3 media overlays, MathML, right to left reading progression etc.

More about the original Readium SDK

Transition

As of 2016, the Readium SDK was mature and the Readium Chrome Extension – initially a test application – had become popular among EPUB users. Several iOS, Android and OSX reading applications had been built using the C++ core, the large Javascript library (“shared JS”) and native wrappers in Objective-C and Java.

However, this C++ code was not as platform-neutral as it was aimed to be, as it was interspersed with directives targeting specific implementations. The rapid evolution of the mobile platform was creating headaches for the developers. Also, given the organic nature of an open-source development with constant turnover of developers, this hybrid codebase had become large and complex, with nobody having complete knowledge of its nitty-gritty details.

At the same time, W3C members from the publishing industry (including EDRLab) had started creating new specifications for Web Publications, which would support digital publications in many forms, i.e. traditional ebooks, audiobooks and visual narratives. Supporting these new formats would soon be needed on the Readium SDK, which would be a new pain knowing the complexity of the codebase.

Meanwhile, the web had continued to mature with JavaScript engines becoming much more full featured (indie and outside browsers), with extensive support for parsing markup, crypto, SVG, WebGL support and more. On the mobile side, new and modern languages had taken the sunlights, Swift on iOS, Kotlin on Android. On the desktop side, it was now possible to develop efficient multi-platform applications using the Electron.js platform and the Typescript language.

The Readium SDK was at the time associated with a dual license, GNU and free for open-source projects, Apache and subject to yearly fees for commercial projects. This dual license was very useful for the maintenance of the codebase by senior developers, but was not evenly understood by implementers … was Readium really open-source?

This led several Readium members to conclude, late 2016, that it might well be time to step back from the current Readium codebase and approach and do some serious re-thinking.

A new licensing model

From February 2018, the licensing model of the Readium SDK was changed  for a unique BSD-3 type license, free for any type of project, but with a strong suggestion to participate financially to the maintenance of the different projects by paid developers.

This made the situation unambiguous: yes, Readium is fully open-source.

This had however a major negative effect on the funding of the Readium Foundation, as the free contributions of Readium SDK users were never at the level of the previous “commercial” revenue.

A new project – “Readium 2”

A first goal of this project is to create a clean software architecture, modular and documented, which allows the easy development of reading applications on three types of platforms: mobile, desktop and Web. Different implementations can therefore share the same architecture, model, interfaces; a developer should therefore be able to switch from one implementation to another without feeling lost.

A second goal is to enable the processing of any kind of publication, including new versions of EPUB files, but also audiobooks and visual narratives (comics / manga / bandes dessinées). Readium 2 is a framework for interpreting and rendering any digital publishing markup.

All software modules are intended to be, insofar as possible, independent of one or another and  can be used independently of the overall framework.  At the same time, these modules must be designed so that they CAN be easily and seamlessly combined to produce complete reading systems.

For rendering content, this framework leverages the capabilities of modern browser engines and supplement those capabilities with separate modules (polyfills, if you will) that provide additional functionalities.

Another aspect of this framework is that instead of a “platform-neutral” C++ core, a large part of the mobile framework is implemented in native code, i.e. Swift for the iOS target and Kotlin for the Android target. This enables the use of the most powerful aspects of each native environment and should end up with less code, more efficient.

On the other side, desktop applications (on Windows, OSX and Linux) are approached using cross-platform technologies, i.e. Electron.js, node.js, Typescript. This fills the gap that Readium left open so far, with no real interest from the community for the development of a native Windows and Linux SDK.

This project is therefore split in four parts:

Readium Architecture, a software architecture common to the different implementations.

Readium Mobile, a toolkit for iOS and Android reading apps, with Readium LCP support.

Readium Desktop, a toolkit for Windows, MacOS and Linux reading apps, with Readium LCP support.

Readium Web, a toolkit for Web apps.

Also, the Readium LCP project is in scope here, as LCP modules have been developed as part of Readium Mobile iOS, Readium Mobile Android and Readium Desktop.

More on Readium LCP

Approach

The project was split in four phases:

  1. Report the good and bad aspects of the current Readium implementation. This report was driven in 2016 by the interview of those application developers who have intensively used Readium (readium-js and/or readium-sdk) and, for some of them, forked the code to obtain what was needed in their application. This study included a compilation of problematic EPUB samples and technical details about the areas where the Readium code should be optimized.
  2. Study the Readium Architecture design principles.
  3. Develop prototypes.
  4. Develop the actual implementations.

The first phase was achieved in September 2016. Its results have been described to the Readium members and should be published online, some day, on the Readium documentation website.

The second phase started in September 2016, with a top to bottom approach and the definition of two main modules to be found in any implementation : a “streamer” to parse digital publications and expose them via an http server, and a “navigator” to expose the publication in a rendering engine.

The prototyping phase started at the same time, with the Swift implementation first, followed by the Desktop implementation. The definitive Swift and Kotlin implementation started in September 2017. The definitive Desktop implementation only started in 2018.

Project documentation

The project documentation is active on the Readium Architecture Github repository, as Github issues and Slack exchanges.

Please also look at the Readium Architecture wiki page if you want to participate to the project.

Readium-2

The major evolution of the Readium SDK codebase, the objectives being better performances and stability, clarity of source code and documentation.

Discover Readium-2

Readium SDK & JS

The reference EPUB 3 open-source reading engine for Web, desktop and mobile apps, on active maintenance by the Readium community.

Discover Readium SDK & JS

woman in library reading at a tablet with lock in her hand

Readium LCP

The vendor-neutral and interoperableDigital Rights Management technology, embeddable in any reading application based on the Readium SDK.

Discover Readium LCP

Copyright © 2018 EDRLab. Legal informations

Log in with your credentials

Forgot your details?