# pagedown: print-ready PDF from R Markdown without a LaTeX install

> pagedown is an R package that paginates the HTML output of R Markdown using CSS paged media, so a document becomes a typeset PDF through a browser rather than a LaTeX toolchain. It ships a set of ready output formats for theses, journal articles, resumes, posters, business cards and letters.

**rstudio/pagedown** — Paginate the HTML Output of R Markdown with CSS for Print

- Repository: https://github.com/rstudio/pagedown
- Website: https://pagedown.rbind.io
- Stars: 926 · Forks: 124
- Language: R
- License: NOASSERTION
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/rstudio-pagedown

## CSS paged media replaces the LaTeX toolchain

pagedown's stated purpose is to paginate the HTML output of R Markdown with CSS for print. The pitch in one line is that you only need a modern web browser such as Google Chrome or Microsoft Edge to generate a PDF, with no need to install LaTeX to get beautiful PDFs.

That framing explains who the package is for. R Markdown already solves the authoring problem, but the default path to PDF goes through LaTeX, which means a TeX distribution, a package manager for LaTeX, and a class file that matches the target venue. pagedown sidesteps that by moving the typesetting problem into CSS and the browser's own paged media support.

The browser becomes the rendering engine, which is the trade. CSS paged media gives you running headers, page counters, footnote placement and page breaks that LaTeX handles natively, and the visual result can be tuned with ordinary CSS rather than a class file and its macro vocabulary. What you give up is the LaTeX ecosystem itself and any venue that insists on LaTeX source.

The package description on the repository is correspondingly narrow and honest: paginate the HTML output of R Markdown with CSS for print. It is not a general HTML to PDF converter, and it does not try to be a document authoring system of its own. R Markdown remains the source of truth, and pagedown is the output format that renders it.

The repository layout follows the standard R package conventions, with R/ for the code, man/ for documentation, inst/ for bundled assets such as the CSS, tests/, a DESCRIPTION file, a NAMESPACE, a NEWS.md, and both LICENSE and LICENSE.md files at the root.

## Paged.js and ReLaXed do the actual pagination work

The package does not implement a pagination engine of its own. The documentation is explicit that it stands on the shoulders of two projects, Paged.js and ReLaXed, and adds a note about the borrowing: only some CSS was taken from the ReLaXed repo, and the Node package itself was not really used.

That distinction matters for anyone auditing the dependency chain. Paged.js is the piece doing the layout work in the browser, filling pages, running headers and footers and applying the CSS paged media rules. ReLaXed contributes a visual style rather than machinery. So pagedown is best understood as a curated set of CSS stylesheets plus the R plumbing that wires them into R Markdown output formats, sitting on top of Paged.js for the hard part.

The styles are the actual product. The author section says contributions of more creative and beautiful CSS stylesheets are particularly welcome, and that people who do not write CSS can still help by pointing at pages they have seen that other CSS experts might port into the package.

That division of labour explains the shape of the package's features. Every output format listed in the documentation is essentially a different stylesheet plus a small amount of R code, which is why the list reads as a catalogue of document types rather than a list of functions with many parameters.

The R side is minimal by design. The output formats are exposed as functions with names such as pagedown::html_paged, so a document switches format by changing one line in the YAML header rather than by learning a new configuration system.

## The output format catalogue: thesis, JSS article, resume, posters, cards, letters

The package ships a set of ready made R Markdown output formats, and this is where the practical value sits.

For longer documents there is pagedown::html_paged for generic paged HTML documents, pagedown::thesis_paged for a thesis layout, and pagedown::jss_paged for a Journal of Statistical Software style article. Each has a live example hosted on the package site.

For shorter and single page documents the range is unusually wide. pagedown::html_resume produces an HTML resume, and the documentation points at the datadrivencv package, which builds a CV from spreadsheet data using pagedown::html_resume, for anyone who wants the content generated rather than typed.

There are two poster styles, pagedown::poster_relaxed in the ReLaXed style and pagedown::poster_jacobs in the Jacobs University style. For more poster styles the documentation points to Brent Thorne's posterdown package, which is the natural extension point if the two built in styles do not match your conference template.

Two smaller formats round it out: pagedown::business_card for a business card, and pagedown::html_letter for a letter in HTML.

The examples section lists real documents built with the package, including Nick Strayer's CV, Ulrik Lyngs's CVs, Jiena Gu McLellan's CV, Beatriz Milz's resume, a template for the French Scouts and Guides Association, an executive summary template by Joshua David Barillas, and pagedreport by Thomas Vroylandt and David Keyes, which helps use pagedown with additional template proposals. Looking at those is the fastest way to judge whether the styles match what you need to produce.

## Installing with pak and the Pandoc floor

The installation instruction in the documentation is to install from GitHub using pak, the modern R package installer.

```r
# install.packages("pak")
pak::pak('rstudio/pagedown')
```

The commented line is there because pak itself may not be installed yet, so the two lines are sequential: install the installer, then use it to fetch pagedown.

The harder requirement is Pandoc. The package requires a recent version of Pandoc, at least 2.2.3. If you use RStudio, the recommendation is to install a recent version, at least 1.2.1335, which bundles Pandoc 2.x, otherwise you need to install Pandoc separately.

That distinction about where Pandoc comes from is worth pausing on. R Markdown does not generate HTML on its own, Pandoc does the conversion, and pagedown sits after that in the pipeline. So the Pandoc version determines whether your document becomes HTML at all, before pagedown's pagination is even involved. An old Pandoc produces a failure that has nothing to do with pagedown.

The package is also available through CRAN, which the downloads badge from the RStudio CRAN mirror confirms. The two channels serve different needs: the CRAN route is the stable one for a reproducible analysis environment, and the GitHub route through pak is how you get a development version or contribute a new style.

Once installed, the output format is selected in the YAML header of the R Markdown document, and the browser is what turns the paginated HTML into a PDF.

## Where the browser dependency becomes a constraint

The main limitation follows directly from the design. Because a modern web browser generates the PDF, the rendering depends on that browser's implementation of CSS paged media, and on Paged.js emulating what a print engine would do.

That means output can differ between Chrome and Edge, and it means a document that looks right on one machine can paginate differently on another with a different browser version or font set. Font availability is the sharp edge here, since a print layout depends on the metrics of the fonts it uses, and a machine missing a font will substitute another one and reflow the pages.

The documentation does not describe a headless rendering pipeline, a CI setup for producing PDFs, or a set of rules for pinning browser versions, so anyone generating PDFs automatically is on their own there. For a one-off report or a thesis printed once, this is a non-issue. For a pipeline that produces the same PDF every night, it is the thing to test first.

The second limitation is scope. pagedown is an output format for R Markdown, so it does nothing for a document authored in Word or LaTeX, and it is not a general HTML to PDF service. If your input is HTML rather than R Markdown, you want a browser print or a dedicated conversion tool, and pagedown is the wrong layer to reach for.

Third, and this is the one that trips up academics, some venues require LaTeX source rather than a PDF. A journal or university that checks that your thesis compiles from the source you submitted cannot accept a pagedown output, however good the typography looks. The JSS format in the catalogue exists because that venue accepts this style of submission; it does not generalise to venues with a LaTeX requirement.

## Maintenance, licensing and an ecosystem that extends the styles

Release history shows steady work rather than a maintained-and-idle project. Version 0.25 was released on 2026-08-28, 0.24 on 2026-04-09 and 0.23 on 2025-08-25, and the last push was on 2026-08-28, the same day as the 0.25 tag. That version numbering, still below 1.0, is a signal that the output formats and CSS can change between releases.

The licence field on the repository says Other, a custom licence that GitHub cannot classify, and the root directory carries both a LICENSE file and a LICENSE.md. That combination is normal for a package that bundles third party assets, and it means the terms for the bundled CSS stylesheets need to be read directly rather than inferred from the repository page. This is not legal advice, but if you plan to reuse the styles in your own templates rather than just use the package, reading those files is the first thing to do.

The authorship note is also relevant to how the project is likely to evolve. The main authors are Yihui Xie of RStudio and Romain Lesur, and Romain received a grant from the Shuttleworth Foundation for his work on both Paged.js and pagedown. That link matters because pagedown's pagination behaviour is inherited from Paged.js, so a change in the upstream engine changes what pagedown produces.

The extension ecosystem is where the package is most useful. datadrivencv for data-driven CVs, posterdown for additional poster styles, and pagedreport for template proposals all build on pagedown rather than replacing it. Adopting pagedown means adopting the hub that those tools plug into, and it means your templates can grow beyond the bundled set.

## Conclusion

pagedown is the right tool for an R user who already writes R Markdown and wants a typeset PDF without installing and maintaining LaTeX, and its output formats cover the document types statisticians and researchers actually submit. It is not a general HTML to PDF converter, and it is not a replacement for LaTeX if your journal requires a LaTeX source file. Before adopting it, check that Pandoc 2.2.3 or newer is available, since that is a hard requirement, and read the licence files in the repository root, because GitHub does not classify the licence on the repository page and the terms there govern redistribution of the bundled CSS styles.

## FAQ

### How do I install pagedown for R Markdown?

The documented route is to install it from GitHub with pak, running pak::pak('rstudio/pagedown') after installing pak itself with install.packages("pak"). The package is also available on CRAN, and Pandoc 2.2.3 or newer is required.

### Do I need LaTeX to produce a PDF with pagedown?

No. The documentation states that you only need a modern web browser such as Google Chrome or Microsoft Edge to generate the PDF, and that there is no need to install LaTeX. The pagination is done with CSS paged media through Paged.js.

### Which document formats does pagedown provide?

It provides html_paged for general paged HTML, thesis_paged for theses, jss_paged for Journal of Statistical Software articles, html_resume for CVs, poster_relaxed and poster_jacobs for posters, business_card for business cards, and html_letter for letters.

### Can I add my own CSS style to pagedown?

The documentation welcomes contributions of new CSS stylesheets, and says it is also helpful to share pages you have seen that other CSS experts might be able to port into the package. Related packages exist for this too, such as posterdown for more poster styles and datadrivencv for building a CV from spreadsheet data.

## Sources

- [Issues](https://github.com/rstudio/pagedown/issues)
- [Project website](https://pagedown.rbind.io)
- [README](https://github.com/rstudio/pagedown/blob/main/README.md)
- [Releases](https://github.com/rstudio/pagedown/releases)
- [rstudio/pagedown on GitHub](https://github.com/rstudio/pagedown)

---

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