Install and project layout

Install and project layout

Requirements

Required

Optional

Tool Used by Notes
mmdc (@mermaid-js/mermaid-cli or Homebrew mermaid-cli) Mermaid diagrams Needs Chrome/Chromium for Puppeteer
Chrome or Chromium Mermaid CLI Set PUPPETEER_EXECUTABLE_PATH if needed
epubcheck kdp:ebook Extra validation; skipped with a warning when absent

macOS (Homebrew)

brew install php composer
brew install mermaid-cli
brew install --cask google-chrome
brew install epubcheck
export PUPPETEER_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

npm / Linux

npm install -g @mermaid-js/mermaid-cli
# Debian/Ubuntu example:
sudo apt-get install -y chromium-browser
export PUPPETEER_EXECUTABLE_PATH="$(command -v chromium-browser || command -v google-chrome || command -v chromium)"

Install epubcheck and put it on PATH, or use brew install epubcheck on macOS.

Check the toolchain

php -m | grep -E 'dom|gd|mbstring|zip|zlib'
mmdc --version
epubcheck --version
papyrus doctor

Install per project

In your book repository:

composer require milon/papyrus
vendor/bin/papyrus --version
vendor/bin/papyrus init
vendor/bin/papyrus doctor

Wire Composer scripts (example):

{
  "scripts": {
    "build": "papyrus build",
    "build:pdf": "papyrus build:pdf --theme light,dark",
    "build:epub": "papyrus build:epub",
    "build:html": "papyrus build:html",
    "build:site": "papyrus build:site",
    "build:sample": "papyrus build:sample",
    "build:kdp": "papyrus kdp",
    "doctor": "papyrus doctor"
  }
}

Package page: packagist.org/packages/milon/papyrus.

Install globally

composer global require milon/papyrus
export PATH="$(composer global config bin-dir --absolute):$PATH"
papyrus list

Scaffold a book

papyrus init
papyrus init -d my-book

init creates papyrus.php, content/, and an empty assets/ directory. Papyrus uses bundled themes, CSS, and fonts by default. Publish those files into your project only when you want to customize them:

papyrus asset:publish
papyrus asset:publish --only=themes,css

Use --force / -f to overwrite files during init, or with asset:publish to overwrite published assets. --only limits publishing to themes, css, and/or fonts.

Layout

Path Role
papyrus.php Book settings
content/ Markdown chapters
assets/ Your overrides: themes, CSS, covers, fonts, banner
export/ Built artifacts
.papyrus/ Incremental caches

Always run from the book root, or pass -d / --dir. Override where artifacts are written with -e / --export (default: <book>/export):

papyrus doctor -d /path/to/book
papyrus build --dir /path/to/book
papyrus build:site -d /path/to/book -e /path/to/out

Browse the Papyrus source on GitHub if you want to follow along with this handbook’s own project under examples/the-papyrus-handbook/.