Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

HPub reader/writer for nodejs

branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

hpubjs - hpub reader and writer

Build Status hpubjs provides access to hpub files in node.js applications.


via npm:

$ npm install hpubjs



hpub = require("hpub");

// un-packing book to a folder
reader = new hpub.Reader("path/to/book.hpub"); {
  reader.extract("test/folder", function(err){
    // do whatever you want with extracted publication

You can read meta information or any other file without extracting the whole book

// reading meta information (from book.json) without un-packing the book
reader = new hpub.Reader("path/to/book.hpub") {
  meta = reader.meta();
  // do something with meta information...

// you can extract any file inside book.hpub to buffer
reader = new hpub.Reader("path/to/book.hpub") {
  bufferedPage = reader.getFile('page-000.html');
  // ... do something with it


hpub = require("hpub");

writer = new hpub.Writer("./test/hpub_samples/book_to_be");

// prepare meta information
meta = {
  hpub: 1,
  title: "Title of the book",
  author: ['First Author', 'Other Author'],
  creator: ['fagbokforlaget'],
  date: "2011-01-01,
  url: '', 
  cover: 'book.png',
  publisher: 'Fagbokforlaget',
  orientation: 'both',
  zoomable: true,

// add them to our hpub

// add one or more pages

// if assets are required, add them:
writer.assets.addFolders('css', 'js'); // list folders separeted by coma
writer.assets.addFile('path/to/file.ext'); // one file at a time

// build the book (book.json is going to be created) {
  // book.json should be created by now

  // if you need a book.hpub it's time to do this now:
  writer.pack("tmp/book", function(err, size) {
      // the book is ready!


$ npm test

Coverage (Make sure you have installed jscoverage (it's easy sudo aptitude install jscoverage or brew jscoverage)

$ npm test-cov

Something went wrong with that request. Please try again.