---
title: "Backends"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Backends}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5,
warning = FALSE,
message = FALSE
)
```
dashboardr supports four chart rendering backends. The default is **highcharter**. You can switch to **plotly**, **echarts4r**, or **ggiraph** at the collection or dashboard level (e.g. with `backend = "echarts4r"`).
## Backend overview
| Backend (`backend=`) | R package (CRAN link) | Licensing considerations | Approx. coverage in dashboardr |
|----------------------|------------------------|--------------------------|-------------------|
| `"highcharter"` | [highcharter](https://cran.r-project.org/package=highcharter) | **Free for academia/non-profit, paid for commercial use.** Highcharts JS requires a separate license for commercial or government projects. | **Full** |
| `"plotly"` | [plotly](https://cran.r-project.org/package=plotly) | **Free (MIT).** Fully open source for both personal and commercial applications without fees. | **Well covered** |
| `"echarts4r"` | [echarts4r](https://cran.r-project.org/package=echarts4r) | **Free (Apache 2.0).** Open source and safe for commercial products with no licensing costs. | **Decent coverage** |
| `"ggiraph"` | [ggiraph](https://cran.r-project.org/package=ggiraph) | **Free (GPL-3).** Standard open-source license that allows commercial use. | **Low** |
### Licensing & Usage Warnings
* **Highcharter:** While the R wrapper is MIT licensed, the underlying **Highcharts JavaScript library** is a commercial product. If your dashboard is for a for-profit company or a government entity, you must purchase a license. It is free only for personal, non-commercial, or school-related projects.
* **Plotly & Echarts4r:** These are the preferred enterprise-safe options when there is no budget for per-developer or per-site licenses. Their underlying libraries (Plotly.js and Apache ECharts) are permissive and free for commercial use.
* **Distribution:** If you are distributing your dashboard as a standalone product, check the **GPL-3** requirements for `ggiraph`. This license requires that any derivative works also be made open source under the same terms.
---
**Data Setup** (click to expand)
```{r setup, message=FALSE, warning=FALSE}
library(dashboardr)
library(dplyr)
library(gssr)
library(haven)
data(gss_all)
gss <- gss_all %>%
select(year, age, sex, race, degree, happy) %>%
filter(year == max(year, na.rm = TRUE)) %>%
filter(
happy %in% 1:3,
!is.na(age), !is.na(sex), !is.na(race), !is.na(degree)
) %>%
mutate(
happy = droplevels(as_factor(happy)),
degree = droplevels(as_factor(degree)),
sex = droplevels(as_factor(sex)),
race = droplevels(as_factor(race))
)
```
```{r, include = FALSE}
library(dashboardr)
```
## Supported Backends
| Backend | Package | Notes |
|---------|---------|-------|
| `"highcharter"` | highcharter | Default. Cross-tab filtering support. |
| `"plotly"` | plotly | Plotly.js with zoom, pan, hover. |
| `"echarts4r"` | echarts4r | Apache ECharts with animations. |
| `"ggiraph"` | ggiraph + ggplot2 | Interactive ggplot2 with tooltips. |
Only highcharter is a hard dependency. The others are optional (`Suggests`):
```{r, eval = FALSE}
install.packages("plotly")
install.packages("echarts4r")
install.packages(c("ggiraph", "ggplot2"))
```
## Default: Highcharter
When no `backend` is specified, highcharter is used:
```{r}
create_content(data = gss, type = "bar") %>%
add_viz(x_var = "degree", title = "Education (Highcharter)") %>%
preview()
```
## Switching Backends
Set `backend` on individual `add_viz()` calls:
### Plotly
```{r, eval = requireNamespace("plotly", quietly = TRUE)}
create_content(data = gss, type = "bar") %>%
add_viz(x_var = "degree", title = "Education (Plotly)", backend = "plotly") %>%
preview()
```
### ECharts
```{r, eval = requireNamespace("echarts4r", quietly = TRUE)}
create_content(data = gss, type = "bar") %>%
add_viz(x_var = "degree", title = "Education (ECharts)", backend = "echarts4r") %>%
preview()
```
### ggiraph
```{r, eval = requireNamespace("ggiraph", quietly = TRUE)}
create_content(data = gss, type = "bar") %>%
add_viz(x_var = "degree", title = "Education (ggiraph)", backend = "ggiraph") %>%
preview()
```
## Collection-Wide Backend
Set `backend` in `create_content()` so all `add_viz()` calls inherit it:
```{r, eval = requireNamespace("plotly", quietly = TRUE)}
create_content(data = gss, type = "bar", backend = "plotly") %>%
add_viz(x_var = "degree", title = "Education") %>%
add_viz(x_var = "race", title = "Race") %>%
preview()
```
## Dashboard-Wide Backend
Set `backend` in `create_dashboard()` for the entire project. Individual charts can still override:
```{r, eval = FALSE}
proj <- create_dashboard(
title = "Plotly Dashboard",
output_dir = tempdir(),
backend = "plotly"
) %>%
add_dashboard_page(page_title = "Overview", data = gss) %>%
add_viz(type = "bar", x_var = "degree") %>%
add_viz(type = "bar", x_var = "race") %>%
# Override one chart back to highcharter
add_viz(type = "bar", x_var = "sex", backend = "highcharter")
```
## Validation with print(check = TRUE)
`print(collection, check = TRUE)` validates parameters and column names. This works regardless of which backend is set:
```{r}
content <- create_content(data = gss, type = "bar") %>%
add_viz(x_var = "degree", title = "Highcharter Bar", backend = "highcharter") %>%
add_viz(x_var = "race", title = "Plotly Bar", backend = "plotly") %>%
add_viz(x_var = "sex", title = "ECharts Bar", backend = "echarts4r")
print(content, check = TRUE)
```
Backend validity is checked at render time when you call `preview()` or `generate_dashboard()`, not during validation.
## Limitations
- **Feature parity**: All backends support core features (titles, colors, labels, tooltips).
- **Chart type coverage**: Most viz types support all 4 backends. A few exceptions exist (e.g., `viz_gauge()` does not support ggiraph, `viz_waffle()` does not support echarts4r).