emureader 
- Description
- General-purpose document reader
- Latest
- emureader-0.4.0.tar (.sig), 2026-Nov-04, 290 KiB
- Maintainer
- Divya Ranjan Pattanaik <divya@dialetheia.xyz>
- Tushar <tusharhero@sdf.org>
- Other versions:
- development version
- Website
- https://codeberg.org/MonadicSheep/emureader
- ELPA's Repository
- CGit or Gitweb
To install this package from Emacs, use package-install or list-packages.
Full description
Previously called The Emacs Reader.
An all-in-one document reader for GNU Emacs, supporting all major document formats. This package intends to take from doc-view, nov.el, and pdf-tools and make them better. And as such, it is effectively a drop-in replacement for them.
1. EMuReader at Emacsconf 2025
2. Supported Formats
EMuReader (via MuPDF) can open all the formats below.
2.1. Well-supported Formats
- EPUB
- MOBI
- FB2
- XPS/OpenXPS
- CBZ
2.2. Office Document Formats
These formats below are not really for document reading, and as such while they are supported by MuPDF and can be opened fine, it’s just not going to be that good of an experience. It should only be used for quickly checking the textual contents of the document, and certainly cannot be edited inside Emacs. (You may use LibreOffice for that.)
2.2.1. Open Document Formats (LibreOffice)
- ODT
- ODS
- ODP
- ODG
2.2.2. Proprietary Formats
Using these formats is heavily discouraged, you should always prefer the above formats from LibreOffice (Which can also you help you edit these formats if you need to). But since MuPDF does come with some very minimal support for these proprietary formats as well, they can also be viewed:
- DOCX
- PPTX
- XLSX
3. Installation
You can install it from GNU ELPA via M-x package-install RET emureader
RET.
Or if you use use-package,
(use-package emureader)
- Dependencies
mupdf@v1.26.0gccGNU Make
3.1. GNU/Linux distribution specific instructions
3.1.1. GNU Guix
guix install emacs-emureader
This will get the latest release of emureader. However, if you want to get latest features, bug fixes (and bugs!) to help us with testing emureader, you should use the master branch. You can instruct Guix to get it for you, like so,
guix install emacs-emureader --with-branch=emacs-emureader=master
You can also upgrade an already installed package with,
guix upgrade emacs-emureader --with-branch=emacs-emureader=master
You may replace the branch name as you need.
3.1.2. Debian GNU/Linux
Follow this write up.
3.1.3. Nix
Follow the instructions here.
3.2. MacOS specific instructions
Install MuPDF using Homebrew,
brew install gcc brew install make brew install mupdf
Find more information here.
3.3. Manual
3.3.1. User lisp directory (recommended)
Clone the repository into
~/.emacs.d/user-lisp/,git clone https://codeberg.org/monadicsheep/emureader ~/.emacs.d/user-lisp/emureader
You may also symlink an existing checkout instead.
- You may now run
M-x prepare-user-lisp RETor restart Emacs to make Emacs automatically prepare and load emureader. - You also need to build the dynamic module, for this we provide the
M-x emureader-build RET. But you can also runmakedirectly yourself.
3.3.2. package-vc
You can also utilize use-package to do the same, put the following in
your configuration,
(use-package emureader :vc t :load-path "/path/to/emureader")
3.3.3. In emacs -Q
To test emureader in a default Emacs config, first generate the auto loads using make autoloads.
emacs -Q -L . -l emureader-autoloads.el
This command adds the current directory to path, and loads emureader-autoloads.el.
4. Key Bindings
nfor going to next pagepfor going to previous pageC-nfor scrolling down.C-pfor scrolling up.C-bfor scrolling left.C-ffor scrolling right.Qfor closing the EMuReader buffer.M-<for going to the first page.M->for going to the last page.M-g gfor going to a particular page.M-vorPage Upfor scrolling to the top of the page.C-vorPage Downfor scrolling to the end of the page.SPC,S-SPC, andDELmake the above two commands keep scrolling the pages.=,+, andC-<wheel-up>for zooming into the page.-andC-<wheel-down>for zooming out of the page.Hto make the page fit the height of the current window.Wto make the page fit the width of the current window.
5. How It Works
This package is entirely distinct from DocView and pdf-tools in both its architecture and implementation. It leverages Emacs’ dynamic/native modules which allows it to interoperate with other programming languages outside of its Emacs Lisp environment.
Thus, we rely on the efficient MuPDF library as a shared object with which our dynamic modules work. All the tasks that require manual memory management, efficiently dealing with the rendered pages, and so on are delegated to the C backend, and Emacs takes care of exclusively what it’s good at: displaying produced pages, buffer management, and all round integration with the rest of Emacs.
For understanding how dynamic modules work within Emacs, please consult the following article I wrote:
6. Live Streams
I have been streaming the development of this package on my PeerTube channel: (phi (mu (lambda))).
The streams happen on Sundays, biweekly at around 2:30 PM UTC. Follow the channel on Peertube or my Mastodon to be notified when I stream. You can also find some stream notes here.
If you wish to join the discussion for the package, you should join the IRC channel #phi-mu-lambda on Libera.
7. License
Unless another license is listed, all files in emureader are licensed under the GNU General Public License version 3 (or at your option, any later version). See COPYING and CONTRIBUTORS for further details.
The logo of the project was made by Divya Ranjan Pattanaik and is shared under CC-BY-SA-4.0. The logo uses the following artworks from GNU:
The interesting history of different Emacs logos is outlined by Luis Fernandes, in his article on The Design of the Emacs Logo.
News
;;; -*- mode: auto-fill; mode: org; -*- See =(info "(standards) NEWS File")=. User facing changes per release are to be recorded here. * Version 0.4.0 - Rename to EMuReader. - Per window pages, zooming, etc. support, which means that it is now possible to view different pages of the same document (from the same buffer) on different windows. - Change 'screenful' to 'screen' in command names. - Make =emureader-reset-size= interactive. - Overall stability improvements when opening files, accessing bookmarks, and outlines. - Remove F5 keybinding for =emureader-presentation-mode=. - Remove =emureader-mode= as an interactive command. - Fix weird page border artifacts when using the mouse. - Add =emureader-build= command to automatically build the dynamic module. - Fix handling documents with multiple orientations. - EMuReader buffers now get automatically reverted via =auto-revert-mode= without crashing. * Version 0.3.2 - Fix reader-outline when original source buffer is killed. - Correct keybindings for C-v/M-v. - Enhance build system on GNU/Linux and MS Windows. * Version 0.3.1 - Start NEWS file. - Fix MS Windows build. - Fix the order of reader outline, where the last heading would show up at the beginning, now they show up at the end. - Fix bug where setting the left-fringe-width would disable the centering. - Add new customize option, =reader-default-fit=, for setting the default fitting (fit to height or fit to width). - Add a new command, =reader-reset-size=, to reset scaling to 1.0. - Fix scrolling when =pixel-scroll-precision-mode= is enabled. - Fix =revert-buffer= to respect the theme, page and scale of the document.