Skip to content
Editable DataTables for shiny apps
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
R Added datatable.options parameter as a pass through. Feb 5, 2019
inst Fixed an issue with delete callback. Dec 6, 2018
man Added datatable.options parameter as a pass through. Feb 5, 2019
.Rbuildignore Initial version. Feb 3, 2018
.gitignore Initial version. Feb 3, 2018
DESCRIPTION Added datatable.options parameter as a pass through. Feb 5, 2019
NAMESPACE Documentation updates. Feb 3, 2018 Add syntax highlighting to code chunks Nov 28, 2018

Editable DataTables for shiny apps.

Author: Jason Bryer, Ph.D. Email:

Use the devtools package to install the development version of DTedit:


The dtedit_demo will run a sample shiny app with to editable data tables.


DTedit Screen Shot

Getting Started with DTedit

You can download a simple shiny app using DTedit here: inst/template/app.R

There are three steps to using DTedit in your shiny application.

  1. Define callback function for inserting, updating, and deleting data.
my.insert.callback <- function(data, row) {
	mydata <- rbind(data, mydata)

my.update.callback <- function(data, olddata, row) {
	mydata[row,] <- data[1,]

my.delete.callback <- function(data, row) {
	mydata[row,] <- NULL

Typically these functions would interact with a database. As written here, the data would be lost between shiny sessions.

  1. Create the dtedit object within your server function.
DTedit::dtedit(input, output,
	   name = 'mycontacts',
	   thedata = mydata,
	   edit.cols = c('name', 'email', 'useR', 'notes'),
	   edit.label.cols = c('Name', 'Email Address', 'Are they an R user?', 'Additional notes'),
	   input.types = c(notes='textAreaInput'),
	   view.cols = c('name', 'email', 'useR'),
	   callback.update = my.update.callback,
	   callback.insert = my.insert.callback,
	   callback.delete = my.delete.callback)

The input and output are passed from the server function. The name parameter will define the name of the object available to the uiOutput. The thedata is a data.frame for the initial view of the data table. This can be an empty (i.e. no rows) data.frame. The structure of the data.frame will define the inputs (e.g. factors will be drop down, Date will use dateInput, numerics will use numericInput, etc.). There are many other parameters to custom the behavior of dtedit, see ?dtedit for the full list.

  1. Use uiOutput in your UI to display the editable data table.

The name you will pass to uiOutput is the name you passed to the dtedit created on the server side.

You can’t perform that action at this time.