Start an HTTP server in R to serve static files, or dynamic documents that can be converted to HTML files (e.g., R Markdown) under a given directory.
A simple HTTP server to serve files under a given directory based on the httpuv package.
install.packages('servr') # stable version; use a CRAN mirror, orinstall.packages('servr', repos = '') # devel version
This package is licensed under GPL.
To some degree, this package is like
python -m SimpleHTTPServer or
python -m http.server. It may be used to serve:
You can either run
servr::httd() in an interactive R session, or run from
# default: port 4321, do not launch browserRscript -e 'servr::httd()'# open a web browserRscript -e 'servr::httd()' -b# listen on port 4000Rscript -e 'servr::httd()' -p4000# pass arguments to the httd() functionRscript -e 'servr::httd(,4000,TRUE)'
There is also a shell script under
system.file('bin', package = 'servr');
if it is added to
PATH, you can simply run
servr # serve the current directoryservr -b # launch the browserservr -b -p4000 # change port to 4000
httd(), the function
httw() can both serve and watch a directory.
If you are viewing an HTML file in the browser, it will be automatically
refreshed whenever there are any changes in the directory (e.g. you added,
deleted, or modified certain files in the directory).
httd(), there are functions
this package to serve HTML files generated from R Markdown documents (via
rmarkdown). R Markdown documents can be
automatically re-compiled when their HTML output files are older than the
corresponding source files, and HTML pages in the web browser can be
automatically refreshed accordingly, so you can focus on writing R Markdown
documents, and results will be updated on the fly in the web browser. This is
even more useful when you write R Markdown documents in the RStudio IDE, because
the HTML files are displayed in the RStudio viewer pane, and you can put the
source document and its output side by side.
vign() can be used to serve R Markdown/HTML package vignettes.
The HTML output files are generated and displayed in the web browser so you can
preview the vignettes, and they will be cleaned up after they are loaded in the
web browser to make sure your source package is clean.
All server functions can be used in the daemonized mode, i.e., they can be
non-blocking in the R session, which allows you to continue working in the R
console after the server is launched. This mode can be set via the argument
daemon = TRUE in most server functions. See
?server_config for more
CHANGES IN servr VERSION 0.5
added an argument
server_config() so you can open a specific
path initially in the web browser
daemon argument of
server_config() takes the default value from the
getOption('servr.daemon') now, e.g., you can set
options(servr.daemon = TRUE) so that the daemonized server is always used
CHANGES IN servr VERSION 0.4.1
fixed a bug in 301 redirection when serving a directory without the trailing slash
CHANGES IN servr VERSION 0.4
you can disable websocket listening on an HTML page using a special HTML
<!-- DISABLE-SERVR-WEBSOCKET --> when servr is serving and watching
a directory, so that this page will not communicate with R (e.g. when it is
updated, R will not send signals to refresh it) (thanks @hafen, #25)
a random TCP port will be used if the port 4321 is not available
CHANGES IN servr VERSION 0.3
added a function
httw() to watch for changes under a directory and refresh
an HTML page automatically (if it is being viewed in the browser) when any
files are modified
servr accepts HTTP Range requests now (thanks, @rekado, #21)
servr did not work with RStudio Server (#20)
CHANGES IN servr VERSION 0.2
when running inside RStudio, the RStudio web browser will be used if available (requires RStudio >= 0.98.439)
added three server functions jekyll(), rmdv1(), and rmdv2() to serve Jekyll websites, R Markdown v1, and R Markdown v2 documents, respectively
added a server function vign() to serve R Markdown/HTML package vignettes
added a server function make() to serve a directory and update files automatically via Makefile (#2)
the URL pathname foo will be redirected to foo/ automatically if foo is a directory (#5)
in case of errors when serving dynamic documents, the server functions will double the delay to check for updates and wait for the next build until the error is cleared (like Gmail)
CHANGES IN servr VERSION 0.1