Changelog
Source:NEWS.md
shinyelectron 0.2.1
CRAN release: 2026-08-07
Examples for functions that install a runtime, launch an app, or clear the cache now run only in interactive sessions.
The Download Prebuilt Demos guide moved from a bundled vignette to the package website, and outdated external documentation links were refreshed.
wizard()now requires theappdirargument instead of defaulting to the working directory.
shinyelectron 0.2.0
This release grows shinyelectron from an R shinylive exporter into a general Shiny-to-desktop toolkit, adding Python apps, five runtime strategies, and multi-app suites.
Breaking changes
-
app_typenow takes only"r-shiny","py-shiny", orNULL(autodetected), and shinylive is aruntime_strategyrather than an app type. The old"r-shinylive"and"py-shinylive"values still work with a deprecation warning and will be removed in a future release.
New features
- Python Shiny apps are supported alongside R.
app_typeautodetects"r-shiny"or"py-shiny"fromappdir, soexport(appdir, destdir)works with no other arguments. -
runtime_strategyselects how an app runs, and all five strategies work with both languages:shinylive(the default; compiled to WebAssembly and run offline in the browser),bundled(embeds a portable R or Python runtime),system(uses an installed interpreter),auto-download(fetches the runtime on first launch), andcontainer(runs in Docker or Podman). - Multi-app suites bundle several apps into one Electron shell with a launcher. An
appsarray in_shinyelectron.ymllists them, and each app can set its ownruntime_strategy. -
export()andbuild_electron_app()gain asignargument for macOS signing and notarization and Windows Authenticode, driven by the usualCSC_*andAPPLE_*environment variables. -
enable_auto_updates(),disable_auto_updates(), andcheck_auto_update_status()manage electron-updater configuration. -
install_r_portable(),install_python_standalone(), andinstall_nodejs()download and cache portable runtimes, andcache_dir(),cache_info(), andcache_remove()inspect and prune the cache. -
dependencies.r.version,dependencies.python.version, anddependencies.electron.versionpin the versions a build uses; each acceptsnull,"latest", or an exact version. - App dependencies are detected automatically for native, bundled, and container builds, from
library()andrequire()calls for R andrequirements.txtorpyproject.tomlfor Python. - A configurable lifecycle splash and preloader report startup progress, and a system tray and application menu are set through
_shinyelectron.yml. - The Electron shell streams the renderer console (webR, Pyodide, and Shiny output) into the app log, so browser-side messages and errors appear alongside the main-process logs.
-
app_check()validates an app before building,wizard()generates a config interactively,show_config()prints the merged configuration, andavailable_examples()andexample_app()browse the bundled demos. -
app_dependencies()reports the R or Python packages a Shiny app or multi-app suite uses, which helps install an app’s dependencies before a shinylive build. - Apps can supply a Posit
_brand.ymlfor theming. - Prebuilt demo installers are published for every strategy and platform, listed in the new Download Prebuilt Demos article.
Minor improvements and fixes
- The
runtime_strategyargument overrides a suite’sbuild.runtime_strategyfor apps that set no per-app strategy, so a suite built asshinylivereally is shinylive rather than falling back to the config default. - A
_brand.ymlthat names palette colors (for exampleprimary: plum) resolves those references before theming the shell. - Error screens allow selecting and copying the message and log details.
- Building with the shinylive strategy checks that the app’s R packages are installed and names any that are missing, since
shinylive::export()compiles the WebAssembly bundle from installed packages. -
build_electron_app()refuses to overwrite protected directories such as~,/, andR.home(). -
convert_shiny_to_shinylive()removes its temporary copy on every exit path. -
export()cleans up partial output when a build fails, so a retry no longer needsoverwrite = TRUE, for single apps and multi-app suites alike. -
export()no longer aborts or deletes a finished build when arun_afteroropen_afterstep fails; those steps now only warn. -
init_config()escapes app names so the generated YAML round-trips, andbuild.typemay be omitted and autodetected. -
run_electron_app()reports the real exit code and stderr on failure and returnsNULLwhen interrupted. -
sitrep_shinyelectron()also checks the Python shinylive CLI and shiny package. - Directory copying keeps consistent cross-platform semantics on Windows.
- Python subprocesses spawn without
LD_LIBRARY_PATH, fixing a LinuxNo module named shinyliveerror. - Portable runtimes extract with the system
taron macOS and Linux and bsdtar on Windows, handling archives R’s internal tar cannot read. - Native apps bind to an OS-assigned free port to avoid collisions, and native startup failures surface in the lifecycle splash.
- The
systemstrategy checks for R >= 4.4.0 or Python >= 3.9.0 and fails with an actionable message. - Invalid configuration values warn and fall back to defaults instead of aborting later in the build.
- Configuration keys that were never read (
splash.width,splash.height,preloader.enabled,lifecycle.splash_min_duration) are removed, andmenu.templateaccepts only"default"and"minimal". - Downloaded runtimes are verified against upstream SHA-256 checksums before extraction.
- Vignettes cover getting started, configuration, runtime strategies, multi-app suites, code signing, containers, security, and auto-updates.
shinyelectron 0.1.0
- Initial release with
r-shinylivesupport. - Export R Shiny apps as standalone Electron desktop applications via WebR.
- Cross-platform builds for macOS, Windows, and Linux.
- Node.js local installation and management.
- Configuration via
_shinyelectron.yml. - Automatic updates via
electron-updater.