No description
  • Lua 96.9%
  • Shell 2.2%
  • Makefile 0.3%
  • Python 0.3%
  • Objective-C 0.2%
  • Other 0.1%
Find a file
2026-05-17 10:46:26 +10:00
.ci ci/circle: speed up lint phase (#14472) 2025-10-17 00:38:13 +02:00
.circleci ci: bump docker image (#14976) 2026-02-14 16:17:26 +01:00
.github ci/macos: minor cleanup (#15103) 2026-03-11 22:13:53 +01:00
base@6e4bafc0a0 base: rebase iOS commits onto upstream master 2026-04-24 13:38:16 +01:00
doc ios: prereq preflight + iOS-specific build docs (#1) 2026-04-27 14:40:38 +01:00
frontend ios: frontend tweaks for non-fork sandbox and resume 2026-04-24 13:37:53 +01:00
l10n@30f9355806 Update translations for v2026.03 (#15090) 2026-03-08 12:24:14 +01:00
make ios: prereq preflight + iOS-specific build docs (#1) 2026-04-27 14:40:38 +01:00
metadata update metadata translations 2026-02-10 08:04:24 +01:00
platform ios: tweak keyboard dismiss button label and padding 2026-05-17 10:46:26 +10:00
plugins ios: add cloud folder picker plugin 2026-04-24 13:37:53 +01:00
resources Fix KOReader spelling in the code (#12670) 2024-10-24 10:46:46 +02:00
spec/unit Feature: implement the ability to delete plugins (#15240) 2026-04-06 18:34:50 +02:00
test@c3b5d06e1a tests: speedup testsuite 2024-12-25 17:29:40 +01:00
tools Add python to shell.nix (#15296) 2026-04-21 13:53:02 +02:00
.codecov.yml [CI] Add .codecov.yml (#4695) 2019-03-01 17:29:04 +01:00
.editorconfig experimental port to Mac OSX 2016-04-22 20:13:44 +08:00
.emmyrc.json Add a config file for EmmyLua Analyzer Rust LSP (#14319) 2025-09-14 08:10:19 +02:00
.gitignore ios: wire target into kodev and pull in base changes 2026-04-24 13:37:53 +01:00
.gitmodules ios: repoint base submodule to hezi/koreader-base-ios + README 2026-04-26 10:53:31 +01:00
.luacheckrc tests: factorize UI related helpers 2024-12-25 17:29:40 +01:00
.luacov tests: use new runner 2024-11-25 22:55:57 +01:00
.luarc.json Add a config file for the Lua LSP (#10611) 2023-06-25 16:14:01 +02:00
.shellcheckrc [CI] Add curly braces check (#5809) 2020-02-02 20:35:21 +01:00
COPYING switch license to AGPLv3 2014-03-23 16:53:05 +08:00
datastorage.lua [doc] Add DataStorage developer docs (#15121) 2026-03-17 22:18:49 +01:00
defaults.lua [ReaderHighlight] preserve highlight when using highlight dialogue (#14437) 2025-10-14 15:22:27 +02:00
kodev ios: wire target into kodev and pull in base changes 2026-04-24 13:37:53 +01:00
Makefile drop appimage target in favor of linux 2026-03-15 23:00:26 +01:00
reader.lua ios: frontend tweaks for non-fork sandbox and resume 2026-04-24 13:37:53 +01:00
README.md ios: prereq preflight + iOS-specific build docs (#1) 2026-04-27 14:40:38 +01:00
setupkoenv.lua add provider module (#12641) 2024-12-18 19:40:22 +01:00

KOReader

iOS / iPadOS port

This is a fork of koreader/koreader with an iOS / iPadOS target. It runs on iPhone and iPad, sideloaded via Xcode with a free or paid Apple Developer account.

Highlights:

  • Native iOS app bundle with launch screen, app icon, document types, safe-area letterbox + clamping, rotation handling, night-mode invert, suspend/resume refresh, single-tap event filtering.
  • iCloud Drive (and any other Files-app provider) folder picker: add cloud folders as KOReader folder shortcuts via iOS' native UIDocumentPickerViewController, security-scoped bookmarks resolved on each launch.
  • Monolibtic build (one ~17 MiB libkoreader-monolibtic.dylib instead of 30+ small dylibs) + LuaJIT bytecode precompilation at build time — cold launch on a sideloaded iPhone is around 4 seconds.
  • LuaJIT runs interpreter-only (the iOS sandbox forbids W^X without a special entitlement). Builds against the iOS SDK from a macOS host via make TARGET=ios.

What you need

  • macOS with Xcode installed (App Store or developer.apple.com — not the Command-Line Tools alone; we need the iOS SDK).
  • Homebrew (https://brew.sh).
  • An Apple ID for sideloading. A free personal team gives you a 7-day cert that works for personal builds; a paid Developer account gives you a 1-year cert and unlocks iCloud Drive containers.

Quick start

# Install build prereqs (one command — `make TARGET=ios xcodeproj` will
# also run a preflight that lists anything missing).
brew install autoconf automake bash binutils cmake coreutils findutils \
    gettext gnu-getopt libtool make meson nasm ninja pkgconf sdl3 \
    util-linux xcodegen

# Put the GNU versions of make/find/getopt/util-linux ahead of macOS' BSD ones.
# Add this to your shell profile or run it in the shell you'll build from:
export PATH="$(brew --prefix)/opt/findutils/libexec/gnubin:$(brew --prefix)/opt/gnu-getopt/bin:$(brew --prefix)/opt/make/libexec/gnubin:$(brew --prefix)/opt/util-linux/bin:${PATH}"

# Optional but recommended: build the macOS emulator once first. KOReader's iOS
# build then has a host LuaJIT it can use to precompile the bundled .lua files
# to bytecode (knocks ~30% off boot time). Skipped silently if absent.
make TARGET=macos base

# Generate KOReader.xcodeproj at the repo root.
make TARGET=ios xcodeproj
open KOReader.xcodeproj

In Xcode: Signing & Capabilities → check Automatically manage signing → pick your team. Then plug in your iPhone/iPad, pick it as the Run destination, and hit ⌘R. The app installs and launches.

Full instructions and a troubleshooting section live at doc/Building_iOS.md. The corresponding base submodule is at hezi/koreader-base-ios.


KOReader is a document viewer primarily aimed at e-ink readers.

AGPL Licence Latest release Gitter Mobileread Build Status Coverage Status Weblate Status

DownloadUser guideWikiDeveloper docs

Main features

  • portable: runs on embedded devices (Cervantes, Kindle, Kobo, PocketBook, reMarkable), Android and Linux computers. Developers can run a KOReader emulator in Linux and MacOS.

  • multi-format documents: supports fixed page formats (PDF, DjVu, CBT, CBZ) and reflowable e-book formats (EPUB, FB2, Mobi, DOC, RTF, HTML, CHM, TXT). Scanned PDF/DjVu documents can also be reflowed with the built-in K2pdfopt library. ZIP files are also supported for some formats.

  • full-featured reading: multi-lingual user interface with a highly customizable reader view and many typesetting options. You can set arbitrary page margins, override line spacing and choose external fonts and styles. It has multi-lingual hyphenation dictionaries bundled into the application.

  • integrated with calibre (search metadata, receive ebooks wirelessly, browse library via OPDS), Wallabag, Wikipedia, Google Translate and other content providers.

  • optimized for e-ink devices: custom UI without animation, with paginated menus, adjustable text contrast, and easy zoom to fit content or page in paged media.

  • extensible: via plugins

  • fast: on some older devices, it has been measured to have less than half the page-turn delay as the built in reading software.

  • and much more: look up words with StarDict dictionaries / Wikipedia, add your own online OPDS catalogs and RSS feeds, over-the-air software updates, an FTP client, an SSH server, …

Please check the user guide and the wiki to discover more features and to help us document them.

Screenshots

Installation

Please follow the model specific steps for your device:

AndroidCervantesKindleKoboLinuxPocketbookreMarkable

Development

Setting up a build environmentCollaborating with GitBuilding targetsPortingDeveloper docs

Support

KOReader is developed and supported by volunteers all around the world. There are many ways you can help:

Right now we only support liberapay donations.

Contributors

Last commit Commit activity