knitr v1.30


Monthly downloads



A General-Purpose Package for Dynamic Report Generation in R

Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.



Build Status Coverage status Downloads from the RStudio CRAN mirror

The R package knitr is a general-purpose literate programming engine, with lightweight API's designed to give users full control of the output without heavy coding work. It combines many features into one package with slight tweaks motivated from my everyday use of Sweave. See the package homepage for details and examples. See FAQ's for a list of frequently asked questions (including where to ask questions).


You can install the stable version on CRAN:


You can also install the development version from XRAN, which provides daily build of knitr:

# update all existing packages first
update.packages(ask = FALSE, repos = '')
install.packages('knitr', repos = c('', ''))

Note that if you want to build the source package via R CMD INSTALL without a previously installed version of knitr, you must either pre-install knitr from CRAN, or run R CMD INSTALL on this source repo, otherwise R CMD build will fail (which is probably a bug of base R).


While Sweave and related add-on packages like cacheSweave and pgfSweave are fairly good engines for literate programming in R, I often feel my hands are tied. For example:

  • I stared at the source code of Sweave and wished for hundreds of times, if only I could easily insert [width=.8\textwidth] between \includegraphics and {my-plot.pdf}. (The official way in Sweave is \setkeys{Gin} but it is setting a global width, which is unrealistic since we often have to set widths individually; yes, you can use \setkeys{Gin} for many times, but why not just provide an option for each chunk?)
  • I wished for many times, if only I could use graphics devices other than PDF and postscript; now the dream has come true in the official R, but what I was hoping for was an option as simple as dev = 'png' or dev = 'CairoJPEG'.
  • I wished multiple plots in a code chunk could be recorded instead of only the last one.
  • I wished there was a way to round the numbers in \Sexpr{} other than writing expressions like \Sexpr{round(x, 3)} for each single \Sexpr{}
  • I wished I did not have to print() plots from. ggplot2 and a simple qplot(x, y) would just give me a plot in Sweave.
  • I wished users would never need instructions on Sweave.sty or run into troubles due to the fact that LaTeX cannot find Sweave.sty.
  • I wished cacheSweave could print the results of a code chunk even if it was cached.
  • I wished brew could support graphics.
  • I wished R2HTML could support R code syntax highlighting.
  • ...

The book Dynamic Documents with R and knitr

The package knitr was designed to give the user access to every part of the process of dealing with a literate programming document, so there is no need to hack at any core components if you want more freedom. I have gone through the source code of pgfSweave and cacheSweave for a couple of times and I often feel uncomfortable with the large amount of code copied from official R, especially when R has a new version released (I will begin to worry if the add-on packages are still up-to-date with the official Sweave).



If options are not explicitly specified, knitr will try to guess reasonable default settings. A few manuals are available such as the main manual, and the graphics manual. For a more organized reference, see the knitr book.


This package is free and open source software, licensed under GPL.

Functions in knitr

Name Description
imgur_upload Upload an image to
fig_path Path for figure files
knit2pdf Convert Rnw or Rrst files to PDF
knit_params_yaml Extract knit parameters from YAML text
knit_patterns Patterns to match and extract R code in a document
engine_output An output wrapper for language engine output
dep_prev Make later chunks depend on previous chunks
knit2wp Knit an R Markdown document and post it to WordPress
image_uri Encode an image file to a data URI
opts_template Template for creating reusable chunk options
opts_knit Options for the knitr package
pandoc A Pandoc wrapper to convert documents to other formats
knit2html Convert markdown to HTML using knit() and markdownToHTML()
knit_child Knit a child document
include_graphics Embed external images in knitr documents
knit2pandoc Convert various input files to various output files using knit() and Pandoc
knit_params Extract knit parameters from a document
knit_meta Metadata about objects to be printed
include_url Embed a URL as an HTML iframe or a screenshot in knitr documents
knit_code The code manager to manage code in all chunks
knit_expand A simple macro preprocessor for templating purposes
cache_engines Cache engines of other languages
inline_expr Wrap code using the inline R expression syntax
kable Create tables in LaTeX, HTML, Markdown and reStructuredText
hook_ffmpeg_html Hooks to create animations in HTML output
hook_movecode Some potentially useful document hooks
hook_pdfcrop Built-in chunk hooks to extend knitr
knitr-package A general-purpose tool for dynamic report generation in R
knit_print A custom printing function
plot_crop Crop a plot (remove the edges) using PDFCrop or ImageMagick
knit_filter Spell check filter for source documents
knit_rd Knit package documentation
rand_seed An unevaluated expression to return .Random.seed if exists
knit Knit a document
set_alias Set aliases for chunk options
set_header Set the header information
pat_rnw Set regular expressions to read input documents
is_latex_output Check if the current output type is LaTeX or HTML
spin_child Spin a child R script
load_cache Load the cache database of a code chunk
render_html Set or get output hooks for different output formats
set_parent Specify the parent document of child documents
spin Spin goat's hair into wool
write_bib Generate BibTeX bibliography databases for R packages
stitch Automatically create a report based on an R script and a template
knit_engines Engines of other languages
knit_exit Exit knitting early
knit_global The global environment in which code chunks are evaluated
knit_hooks Hooks for R code chunks, inline R code and output
knit_watch Watch an input file continuously and knit it when it is updated
raw_block Mark character strings as raw blocks in R Markdown
knit_theme Syntax highlighting themes
opts_chunk Default and current chunk options
vignette_engines Package vignette engines
wrap_rmd Wrap long lines in Rmd files
extract_raw_output Mark character strings as raw output that should not be converted
read_rforge Read source code from R-Forge
read_chunk Read chunks from an external script
opts_hooks Hooks for code chunk options
rocco Knit R Markdown using the classic Docco style
rst2pdf A wrapper for rst2pdf
Sweave2knitr Convert Sweave to knitr documents
clean_cache Clean cache files that are probably no longer needed
all_labels Get all chunk labels in a document
current_input Query the current input filename
combine_words Combine multiple words into a single string
hook_plot_html Default plot hooks for different output formats
fig_chunk Obtain the figure filenames for a chunk
dep_auto Build automatic dependencies among chunks
all_patterns All built-in patterns
asis_output Mark an R object with a special class
No Results!

Vignettes of knitr

No Results!

Last month downloads


Type Package
License GPL
Encoding UTF-8
VignetteBuilder knitr
SystemRequirements Package vignettes based on R Markdown v2 or reStructuredText require Pandoc ( The function rst2pdf() require rst2pdf (
Collate 'block.R' 'cache.R' 'utils.R' 'citation.R' 'hooks-html.R' 'plot.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'
RoxygenNote 7.1.1
NeedsCompilation no
Packaged 2020-09-22 05:11:07 UTC; yihui
Repository CRAN
Date/Publication 2020-09-22 16:30:03 UTC
suggests codetools , DBI (>= 0.4-1) , digest , formatR , gifski , htmlwidgets (>= 0.7) , httr , jpeg , JuliaCall (>= 0.11.1) , magick , png , ragg , reticulate (>= 1.4) , rgl (>= 0.95.1201) , rmarkdown , sass , showtext , styler (>= 1.2.0) , testit , tibble , tikzDevice (>= 0.10) , tinytex , webshot , xml2 (>= 1.2.0)
imports evaluate (>= 0.10) , highr , markdown , methods , stringr (>= 0.6) , tools , xfun (>= 0.15) , yaml (>= 2.1.19)
depends R (>= 3.2.3)
Contributors Andre Simon, Noam Ross, Thomas Leeper, E, Aaron Wolen, Aron Atkins, Romain Francois, Duncan Murdoch, Michael Friendly, Jim Hester, Hadley Wickham, James Manton, Henrik Bengtsson, Weicheng Zhu, JJ Allaire, Michal Bojanowski, Brian Diggs, Wush Wu, Marius Hofert, Taiyun Wei, John Muschelli, Trevor Davis, Johannes Ranke, Heewon Jeon, Joseph Larmarange, Richard Cotton, Ian Lyttle, Kaiyin Zhong, Qiang Li, Kohske Takahashi, Jared Lander, Joe Cheng, Kevin Smith, Kirill Mueller, David Robinson, Ramnath Vaidyanathan, Adam Vogt, Alastair Andrew, Alex Zvoleff, Ashley Manton, Cassio Pereira, Fabian Hirschmann, Fitch Simeon, Gregoire Detrez, Jake Burkhead, Jeff Arnold, Jeremy Ashkenas, Jeremy Stephens, John Honaker, Jonathan Keane, Johan Toloe, Julien Barnier, Michel Kuhlmann, Nacho Caballero, Nick Salkowski, Scott Kostyshak, Sietse Brouwer, Thibaut Assus, Thibaut Lamadon, Tom Torsney-Weir, Viktoras Veitas, Simon Bernard, Ben Baumer, Doug Hemken, Hiroaki Yutani, Jason Punyon, Robert Krzyzanowski, Sebastian Meyer, Zachary Foster, Kamil Slowikowski, Jenny Bryan, Hao Zhu, Karl Forner, Jonathan Sidi, David Hugh-Jones, Forest Fang, Hodges Daniel, Javier Luraschi, Sylvain Rousseau, Michael Chirico, Garrick Aden-Buie, Christophe Dervieux, Elio Campitelli, Ruaridh Williamson, Martin Modr<c3><a1>k, Obada Mahdi, Brian Zhang, Lorenz Walthert, Lucas Gallindo, Tim Mastny, Emily Riederer, Ellis Hughes , Atsushi Yasumoto, Miller Patrick, Niels Richard Hansen

Include our badge in your README