nonkuri279 downloadsA PDF and EPUB reader with two-page spread support for right-to-left bound (vertical Japanese) books, including an Acrobat-style cover page option.
日本語の説明は README.ja.md にあります。
A PDF and EPUB reader for Obsidian that displays two-page spreads the way a printed book does — including right-to-left binding, as used by vertically written Japanese books, and Acrobat Reader's cover page option.
Obsidian's built-in PDF viewer scrolls one page at a time. BookView pairs the
pages instead, puts them in the right order for the binding, and turns them with
the arrow keys. It also opens .epub files, which Obsidian cannot open at all,
with vertical Japanese typesetting and right-to-left page progression.

A right-bound Japanese book: page 51 on the left, page 50 on the right, with the document's outline in the side panel.

The same viewer on a left-bound English book, which BookView recognises on its own. Both screenshots show the PDF side; EPUBs get a reader of their own.
← means "next" in a right-bound book./ViewerPreferences /Direction /R2L
selects right-to-left binding and /PageLayout /TwoPageRight selects a spread
with a separate cover — but hardly any PDF says either, so the binding is
otherwise read from the text itself: vertically set Japanese, Hebrew and Arabic
open right-bound, and a document with none of those opens left-bound. What
stays ambiguous — horizontally set Japanese, or a scan with no text at all —
keeps whichever default you set.UniJIS-UCS2-H, 90ms-RKSJ-H, …) render correctly.Obsidian cannot open EPUBs at all, and in a stock vault does not even list them in the file explorer. BookView reads both reflowable and fixed-layout books.
page-progression-direction, so ← means "next" in a right-opening book
without any of the sniffing the PDF side has to do.main.js; nothing is fetched at runtime. Books are
rendered under a Content-Security-Policy that denies scripts and every network
request, so an EPUB cannot run code or call home.Open any PDF in your vault. By default BookView handles .pdf files in place of
the built-in viewer; you can turn that off in the settings and open individual
files with Open in BookView from the file menu, or from the command palette.
.epub files open the same way. Obsidian has no EPUB viewer of its own — in a
stock vault it does not even list .epub in the file explorer, because nothing
has claimed the extension. BookView claims it, which is what makes those files
appear and open.
If another plugin already handles .epub, BookView takes over from it once the
workspace has loaded, and hands it straight back when BookView is disabled.
Nothing is lost either way: Open in BookView in the right-click menu, and the
matching command, open a book in BookView whoever owns the extension — so you can
also leave the extension to the other plugin (turn off Open EPUB files in
BookView) and reach BookView only when you want it.
| Key | Action |
|---|---|
← / → |
Next / previous, flipped to match the binding |
↑ ↓ PageUp PageDown Space |
Previous / next |
Home / End |
First / last page |
+ / - |
Zoom in / out |
0 |
Fit page |
W |
Fit width |
S |
Toggle two-page spread |
C |
Toggle cover page |
R |
Toggle right-to-left binding |
T |
Toggle the outline panel |
Ctrl / Cmd + wheel zooms.| Key | Action |
|---|---|
← / → |
Next / previous, flipped to match the binding |
↑ ↓ PageUp PageDown Space |
Previous / next |
+ / - |
Larger / smaller type |
T |
Toggle the contents panel |
Ctrl / Cmd + wheel changes the type size.If a book opens but does not appear, the command Copy EPUB diagnostics puts the renderer's measurements on the clipboard, ready to paste into a bug report.
Every action is also a command, so you can assign your own hotkeys under Settings → Hotkeys.
.pdf and .epub files, and whether per-file state
is stored.Settings → Community plugins → Browse, search for BookView, install, and enable it.
Download main.js, manifest.json, and styles.css from the
latest release
and put them in <vault>/.obsidian/plugins/bookview/, then enable the plugin
under Settings → Community plugins.
![[file.pdf]]) still use Obsidian's own rendering..acsm file is not something BookView can decrypt, and it will not try..epub embedded in a note (![[book.epub]]) is not rendered.npm install
npm run dev # esbuild in watch mode
npm run build # type check and production build
npm run deploy -- "C:/path/to/Vault" copies the built files into a vault.
The view can be run in a plain browser, without starting Obsidian:
npm run test:pdf # generate test/sample.pdf (5 pages, right-bound, outline, Japanese text)
npm run test:epub # generate test/vertical.epub and test/horizontal.epub
npm run test:build # build test/harness.js
npm run test:serve # http://localhost:4321/test/index.html
?epub=vertical.epub on the harness URL runs the EPUB view instead of the PDF
one; ?pdf= picks a different PDF fixture.
npm test checks how the plugin takes over and hands back .pdf and .epub
— including the case where another plugin already owns one of them — against a
registry that behaves like Obsidian's.
test/obsidian.ts is a minimal stub of the Obsidian API and is not part of the
plugin bundle.
MIT — see LICENSE.
Bundles pdf.js by the Mozilla Foundation, under the Apache License 2.0, and foliate-js by John Factotum, under the MIT License — which in turn brings zip.js and fflate. See THIRD_PARTY_NOTICES.md.