Epublifier: turning web novels and docs into epub from a browser extension
Converts some webnovels to epub format
At a glance
- What is it?
- A TypeScript browser extension that extracts a list of HTML pages from a site and compiles them into an epub for an eReader. The author designed it for one-off scraping with a mouse, not for scheduled pipelines.
- Who is it for?
- Epublifier fits readers who want a novel or documentation set in an epub now, and developers who can write a small JavaScript parser definition for a site that has no preset. Skip it when you need a scheduled job, a stable API, or a repeatable batch of thousands of pages.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Ad hoc scraping inside the browser instead of a scheduled pipeline
Epublifier exists to solve a narrow problem: a site publishes a book, or a documentation set, across many HTML pages, and no epub download exists. The extension gathers those pages and compiles them into an epub file you can import into an eReader. The README is unusually clear about what this is not. The author says he does not intend the scraper to be used in a repeated fashion as a background scheduled job, and gives a reason for the UI-driven approach: selecting key elements with the mouse instead of writing configuration. The project also lists why a browser beats a command line scraper for some sites, since some sites generate their text with JavaScript and a request-based script never sees the finished page. Running inside the browser means the page script has already run by the time you select elements.
Five ways to find chapters, from UL lists to a Next button
The supported-site list is really a list of strategies rather than a list of domains. One entry is Novel Update, another is Wuxia World. A third covers most sites from awesome-read-the-docs. The remaining two are generic patterns that apply to any site: a custom site with UL or OL elements acting as a table of contents, or a page whose links can be matched by regex on link text, or selected with a query selector. The fifth pattern covers a custom web application that has a predefined title element, described as a header element, and a Next button to click. That last one is the mechanism for the Wuxia World case in the README's animated example, where the extension traverses the application by clicking forward rather than by walking a table of contents.
Installing the extension, and building it from source with npm
For most people, installation is the browser store. The README lists a Firefox add-on and a Chrome web store listing, and the repository homepage points at the Chrome listing as well. There is no command to install a compiled binary, so treat the store pages as the supported path and the npm scripts as the path for people changing the source. The documented build environment is Windows 10 with NPM version 8.1.2, and the build steps are short. First install NPM, then run this in the base directory:
npm installAfter that, one script builds the Firefox version and another builds the Chrome version:
npm run build_ffnpm run buildThe package.json scripts confirm what each one does, with the browser type and production mode passed to webpack under the hood. The project is a Vue and TypeScript application bundled by webpack, with Prismjs, CodeMirror, Papa Parse and PrimeVue among its dependencies, and the README credits jEpub in its acknowledgements section.
Writing a parser definition for sites no preset covers
The extension is extensible by custom parser definitions, and the README positions that as the path for advanced users who can write JavaScript. The generic patterns listed earlier cover a lot of ground, but a site that loads chapters asynchronously, paginates by query string, or hides its table of contents behind a script will need something hand written. The catch is that this is a code-writing path, not a click-only path, and it is entirely undocumented beyond the single sentence above. There is no published schema for a parser definition, no example file in the README, and no description of which page elements a definition receives. A developer wanting to extend Epublifier for an awkward site should expect to read the TypeScript source under src/ to learn the shape of a definition rather than finding a documented contract.
Why the author says it will not beat tools configured for the same site
The README includes a candid comparison with command line scrapers, Calibre plugins and other extensions, and the conclusion is unfriendly to nobody in particular. If the site you want is already handled by another program or extension, Epublifier will not perform better, because those tools are specifically configured for it. The advantage appears only on sites outside those tools' predefined lists, or on sites that require nontrivial configuration and code, or on sites that need a browser to run JavaScript before the text exists. The author frames the payoff in time rather than throughput: scrape something once or twice without spending too much time writing configuration or code. That framing also explains the mouse-driven interface.
Recent activity, but a licence story that needs checking
The repository is not archived and the last push was on 2026-10-18, so the code is being changed. Release history, however, moves in bursts rather than steadily: v3.0.162 was published on 2026-08-31, v3.0.159 on 2025-07-31, and v3.0.157 on 2025-07-11. Licence handling is where this project is least tidy. The repository listing reports GPL-3.0, and the root contains LICENSE.txt, while the license field inside package.json says ISC. A GPL-3.0 licence on a browser extension means the distributed binary carries copyleft obligations, whereas an ISC declaration in the package manifest permits reuse with little ceremony, so the two statements cannot both describe the same grant. Anyone planning to redistribute a modified build should read LICENSE.txt directly before assuming what the manifest field implies.
Editorial conclusion
Epublifier fits readers who want a novel or documentation set in an epub now, and developers who can write a small JavaScript parser definition for a site that has no preset. Skip it when you need a scheduled job, a stable API, or a repeatable batch of thousands of pages. Before committing, check the licence on the repository root, because the LICENSE.txt file and the license field in package.json name different licences.
Frequently asked questions
Which sites does Epublifier support out of the box?
The README lists Novel Update, Wuxia World and most sites from awesome-read-the-docs. It also supports generic patterns, including custom sites with UL or OL table-of-contents elements, regex matching on link text, query selectors, and a web app with a header title element and a Next button.
Is Epublifier available for Firefox and Chrome?
Yes. The README lists a Firefox add-on and a Chrome web store listing, and the repository homepage points at the Chrome listing.
Can Epublifier run as a scheduled background scraping job?
No. The author states that he does not intend the scraper to be used in a repeated fashion as a background scheduled job, and that the extension is meant for ad hoc generation of an epub from a website.
How do I build Epublifier from source?
The documented steps are to install NPM, run npm install in the base directory, then run npm run build_ff for Firefox or npm run build for Chrome. The documented build environment is Windows 10 with NPM version 8.1.2.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/maoserr-epublifier)Was this useful?