Overview

The htmlwidgets package provides a framework for creating R bindings to JavaScript libraries. HTML Widgets can be:

By following a small set of easy-to-follow conventions, it is possible to create HTML widgets with very little code. All widgets include the following components:

  1. Dependencies. These are the JavaScript and CSS assets used by the widget (e.g. the library you are creating a wrapper for).

  2. R binding. This is the function that end users will call to provide input data to the widget as well as specify various options for how the widget should render. This also includes some short boilerplate functions required to use the widget within Shiny applications.

  3. JavaScript binding. This is the JavaScript code that glues everything together, passing the data and options gathered in the R binding to the underlying JavaScript library.

HTML widgets are always hosted within an R package and should include all of the source code for their dependencies. This is to ensure that code which depends on widgets is fully reproducible (i.e. doesn’t require an internet connection or the ongoing availability of an internet service to run).

Example (sigma.js)

To start with we’ll walk through the creation of a simple widget that wraps the sigma.js graph visualization library. When we’re done we’ll be able to use it to display interactive visualizations of GEXF (Graph Exchange XML Format) data files. For example:

library(sigma)
data <- system.file("examples/ediaspora.gexf.xml", package = "sigma")
sigma(data)

MȌ wn3R1D5VۦIiYx5YBm/RTFb+E@Al/pcez+I1w+E%L óbt@nR{a+IS NyF0Wo0Lr5Bړ;E#EYl–{/D |6A9LG0s+AvJa E*R/Fแ]~ IpgqQKt ETpwABkL3MCib5I+Oc/Efb/IZ4D濺L5KO}bcqvgef 8Tv'x[0ONɒce+D0ńr pX~1TctyN2Hŷjg)Hĸr2}c9E7ZUD mG3J_~c8X"sU&K5h+E2T M` LEAs2H[1DM3K5T (A S1N>Cmb-/BK9YLcZ064YyY2BmV3I2HJ0g09atj0r%+F|cef/Z Wf/G2E1&uq+ZmUiqWc5H3Yj+d3C!HIh9D+ReYy+X9r3VuaTNR0Z5MZ+CWH2z8FT3L47E8R3Dɂ;XmX8Yg02XON\YMf9N9Q2ZBlLGYs/E|/Wv+T4W4YbI GSxNDAHW+Oh0BsG2Eh/ MzAfle$ZJzZUZkC1D6rCJgILj+dT2Wzdr ctyNoaWxkjg)Hĸr2}c9E7ZUD mG3J_~c8X"sU&K5h+E2T M` LEAs2H[1DM3K5T (A S1N>Cmb-/BK9YLcZ064YyY2BmV3I2HJ0g09atj0r%+F|cef/Z Wf/G2E1&uq+ZmUiqWc5H3Yj+d3C!HIh9D+ReYy+X9r3VuaTNR0Z5MZ+CWH2z8FT3L47E8R3Dɂ;XmX8Yg02XON\YMf9N9Q2ZBlLGYs/E|/Wv+T4W4YbI GSxNDAHW+Oh0BsG2Eh/ MzAfle$ZJzZUZkC1D6rCJgILj+dT2Wzdr ctyNoaWxkjg)Hĸr2}c9E7ZUD mG3J_~c8X"sU&K5h+E2T M` LEAs2H[1DM3K5T (A S1N>C~c8DYB4%4ZrTTctbCbI 5Gc2V|ceTTrCN\8FTCJgIYW3DYXJzZWBB~ n+9A+Bc5HEToV//R2dTVBhcnFv8l|Z1E|uA;ZZ$p/V+7ժa/igk29ө +=A7w5וFX_CP1E1&OGdJx5yKWO҆GC5htrCDZ5mfnVB0ucGFyc2VYTUw9ZnVuY3*R/FC5q3DYXPHBBa+WmaC9IvH0+IRtHRZ`3M4~chQ8X15K}H9Z=T8VfB9XP= jJvxgct5IX\ /HdZtN_8WJT,Catj0r52SȓQae/jYzITlt1hQOAiL 7CH/OEEW=Da5O0HO1O2MchQ83R2LGMpJS8KaLxNTMuA7dddL9qgCY"GRZ`3M4~chQ8X15K}H9Z=T8VfB9XP= jJvxgct5IX\ /HdZtN_8WJT,Catj0r52SȓQae/jYzITlt1hQOAiL 7CH/OEEW=Da5O0HO1O2MchQ83R2L4Ybt9JSpd C2ue\29E12G GM9D zCzF0jJ*Zgct5IX\ /HdZtN_8WJT,Catj0r52SȓQae/jYzITlt1hQOAiL 7CH/OEEW=Da5O0HO1O2MchQ83R2L4Ybt9JSpd C2ue\29E12G GM9D zCzF0jJ*Zgct5IX\ /HdZtN_8WJT,Catj0r52SȓQae/jYzITlt1hQOAiL 7Cm 702Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02Zle02TO/OR_KCJJbnZhqtS@.R@2ZvHgCSP0HLY|ȓM8YRp+^Y2V2pO2qI;NUGFmuaFM|/Zleđ`7Gm6NjQʎ*G1/T%2F1bWVCbYTUw9j%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUogZhqtS8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeiKw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh02ZXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh02ZXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh02ZXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh02ZXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh02ZXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh02ZXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%74H2YWTZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gUHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EjEh87K8758Dtb/+yU2A1LDwBRGUVVLLbH=oB޷iH T7GwozH141Z2FloBP{eT/+y