A react-native wrapper for https://readium.org/. At a high level this package allows you to do things like:
- Render an ebook view.
- Register for location changes (as the user pages through the book).
- Register for the Table of Contents (so that you can display things like chapters in your app)
- Control settings of the Reader. Things like:
- Dark Mode, Light Mode, Sepia Mode
- Font Size
- Page Margins
- More (see the
Settings
documentation in the API section)
- Etc. (read on for more details. π)
Dark Mode | Light Mode |
---|---|
- iOS: Requires an iOS target >=
13.0
(see the iOS section for more details). - Android: Requires
compileSdkVersion
>=31
(see the Android section for more details).
NPM
npm install react-native-readium
Yarn
yarn add react-native-readium
Due to the current state of the Readium
swift libraries you need to manually
update your Podfile
(see more on that here).
# ./ios/Podfile
...
platform :ios, '13.0'
...
target 'ExampleApp' do
config = use_native_modules!
...
pod 'GCDWebServer', podspec: 'https://raw.githubusercontent.com/readium/GCDWebServer/3ec154d358f26858071feaa6429e0f1c16bb11bd/GCDWebServer.podspec', modular_headers: true
pod 'R2Shared', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/2.4.0/Support/CocoaPods/ReadiumShared.podspec'
pod 'R2Streamer', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/2.4.0/Support/CocoaPods/ReadiumStreamer.podspec'
pod 'R2Navigator', podspec: 'https://raw.githubusercontent.com/readium/swift-toolkit/2.4.0/Support/CocoaPods/ReadiumNavigator.podspec'
pod 'Minizip', modular_headers: true
...
end
Finally, install the pods:
pod install
You might need to add jcenter
if you're getting a build failure on android:
// android/build.gradle
...
allprojects {
repositories {
...
// required by react-native-readium https://github.com/readium/kotlin-toolkit/issues/31
jcenter()
}
...
}
...
If you're not using compileSdkVersion
>= 31 you'll need to update that:
// android/build.gradle
...
buildscript {
...
ext {
...
compileSdkVersion = 31
...
import React, { useState } from 'react';
import { ReadiumView } from 'react-native-readium';
import type { File } from 'react-native-readium';
const MyComponent: React.FC = () => {
const [file] = useState<File>({
url: SOME_LOCAL_FILE_URL,
});
return (
<ReadiumView
file={file}
/>
);
}
Take a look at the Example App for a more complex usage example.
Format | Support | Notes |
---|---|---|
Epub 2 | β | |
Epub 3 | β | |
β | On the roadmap, feel free to submit a PR or ask for direction. | |
CBZ | β | On the roadmap, feel free to submit a PR or ask for direction. |
Missing a format you need? Reach out and see if it can be added to the roadmap.
DRM is not supported at this time. However, there is a clear path to support it via LCP and the intention is to eventually implement it.
Name | Type | Optional | Description |
---|---|---|---|
file |
File |
β | A file object containing the path to the eBook file on disk. |
location |
Locator |
β | A locator prop that allows you to externally control the location of the reader (e.g. Chapters or Bookmarks) |
settings |
Partial<Settings> |
β | An object that allows you to control various aspects of the reader's UI (epub only) |
style |
ViewStyle |
β | A traditional style object. |
onLocationChange |
(locator: Locator) => void |
β | A callback that fires whenever the location is changed (e.g. the user transitions to a new page) |
onTableOfContents |
(toc: Link[] | null) => void |
β | A callback that fires once the file is parsed and emits the table of contents embedded in the file. Returns null or an empty [] if no TOC exists. See the Link interface for more info. |
See the contributing guide to learn how to contribute to the repository and the development workflow.
The standard release command for this project is:
yarn version
This command will:
- Generate/update the Changelog
- Bump the package version
- Tag & pushing the commit
e.g.
yarn version --new-version 1.2.17
yarn version --patch // 1.2.17 -> 1.2.18
MIT