Readium 1.5: towards a fully compliant Readium 2

Readium 1 is now ancient in Internet terms, and there are a number of good reasons for a rewrite. However while that is happening it’s helpful to reuse some of the functionality from Readium 1 with Readium 2.

Although Evident Point was the initial contributor to Readium, there were many organizations and individuals that contributed to Readium over the years. Readium grew organically, to solve business needs at the time. This has resulted in a complex code base that is poorly documented and is difficult for newcomers to understand. To address these and other issues EDRLab announced the start of Readium 2 project at the end of 2016.

Along with resolving issues identified earlier, Readium 2 (R2) aims to define a “Web Publication Manifest”. Readium 1 (R1) was only designed to work with ePUB documents, while R2 is committed to the open web by engineering support for various document types at inception.

Readium 2 introduces a few architectural changes compared to Readium 1. While R1 relied heavily on a coupled Javascript implementation (ReadiumJS/Readium-Shared-Js), R2 is composed of two stand-alone modules: streamer and navigator.

Streamer is responsible for consuming publications and exposing them in a shared format mentioned earlier: WebPub. Currently Readium 2 has streamer implementations in Go, Swift, Java and Javascript.

Navigator is the second component of Readium 2 architecture. Navigator is responsible for “rendering” the document data that it receives from the streamer. It is navigator’s responsibility to expose UI to the end user, through which the publications is to be read.

While there are a few implementations of steamers, there are no mature navigator solutions available. We thought it would be natural to leverage Evident Point’s Readium/ePUB expertise to marry a Readium 2 streamer with Readium 1 navigator, in this case ReadiumJS. Thus Readium 1.5 was born.

There is still work to be done but this was a successful proof of concept allowing us to demonstrate the mature rendering power of Readium 1’s ReadiumJS with forward looking approach of Readium 2’s streaming.

Leave a Comment