Flureadium

A comprehensive Flutter plugin for reading EPUB ebooks, audiobooks, and comics using the Readium toolkits.

pub package CI

Features

  • EPUB Reading: Full EPUB 2/3 support with customizable typography
  • PDF Reading: PDF support via Readium's PDF adapters (Android via Pdfium, iOS via PDFKit)
  • Audiobook Playback: Native audio with background playback support
  • Text-to-Speech: Platform TTS with voice selection and rate control
  • Synchronized Audio: Media overlay support for read-along experiences
  • Highlighting: Decoration API for bookmarks, highlights, and annotations
  • Cross-Platform: Android, iOS, macOS, and Web support

Quick Start

Installation

dependencies:
  flureadium: ^0.1.0

Platform Setup

Android
  1. Set minimum SDK version in android/app/build.gradle:
android {
    defaultConfig {
        minSdkVersion 24
    }
}
  1. Change MainActivity to extend FlutterFragmentActivity:
class MainActivity: FlutterFragmentActivity()
  1. If using TTS with AudioService, add to AndroidManifest.xml:
<uses-permission android:name="android.permission.WAKE_LOCK" />
iOS
  1. Add Readium pods to ios/Podfile:
target 'Runner' do
  use_frameworks!
  use_modular_headers!
  pod 'PromiseKit', '~> 8.1'

  pod 'ReadiumShared', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/3.5.0/Support/CocoaPods/ReadiumShared.podspec'
  pod 'ReadiumInternal', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/3.5.0/Support/CocoaPods/ReadiumInternal.podspec'
  pod 'ReadiumStreamer', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/3.5.0/Support/CocoaPods/ReadiumStreamer.podspec'
  pod 'ReadiumNavigator', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/3.5.0/Support/CocoaPods/ReadiumNavigator.podspec'
  pod 'ReadiumOPDS', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/3.5.0/Support/CocoaPods/ReadiumOPDS.podspec'
  pod 'ReadiumAdapterGCDWebServer', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/3.5.0/Support/CocoaPods/ReadiumAdapterGCDWebServer.podspec'
  pod 'ReadiumZIPFoundation', podspec: 'https://raw.githubusercontent.com/readium/podspecs/refs/heads/main/ReadiumZIPFoundation/3.0.1/ReadiumZIPFoundation.podspec'

  # ... rest of your Podfile
end
  1. Add to ios/Runner/Info.plist to allow local server:
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true />
</dict>
Web
  1. Copy JavaScript file:
dart run flureadium:copy_js_file web/
  1. Add to index.html:
<script src="flutter.js" defer></script>
<script src="readiumReader.js" defer></script>

Basic Usage

import 'package:flureadium/flureadium.dart';

// Get the singleton instance
final flureadium = Flureadium();

// Open a publication
final publication = await flureadium.openPublication('file:///path/to/book.epub');

// Display in your widget tree
ReaderWidget(
  onReaderCreated: (controller) {
    // Reader is ready
  },
)

// Navigate
await flureadium.goRight();
await flureadium.goToLocator(savedPosition);

// Listen for position changes
flureadium.onTextLocatorChanged.listen((locator) {
  saveReadingPosition(locator);
});

Documentation

Supported Formats

Format Visual TTS Audio Sync
EPUB 2 Yes Yes - Yes
EPUB 3 Yes Yes Yes Yes
WebPub Yes Yes Yes Yes
PDF Android, iOS - - -

PDF support is available on Android (via Pdfium) and iOS (via PDFKit). See documentation for details.

Web Development

When making changes to the TypeScript files, rebuild the JavaScript:

npm run build

Run this from the root of the plugin directory.

Contributing

Contributions are welcome! Please read our Contributing Guide.

License

This project is licensed under the LGPL v3 -- see LICENSE for details.

This project is a fork of Notalib/flutter_readium.

Acknowledgments

Built on the excellent Readium project.