# epub-press-clients packages a reading service into a Chrome extension and an npm library

> epub-press-clients is the client side of EpubPress, a service that stitches articles and webpages into ebooks, split into a Chrome extension, a JavaScript library and an unreleased set of publisher widgets. The split is sensible, and the roadmap tells you which parts are actually finished.

**haroldtreen/epub-press-clients** — 📦 Clients for building books with EpubPress.

- Repository: https://github.com/haroldtreen/epub-press-clients
- Website: https://epub.press
- Stars: 618 · Forks: 88
- Language: JavaScript
- License: GPL-3.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/haroldtreen-epub-press-clients

## The service does the stitching, the clients do the talking

EpubPress is described as a service for stitching articles, blogs and webpages into a customized ebook, and this repository holds the clients rather than the service. The backend code lives in a separate repository, haroldtreen/epub-press, and the split is the first thing to understand before choosing either. The clients here are the parts users and applications touch: a browser extension, a JavaScript library, and a set of embeddable widgets. The stated benefits of the service are worth reading as the value proposition of these clients. Articles are downloaded for offline reading, the resulting books are compatible with iPhone, Android, Kindle, Nook and similar devices, website boilerplate and ads are removed to leave clean content, and information can be grouped together, for example as News from this week or Top 10 travel articles, then shared with friends. The extension in particular is the piece that makes the grouping and sharing natural, since it works from the tabs you already have open.

## Three packages with three different states of completion

The repository is a monorepo with a packages/ directory, and the three subpackages are at very different stages. epub-press-chrome is the Chrome extension, published on the Chrome Web Store, and the description says it allows you to build ebooks by selecting articles from your currently open tabs. Its own README lives at packages/epub-press-chrome/README.md. epub-press-js is a JavaScript library for creating books with EpubPress, published on npm as epub-press-js, with its README at packages/epub-press-js/README.md. epub-press-widgets is a set of ready to use widgets for integration by publishers, giving your users the ability to download your content in an ebook, and here the README is blunt: development and release is on the roadmap. That last line is the one to read twice. The widget package is described and its README is linked, but there is no statement that it is available, so anyone planning a publisher integration around it is planning against an unreleased package.

## The extension model is tabs in, ebook out

The extension is the part of the system that has a visible user workflow, and the documentation describes it in one sentence that carries most of the design. You select articles from your currently open tabs, and the extension builds the ebook from that selection. The value is that there is no separate reading queue to maintain. The tabs are the queue, and the thing you have already decided is worth reading is the input. Compare that with a bookmarking service where you have to save items first and then convert them later, and the difference in friction is the whole argument for a client built this way. The other benefit listed for the service, removing website boilerplate and ads so that only clean content remains, is what makes the captured article readable once it is out of the browser. The acknowledgements section names the content extraction library used, node-readability, which is the component doing that stripping, and nodepub for the epub construction. Both are npm packages, so the extension and the library share the same extraction and packaging approach.

## A monorepo root with an old toolchain ceiling

The root package.json identifies the workspace as epub-press-chrome, marks it private, and declares a node engine of >=0.8.0.

```json
{
  "name": "epub-press-chrome",
  "private": true,
  "engines": {
    "node": ">=0.8.0"
  },
```
 That engine floor is a fossil of the era the project started in, and it tells you how far back the code reaches, but it also means the tooling is from that same era. The development dependencies are eslint 5.12.1 with the airbnb config, the import, jsx-a11y and react plugins, all in the 5.x and 7.x ranges. There is no test runner, no TypeScript and no build tool in the root manifest, and the repository has a package-lock.json alongside an .eslintrc, an .eslintignore and an .editorconfig. A CLAUDE.md file sits at the root next to LICENSE.md, which suggests the repository has been touched by an AI coding assistant at some point, and the screenshots/ directory holds images used in the documentation. The absence of any test tooling in the root manifest is the notable gap for a client that other people install.

## The roadmap shows the service is still being shaped

The roadmap section lists the features the project intends to build, and reading it tells you where the product is. Widgets are first, which confirms the unreleased package is the priority. Then comes the ability to share your generated creations with others, a custom cover page, extra metadata such as author, and detection for pages with a list of links, naming OneTab, Feedly and RSS feeds as the cases, so that those links can be shown. That last item is a small but telling piece of engineering: a browser extension that captures an article also has to recognise the pages that are not articles at all, and index pages and feed readers are exactly the shapes that break naive extraction. The feedback address for ideas and feature requests is published, and the roadmap is framed as open to suggestions. For an adopter this is the useful part, because it says which behaviours you should not build your own workaround around, since they are already planned.

## Releases stopped in 2020 while the repository kept moving

The release history and the commit history do not line up, and that is worth understanding before you depend on any of it. Three releases are listed: 0.10.2, titled Fix for broken downloads, from 2018-03-24, 0.11.0, titled Fix for Chrome extension broken state, from 2019-02-23, and 0.12.0, titled Remove unused permissions, from 2020-05-31. That last title is the interesting one, because removing unused permissions is a response to the Chrome Web Store tightening what extensions may ask for, which suggests the extension package was still being adjusted for the platform around 2020. The last push to the master branch was on 2026-06-25 and the repository is not archived, so code has moved since then, but no release followed. In practice that means the Chrome Web Store listing and the npm package may lag the source in the repository. The licence is GPL-3.0, which is worth pausing on for a client library, because a GPL library linked into a proprietary application imposes distribution obligations on that application. The service itself is a separate hosted dependency, which is the more likely long term constraint.

## When a different tool fits better

There are cases where this set of clients is the wrong answer. If you need to author and structure an ebook with real chapters, a table of contents and editorial control, EpubPress is a stitching service rather than an authoring tool, and the captures it produces are collections of pages rather than composed books. If your requirement is a pure reading list with no ebook output at all, a bookmarking service with offline export is a closer fit, because the entire value of this project is the conversion to a book format. There is also a licensing route to check. The GPL-3.0 on the clients is the difference between embedding this code in a commercial product and using the hosted service over HTTP, and the two have very different obligations. Finally, the widget package is not released, so a publisher integration that depends on it is either waiting for a release or taking on the work of building and hosting the widget themselves, in which case the repository gives you a reference rather than a dependency.

## Conclusion

epub-press-clients suits developers who want to build reading-list or ebook features on top of the EpubPress service, whether as a browser extension or as a library in a Node application, and it suits publishers who want a ready made download widget. It does not suit teams looking for a complete ebook authoring tool, because the stitching and conversion work lives in the separate backend repository, and it does not suit anyone who needs the widget package today, since its development and release are still on the roadmap. Before building on it, install epub-press-js from npm and confirm the EpubPress service is reachable from your environment, and check the packages/epub-press-widgets README to see whether a usable build exists.

## FAQ

### What is epub-press-clients?

It is the client side of the EpubPress service, a monorepo holding a Chrome extension for building ebooks from open tabs, a JavaScript library published on npm, and a set of publisher widgets whose development and release are still on the roadmap.

### Where is the backend code for EpubPress?

The backend is in a separate repository, haroldtreen/epub-press. The epub-press-clients repository contains only the Chrome extension, the JavaScript library and the widgets.

### How does the EpubPress Chrome extension work?

The extension lets you build ebooks by selecting articles from your currently open tabs. Content extraction is done with node-readability and the epub file is constructed with nodepub.

### Can I use the EpubPress widgets in my site today?

Not according to the documentation. The widgets package is described as a set of ready to use widgets for publisher integration, but the README states that development and release is on the roadmap.

### What licence does epub-press-clients use?

The project is licensed under GPL-3.0, with the licence text in the LICENSE.md file at the root of the repository.

## Sources

- [haroldtreen/epub-press-clients on GitHub](https://github.com/haroldtreen/epub-press-clients)
- [License: GPL-3.0](https://github.com/haroldtreen/epub-press-clients/blob/master/LICENSE)
- [Project website](https://epub.press)
- [README](https://github.com/haroldtreen/epub-press-clients/blob/master/README.md)
- [Releases](https://github.com/haroldtreen/epub-press-clients/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/haroldtreen-epub-press-clients
