Learn R Programming

surveydown

[!NOTE] Visit our main site at surveydown.org for the complete documentation and more information about surveydown.

Intro Video

What is surveydown?

surveydown is an open-source, markdown-based platform for programmable and reproducible Surveys using R, Quarto, Shiny, and PostgreSQL databases like Supabase.

Here’s how it works:

  1. Design your survey as a Quarto document using markdown and R code.
  2. Render your survey into a shiny app that can be hosted online and sent to respondents.
  3. Store survey responses in a PostgreSQL database - we recommend Supabase as a free, secure, and easy to use option.

The {surveydown} R package provides functions to bring this all together.

See the complete documentation to get started making your own surveydown survey!

Why surveydown?

Most survey platforms (e.g., Google forms, Qualtrics, etc.) use graphic interfaces or spreadsheets to define survey content, making version control, collaboration, and reproducibility difficult or impossible. The surveydown package was designed to address these problems. As an open-source, markdown-based platform, all survey content is defined using plain text (markdown and R code) in two files:

  • survey.qmd: A Quarto document that contains the survey content (pages, questions, etc).
  • app.R: An R script defining a shiny app that contains global settings (libraries, database configuration, etc.) and server configuration options (e.g., conditional skipping / display, etc.).

This approach makes your survey easy to reproduce, share, and version control with common tools like Git. And since all survey data is stored in a PostgreSQL database, you have total control over where your survey data lives. We provide direct support for Supabase as a free, secure, and easy to use option.

In case you’re interested in the background behind the project, this blog post provides something of an origin story. Note that the design discussed in the post is now quite outdated with what ultimately became surveydown.

Installation

Install R & Quarto

You need both:

We also recommend working with an IDE that has good support for R, Quarto, and Shiny.

RStudio is great, and we also like VSCode and Positron.

Install the {surveydown} R package

You can install {surveydown} from CRAN in your R console:

install.packages("surveydown")

or you can install the development version from GitHub:

# install.packages("pak")
pak::pak('surveydown-dev/surveydown')

Load the package with:

library(surveydown)

You can also check which version you have installed:

surveydown::sd_version()

Roadmap

See our todo repo for a running list of things we’re working on / have already added to the project.

License

See the License.

Publication

An associated paper in PLOS One about this package is available at https://doi.org/10.1371/journal.pone.0331002

Citation

If you use this package in a publication, please cite the PLOS One article associated with it! You can get the citation by typing citation("surveydown") into R:

citation("surveydown")
#> To cite surveydown in publications use:
#> 
#>   Hu P, Bunea B, Helveston J (2025). "surveydown: An open-source,
#>   markdown-based platform for programmable and reproducible surveys."
#>   _PLOS One_, *20*(8). doi:10.1371/journal.pone.0331002
#>   <https://doi.org/10.1371/journal.pone.0331002>.
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Article{,
#>     title = {surveydown: An open-source, markdown-based platform for programmable and reproducible surveys},
#>     author = {Pingfan Hu and Bogdan Bunea and John Paul Helveston},
#>     journal = {PLOS One},
#>     year = {2025},
#>     volume = {20},
#>     number = {8},
#>     doi = {10.1371/journal.pone.0331002},
#>   }

Funding

This project was partially supported by a grant from the Alfred P. Sloan Foundation, Grant Number G-2023-20976 awarded to PI John Paul Helveston.

Copy Link

Version

Install

install.packages('surveydown')

Monthly Downloads

351

Version

1.0.1

License

MIT + file LICENSE

Maintainer

John Helveston

Last Published

December 19th, 2025

Functions in surveydown (1.0.1)

sd_question_gadget

Show a Shiny gadget for selecting a question type
sd_output

Output Function for Displaying reactive objects and values
sd_setup

Required Set Up Function
sd_skip_forward

Define forward skip conditions for survey pages (Deprecated)
sd_server

Server logic for a surveydown survey
sd_reactive

Create a reactive value that is also stored in survey data
sd_skip_if

Define skip conditions for survey pages
sd_redirect

Create a Redirect Element for 'shiny' Applications
sd_set_password

Set password for surveydown survey
sd_page_gadget

Show a Shiny gadget for entering a page ID
sd_question

Create a survey question
sd_version

Check Surveydown Version
sd_ui

Create the UI for a surveydown survey
sd_store_value

Store a value in the survey data
sd_display_question

Create a placeholder for a reactive survey question
sd_stop_if

Define stop conditions for survey questions
sd_db_connect

Connect to database
sd_show_if

Define show conditions for survey questions and pages
sd_db_config

Configure database settings
sd_create_messages

Create a messages template file
sd_add_question

Add a Question Template to the Current Document
sd_close

Create a 'Close' Button to Exit the Survey
sd_copy_value

Create a copy of a value
sd_add_page

Add a Page Template to the Current Document
sd_database

Connect to a 'PostgreSQL' Database with Automatic Cleanup
sd_completion_code

Generate a Random Completion Code
sd_dashboard

Depreciated Survey Dashboard
sd_create_survey

Create a new survey template
sd_display_value

Display the value of a survey question
sd_next

Create a 'Next' Button for Page Navigation
sd_get_data

Fetch data from a database table with automatic reactivity detection
sd_is_answered

Check if a question is answered
sd_nav

Create Navigation Buttons for Survey Pages
sd_question_custom

Create a Custom Question with a Shiny Widget
sd_get_url_pars

Get URL Parameters in a 'shiny' Application
sd_include_folder

Include a folder to the 'shiny' resource path