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.13
verbose argument to
interval argument of
server_config() can be set via the global option
servr.interval now. For example,
options(servr.interval = 0.5).
Server functions such as
httd() now return the config object created by
server_config() instead of the server handle returned by
httpuv::startServer(). The config object contains various information about the server and methods to start/stop the server.
CHANGES IN servr VERSION 0.12
random_port()to return an available random TCP port.
daemon_list() returns server IDs instead of handles, so that it will work
with httpuv >= v18.104.22.168 (rstudio/blogdown#365).
CHANGES IN servr VERSION 0.11
The default value of the
port argument of
server_config() can be set via
the environment variable
R_SERVR_PORT. If the environment variable does not
exist, the global option
servr.port will be used if set, e.g.,
options(servr.port = 4322). See
?servr::server_config for details.
CHANGES IN servr VERSION 0.10
browse_last()to reopen the last browsed page.
daemon argument in
server_config() now defaults to
interactive(), i.e., servr starts a daemonized server that does not block your interactive R session by default.
CHANGES IN servr VERSION 0.9
The web browser may be opened too early (before the server is ready) (originally reported at rstudio/rstudio#2475).
CHANGES IN servr VERSION 0.8
added another implementation of the daemoinzed server based on the later package, since the previous implmentation based on
httpuv::startDaemonizedServer() could crash the R session on Windows
CHANGES IN servr VERSION 0.7
added a new argument
exported the function
files/directories that contain multibyte characters in path names cannot be served correctly (thanks, Hao Peng)
CHANGES IN servr VERSION 0.6
on 404 (page not found), 404.html will be displayed if it exists under the root directory
improved the support for HTTP Range requests, e.g. servr can correctly serve MP4 videos now in major browsers including Safari
servr should decode requested paths before reading them (https://github.com/rstudio/blogdown/issues/85)
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