Readium-2

Readium-2 : a couple seeing from above - the woman holding a tablet

What is Readium-2?

As of 2016, Readium was a set of fully functional open-source EPUB 3 engines, with two pure JavaScript implementations (Readium Chrome Extension and CloudReader) as well as a C++ EPUB parser. iOS, android and OSX reading applications are built using this C++ core, a large Javascript library (“shared JS”) and native wrappers (in Objective-C and Java). However, this C++ code is not as platform-neutral as it was aimed to be: it is interspersed with directives targeting specific implementations. Also, given the organic nature of an open-source development with constant turnover of developers, this hybrid codebase has become large and complex, with nobody having complete knowledge of its nitty-gritty details.

Meanwhile, the web has 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 have taken the sunlights, Swift on iOS, Kotlin on Android. On the desktop side, one can develop efficient multi-platform applications using the Typescript language and the Electron.js platform.

At the same time, W3C members from the publishing industry (including EDRLab) have started creating new specifications for Web Publications and EPUB4, which will support digital publishing in many forms, i.e. traditional ebooks, audiobooks and visual narratives.

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.

Goals of Readium-2

The goal of Readium was, initially, to develop a POC for the EPUB 3 spec, followed by developing a SDK that could be used to develop EPUB 3 reading systems. The overarching goal of R2 is to re-think, from the ground up, that goal.

There is still a need for an engine interpreting EPUB markup for integration into apps or devices, but now the goal is to develop a framework for interpreting and rendering any digital publishing markup.

This extended framework will leverage the capabilities of existing browser engines and supplement those capabilities with separate modules (polyfills, if you will) that provide additional functionalities.  These additional modules are intended to be, insofar as possible, independent of one or another so that they can be used independently of the overall framework.  At the same time, these polyfills will be designed so that they CAN be easily and seamlessly combined to produce complete reading systems.

Another aspect of this framework is that instead of a “platform-neutral” C++ core, a large part of the 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 will end up with less code, but more efficient.

On the other side, desktop applications (on Windows, OSX and Linux) are approached using cross-platform technologies, i.e. Electron.js, typescript, HTML 5/CSS 3. 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.

These different implementations share the same architecture, model, interfaces; a developer should therefore be able to switch from one implementation to another without feeling lost.

Approach

The project was split in four phases:

  1. Report on 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 of the Readium-2 design principles.
  3. Study of a refactored architecture for the codebase, following the approved design principles; developement of prototypes.
  4. Actual coding of the new Readium toolkit.

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 and the third phase around January 2017, with a top to bottom approach and the definition of two main modules in any R2 implementation : a “streamer” to parse digital publications and expose them via an http server, and a “navigator” to expose the publication in a browser engine.

The development phase started at the same time, with the Swift implementation first, followed by the Typescript implementation. The Kotlin implementation started in September 2017.

In 2018, a “Readium Web” project also started, led by Evident Point, the goal being to move the Readium JS project, step by step, to the Readium-2 architecture.

As of July 2018, mobile and desktop implementations are all in beta stage, with a pure BSD-3 license.

The project documentation is active on the Readium-2 github repository, as Github issues and Slack exchanges. Please look at the Readium-2 wiki page if you want to participate to the work.

Roadmap

The development on each platform follows the same progression and semantic versioning.
Here we list the features expected for each revision of the development kit and demo apps.

V1 alpha (semver 1.0.0-alpha.1 etc.)

One can (on any supported device):

  • manage a library of publications
  • read a reflowable book in paginated (tap/swipe/key) and scrollable mode.
  • open LCP protected publications (test/basic profile), renew/return publications

Readium Desktop V1 alpha.1 was released on Github on 30/03/2018.

V1 beta (semver 1.0.0-beta.1 etc.)

One can:

  • modify most Readium CSS defined user settings (relies on Readium CSS alpha), including night mode (but not app UI), font selection (pre-defined font faces)
  • open LCP protected ebooks (prod/1.0 profile)

R2-iOS V1 beta.1 was released on the Apple App Store on 06/04/2018.

V1 (semver 1.0.0-rc.1 etc. … finally: 1.0.0)

One can:

  • modify all Readium CSS defined user settings (incl. dys* related like letter/word/line spacing), font selection (shipped dyslexic + font selector for system fonts).
  • read RTL written publications (arabic, hebrew); the UI is still not localized.
  • read FXL publications / one page, with zooming (pitch).
  • import publications from OPDS feeds (navigation and acquisition of free ebooks, OPDS 1 and 2, no authentication).
  • manage bookmarks (via progression indicators).

semver 1.0.1 etc.

Fixes, improvements, new non-breaking features, etc.

V2 (with its own apha / beta / rc progression)

One can:

  • get current reading position (progression indicator) in the publication.
  • manage page lists (via CSS selectors in locators) and synthetic page lists (via positions in locators).
  • manage landmarks.
  • read vertically written publications (e.g. Chinese, Japanese).
  • read FXL publications / 2 page spreads.
  • manage accessibility during navigation -> VoiceOver on iOS, TalkBack Android, JAWS / NVDA window, etc. screen readers on Desktop.
  • load Web Publications (using Readium WP Manifest as manifest format) from a URI.
  • get access to popup footnotes.
  • listen to audiobooks (prototype format, with a11y features like escapability).

V3

One can:

  • open LCP protected PDF publications.
  • use TTS with sentence highlight (independently of screen readers, continuous or word per word).
  • use media overlays.
  • manage search in the publication (using cfis in locators).
  • manage annotations.
  • manage customizable “themes”.
  • read CBZ BD-Comics-Manga.
  • read EPUB4 BD-Comics-Manga (prototype format).
  • get app UI follow content color schemes (e.g. night mode).
  • use more dyslexia related features.

Notes

On the app stores, the version appearing will be e.g. V1.0.0, as alpha/beta/rc mentions are not accepted. But in the about panel of the apps, the complete release id will appear to the user.

Other Readium projects

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