Skip to content

Unofficial Dart/Flutter port of some of the Readium 2 components

Notifications You must be signed in to change notification settings

Mantano/iridium

Repository files navigation

Iridium is an open-source multiplatform e-reader Software Development Kit developed with Dart and Flutter by Mantano.

Iridium keeps the platform-specific code to the bare minimum (zero for now, in fact...). Hence, it does provide a really unified codebase. Until now, only the precompiled LCP DRM native library is specific to each platform, and is provided in binary form by Edrlab that simply must be dropped into the source tree.

Supported Platforms

  • Android 6 Marshmallow and later
  • iOS 15 and later
  • macOS 10.14 Mojave and later - experimental

Features

  • EPUB 2.x and 3.x support
  • WebPub support (thanks to Morten Sjøgren, Nota
  • Audiobook support
  • PDF support
  • Readium LCP support (not in demo app yet)
  • CBZ support (not in demo app yet)
  • Custom styles
  • Night & sepia modes
  • Pagination
  • Scrolling
  • Table of contents
  • OPDS 1.x and 2.0 support
  • FXL support
  • RTL support
  • Search in EPUB
  • Highlights/annotations
  • TTS
  • EPUB 3 Media Overlays
  • Divina support

Test it right now!

Pre-built versions

Pre-built versions of the Iridium Demo App are available:

Note: The Iridium Demo App is based on the excellent Jideguru's Flutter Ebook App.

Build it yourself

From the command-line

git clone https://github.com/Mantano/iridium.git
cd iridium/demo-app
flutter devices <-- Pick a device id in the list (in the 2nd column)
flutter run -d <device_id>

If you see the following error message:

Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain

apply the fix mentioned in this post.

From Android Studio or Intellij IDEA:

Supported platforms

Iridium is currently developed and tested on Android and iOS first, but large parts of the code should be reusable for desktop and web apps. Such desktop and web versions are not currently on the roadmap, but will be considered if we can collect external funding or aggregate external contributors.

Components

This SDK provides open-source unofficial Dart/Flutter ports of Readium 2 (R2) components1, following the Readium 2 architecture:

Name Usage
shared Shared Publication models and utilities
streamer Publication parsers
server Local HTTP server
navigator_flutter Navigator
opds Parsers for OPDS catalog feeds
commons Other misc. utilities (specific to this Flutter port, not found in Readium)
lcp Service and models for Readium LCP

Beyond these Readium 2 inspired modules, Iridium provides 2 conveniences:

Name Usage
iridium_reader_widget Plug and play reader widget
iridium_demo A demo app based on JideGuru's Flutter Ebook App

Integrating into your app

There are 3 main options, from simplest to most advanced

  • Option 1: Fork and tailor the Iridium Demo App
  • Option 2: Integrate the iridium_reader_widget into your app
  • Option 3: Integrate the Iridium modules the way you want. The iridium_reader_widget source code provides a lot of clues bout the relationships between the Iridium modules, and the workflows required to open and display a book.

Iridium vs Readium

Developed in the continuity of Readium 2, Iridium could pave the way to a "unified reference implementation" for Readium, with a unique codebase working across all platforms. However, Iridium is purely a Mantano initiative, and does not reflect any official Readium move towards Dart/Flutter development.

The Readium SDK is funded by public grants and membership fees. Iridium is completely funded and developed by Mantano, which is a private company. As a consequence:

  • You can support this work by becoming a sponsor;
  • One of the sponsorship tiers gives full access to Iridium's optimized "navigator" component.

Migrating an existing R2-based platform-specific app

Since the purpose is to allow full multiplatform development, these modules aim at being integrated into Dart/Flutter apps. Some of them could probably be integrated into existing apps.

However, packing multiple Flutter libraries into an application isn’t supported by Flutter for now. Integrating multiple modules could be achieved by developing some kind of "super-module", but this has not been tested.

Applications based on Iridium

OK... Let's face it, Iridium is brand new. So this list is currently reduced to Mantano's own forthcoming app, but good surprises are on the way ;-)

Why this name?

Iridium is named after the chemical element, which is known for being extremely corrosion-resistant: this reader will stand the test of time 😎

Support

You use this project for professional projects or just like it? Please consider making a donation to help improve it!


1: Readium is a trademark of the Readium Foundation)