diff --git a/R/revealjs.R b/R/revealjs.R
new file mode 100644
index 0000000..287bfb4
--- /dev/null
+++ b/R/revealjs.R
@@ -0,0 +1,4 @@
+
+
+#' @import rmarkdown
+NULL
diff --git a/R/revealjs_presentation.R b/R/revealjs_presentation.R
new file mode 100644
index 0000000..61cda17
--- /dev/null
+++ b/R/revealjs_presentation.R
@@ -0,0 +1,203 @@
+#' Convert to a reveal.js presentation
+#'
+#' Format for converting from R Markdown to a reveal.js presentation.
+#'
+#' @inheritParams rmarkdown::beamer_presentation
+#' @inheritParams rmarkdown::pdf_document
+#' @inheritParams rmarkdown::html_document
+#'
+#' @param center \code{TRUE} to vertically center content on slides
+#' @param theme Visual theme ("default", "simple", sky", "beige", "serif", or
+#'   "solarized").
+#' @param transition Slide transition ("default", "cube", "page", "concave",
+#'   "zoom", "linear", "fade", or "none")
+#' @param template Pandoc template to use for rendering. Pass "default"
+#'   to use the rmarkdown package default template; pass \code{NULL}
+#'   to use pandoc's built-in template; pass a path to use a custom template
+#'   that you've created. Note that if you don't use the "default" template
+#'   then some features of \code{revealjs_presentation} won't be available
+#'   (see the Templates section below for more details).
+#'
+#' @return R Markdown output format to pass to \code{\link{render}}
+#'
+#' @details
+#'
+#' In reveal.js presentations you can use level 1 or level 2 headers for
+#' slides. If you use a mix of level 1 and level 2 headers then a
+#' two-dimensional layout will be produced, with level 1 headers building
+#' horizontally and level 2 headers building vertically.
+#'
+#' For more information on markdown syntax for presentations see
+#' \href{http://johnmacfarlane.net/pandoc/demo/example9/producing-slide-shows-with-pandoc.html}{producing
+#' slide shows with pandoc}.
+#'
+#' @section Templates:
+#'
+#' You can provide a custom HTML template to be used for rendering. The syntax
+#' for templates is described in the documentation on
+#' \href{http://johnmacfarlane.net/pandoc/demo/example9/templates.html}{pandoc
+#' templates}. You can also use the basic pandoc template by passing
+#' \code{template = NULL}.
+#'
+#' Note however that if you choose not to use the "default" reveal.js template
+#' then several aspects of reveal.js presentation rendering will behave
+#' differently:
+#'
+#' \itemize{
+#'   \item{The \code{center} parameter does not work (you'd need to
+#'      set this directly in the template).
+#'   }
+#'   \item{The built-in template includes some additional tweaks to styles
+#'      to optimize for output from R, these won't be present.
+#'   }
+#'   \item{MathJax will not work if \code{self_contained} is \code{TRUE}
+#'      (these two options can't be used together in normal pandoc templates).
+#'   }
+#' }
+#'
+#' @examples
+#' \dontrun{
+#'
+#' library(rmarkdown)
+#' library(revealjs)
+#'
+#' # simple invocation
+#' render("pres.Rmd", revealjs_presentation())
+#'
+#' # specify an option for incremental rendering
+#' render("pres.Rmd", revealjs_presentation(incremental = TRUE))
+#' }
+#'
+#'
+#' @export
+revealjs_presentation <- function(incremental = FALSE,
+                                  center = FALSE,
+                                  fig_width = 8,
+                                  fig_height = 6,
+                                  fig_retina = if (!fig_caption) 2,
+                                  fig_caption = FALSE,
+                                  smart = TRUE,
+                                  self_contained = TRUE,
+                                  theme = "default",
+                                  transition = "default",
+                                  highlight = "default",
+                                  mathjax = "default",
+                                  template = "default",
+                                  includes = NULL,
+                                  keep_md = FALSE,
+                                  lib_dir = NULL,
+                                  pandoc_args = NULL,
+                                  ...) {
+  
+  # function to lookup reveal resource
+  reveal_resources <- function() {
+    system.file("rmarkdown/templates/revealjs_presentation",
+                package = "revealjs")
+  }
+  
+  # base pandoc options for all reveal.js output
+  args <- c()
+  
+  # template path and assets
+  if (identical(template, "default"))
+    args <- c(args, "--template",
+              pandoc_path_arg(file.path(reveal_resources(), "default.html")))
+  else if (!is.null(template))
+    args <- c(args, "--template", pandoc_path_arg(template))
+  
+  # incremental
+  if (incremental)
+    args <- c(args, "--incremental")
+  
+  # centering
+  if (center)
+    args <- c(args, "--variable", "center")
+  
+  # theme
+  theme <- match.arg(theme, revealjs_themes())
+  if (identical(theme, "default"))
+    theme <- "simple"
+  else if (identical(theme, "dark"))
+    theme <- "default"
+  if (theme %in% c("default", "blood", "moon", "night"))
+    args <- c(args, "--variable", "theme-dark")
+  args <- c(args, "--variable", paste("theme=", theme, sep=""))
+  
+  
+  # transition
+  transition <- match.arg(transition, revealjs_transitions())
+  args <- c(args, "--variable", paste("transition=", transition, sep=""))
+  
+  # content includes
+  args <- c(args, includes_to_pandoc_args(includes))
+  
+  # pre-processor for arguments that may depend on the name of the
+  # the input file (e.g. ones that need to copy supporting files)
+  pre_processor <- function(metadata, input_file, runtime, knit_meta, files_dir,
+                            output_dir) {
+    
+    # use files_dir as lib_dir if not explicitly specified
+    if (is.null(lib_dir))
+      lib_dir <- files_dir
+    
+    # extra args
+    args <- c()
+    
+    # reveal.js
+    revealjs_path <- reveal_resources()
+    if (!self_contained || identical(.Platform$OS.type, "windows"))
+      revealjs_path <- relative_to(
+        output_dir, render_supporting_files(revealjs_path, lib_dir))
+    args <- c(args, "--variable", paste("revealjs-url=",
+                                        pandoc_path_arg(revealjs_path), sep=""))
+    
+    # highlight
+    args <- c(args, pandoc_highlight_args(highlight, default = "pygments"))
+    
+    # return additional args
+    args
+  }
+  
+  # return format
+  output_format(
+    knitr = knitr_options_html(fig_width, fig_height, fig_retina, keep_md),
+    pandoc = pandoc_options(to = "revealjs",
+                            from = rmarkdown_format(ifelse(fig_caption, 
+                                                           "", 
+                                                           "-implicit_figures")),
+                            args = args),
+    keep_md = keep_md,
+    clean_supporting = self_contained,
+    pre_processor = pre_processor,
+    base_format = html_document_base(smart = smart, lib_dir = lib_dir,
+                                     self_contained = self_contained,
+                                     mathjax = mathjax,
+                                     pandoc_args = pandoc_args, ...))
+}
+
+revealjs_themes <- function() {
+  c("default",
+    "simple",
+    "sky",
+    "beige",
+    "serif",
+    "solarized",
+    "dark",
+    "blood",
+    "moon",
+    "night")
+}
+
+
+revealjs_transitions <- function() {
+  c("default",
+    "cube",
+    "page",
+    "concave",
+    "zoom",
+    "linear",
+    "fade",
+    "none")
+}
+
+
