libcurl error when using htmlwidgets::saveWidget along with plotly::partial_bundle without an internet connection

Open
#2,498 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
68/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
plotly, r

Research direction

Start with plotly::partial_bundle and verify_partial_bundle, which appear in the error stack, and reproduce the example with htmlwidgets::saveWidget while offline. Trace the curl::curl_download call for the CDN bundle and inspect existing tests or examples around these entry points. Done means the reported offline workflow has defined, verified behavior without the hostname-resolution error.

Written by the indexing model from the issue text.

Description

Running the ?plotly::partial_bundle example without an internet connection available results in the below error.
I think it used to work without accessing https://cdn.plot.ly ?
As a workaround I'm now using curl::has_internet to check whether I can use partial_bundle.

Example:

library(plotly)
p <- plot_ly(x = 1:10, y = 1:10) %>% add_markers()
save_widget <- function(p, f) {
  owd <- setwd(dirname(f))
  on.exit(setwd(owd))
  htmlwidgets::saveWidget(p, f)
  mb <- round(file.info(f)$size / 1e6, 3)
  message("File is: ", mb," MB")
}
f1 <- tempfile(fileext = ".html")
f2 <- tempfile(fileext = ".html")
save_widget(p, f1)
save_widget(partial_bundle(p), f2)

Error:

Error in curl::curl_download(paste0("https://cdn.plot.ly/", bundle_script),  : 
  Could not resolve hostname [cdn.plot.ly]:
Could not resolve host: cdn.plot.ly
11.
stop(e)
10.
raise_libcurl_error(6L, "Could not resolve hostname", "Could not resolve host: cdn.plot.ly",
"https://cdn.plot.ly/plotly-basic-2.25.2.min.js", NULL)
9.
curl::curl_download(paste0("https://cdn.plot.ly/", bundle_script),
tmpfile)
8.
verify_partial_bundle(p)
7.
plotly_build.plotly(p)
6.
plotly_build(p)
5.
htmlwidgets::saveWidget(p, f)
4.
x$elementId %||% paste("htmlwidget", createWidgetId(), sep = "-")
3.
toHTML(widget, standalone = TRUE, knitrOptions = knitrOptions)
2.
htmlwidgets::saveWidget(p, f)
1.
save_widget(partial_bundle(p), f2)

sessionInfo:

R version 4.6.1 (2026-06-24 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)

Matrix products: default
  LAPACK version 3.12.1

locale:
[1] LC_COLLATE=German_Germany.utf8  LC_CTYPE=German_Germany.utf8    LC_MONETARY=German_Germany.utf8 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.utf8    

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] htmlwidgets_1.6.4 plotly_4.12.1     ggplot2_4.0.3     shiny_1.14.0     

loaded via a namespace (and not attached):
 [1] sass_0.4.10         generics_0.1.4      tidyr_1.3.2         digest_0.6.39       magrittr_2.0.5      evaluate_1.0.5     
 [7] grid_4.6.1          RColorBrewer_1.1-3  fastmap_1.2.0       jsonlite_2.0.0      promises_1.5.0      httr_1.4.8         
[13] purrr_1.2.2         crosstalk_1.2.2     viridisLite_0.4.3   scales_1.4.0        jquerylib_0.1.4     cli_3.6.6          
[19] rlang_1.3.0         withr_3.0.3         cachem_1.1.0        yaml_2.3.12         otel_0.2.0          tools_4.6.1        
[25] memoise_2.0.1       dplyr_1.2.1         httpuv_1.6.17       curl_8.0.0          vctrs_0.7.3         R6_2.6.1           
[31] mime_0.13           lifecycle_1.0.5     fontawesome_0.5.3   pkgconfig_2.0.3     pillar_1.11.1       bslib_0.12.0       
[37] later_1.4.8         gtable_0.3.6        data.table_1.18.6.1 glue_1.8.1          Rcpp_1.1.2          xfun_0.60          
[43] tibble_3.3.1        tidyselect_1.2.1    rstudioapi_0.19.0   knitr_1.51          farver_2.1.2        xtable_1.8-8       
[49] htmltools_0.5.9     rmarkdown_2.31      compiler_4.6.1      S7_0.2.2     
Dominant language
R
Stars
2.7k
Forks
641
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from plotly/plotly.R

All issues in plotly/plotly.R

Similar issues

More R issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.