A series of shiny modules to help shiny sense the world around it.

It’s called shinysense because shinyinputs seemed kinda lame.

Senses present:

Currently the package supports the following ‘senses’.


  • drawr & shinydrawr: Draws a line chart that obscures the end of the results, the user then draws what they think the rest of the chart is and then the rest of the chart is revealed.
  • shinyswipr: Embeds a card that can be swiped in different directions, the swipe direction is returned to shiny.


  • shinyviewr: Record images from a webcam or any other camera connected to browser viewing app.


  • shinylistenr: Records audio on a button press and returns the fast-fourier transformed signal to the server.


  • shinymovr: Capture and return accelerometer data from your phone or tablet.

Testing it out

Every sense included in the package has a demo app. To run the demo app you can run the included function run_demo() and pass it the name of the function you want to see.



This will run a basic demo application that includes the code behind the app. Giving you a jumping off point for including the function in your app!

Available demos include

  • 'shinydrawr'
  • 'shinyviewr'
  • 'shinyswipr'
  • 'shinymovr'
  • 'shinylistenr'
  • 'draw_your_dist': A demo app using shinydrawr to fit a beta distribution to a drawn line.

How do I use it?

shinysense is not currently on CRAN. To install it use the devtools github function.


Once the app is installed just included it in your shiny app the way you usually would:

Naming Scheme

The names of the functions follow a few general rules.

  • The shiny-based functions are all prefixed with shiny. E.g. shinyswipr, shinydrawr

  • Of those shiny-based functions there are two functions per sense, the server function (just plain name), and the UI function, which has _UI appended to the end.

Note that if you used shinysense in earlier versions, this naming scheme was inconsistant, I sincerely appologize for any frustration this may cause!

  • For functions that work outside of shiny there is no shiny prefix.
    • Currently this only includes drawr which allows you to embed a you-draw-it chart in a static report, and run_demo which starts up the demo apps for the various senses.

Browser security

Recently browsers have been making large steps to protect user’s data. This is great, however, it means that it can sometimes be tricky to get these applications working. Almost everything will require a secure connection to work. Secure connection generally means two things: one the website address includes https:// at the front, meaning that all data passed between the browser and server is encrypted, or the app is being run locally and acessed with localhost.

The easiest way to experiment with these functions is to run a local rstudio instance on your laptop or desktop and then run the shiny app in the browser. When hosting an app for public consumption make sure you have an ssl encrypted server (I.e. https).

A workaround for using Rstudio Server on a remote server that is not secured with https is to do port forwarding with the ssh command. E.g. ssh -L me@my_servers_address. This will allow you to use localhost for your apps.

Nothing works, what do I do?

The probability of there being bugs in these functions is unfortunately high. If you’ve found one I would be delighted if you could file a new issue here. I’ll try my best to at least respond.