Known Issues

Known limitations in the current version of webRoid, with workarounds where available.

WebAssembly Limitations

These are inherent to running R via WebAssembly and apply regardless of the app version.

  • No interrupt for running code. Once R code starts executing, it cannot be cancelled. The WebAssembly runtime does not support interrupts.

Workaround: If code is stuck in an infinite loop or taking too long, close and reopen the app. Enable Persist Workspace in Settings to preserve your variables across restarts.

  • No Shiny, R Markdown, or knitr. Shiny requires a background HTTP server (httpuv), and R Markdown rendering requires knitr and pandoc. These are not available in the WebAssembly environment.

  • No system() calls. R’s system() and system2() functions do not work because there is no underlying operating system shell accessible from WebAssembly.

  • No forked parallelism. Functions that rely on process forking (mclapply, parallel::mcparallel) are not supported. Single-threaded alternatives work fine.

  • Not all CRAN packages available. Only packages compiled for WebAssembly are available from the webR repository. Packages with system library dependencies (e.g., rJava, odbc, database drivers, sf with GDAL) are not supported.

Check availability: Search repo.r-wasm.org before trying to install a package. The list grows with each webR release.

Console

  • Smart quotes from keyboards. Some Android keyboards insert curly (“smart”) quotes. webRoid auto-converts these to straight quotes, but if you paste code from a website or PDF that contains smart quotes, R may throw a parse error. Re-type the affected quotes manually.

Editor

  • Large files may be slow. Scripts over a few hundred lines may experience slower syntax highlighting and scrolling.

  • Auto-save is best-effort. The editor auto-saves your work for crash recovery, but you should still save manually (toolbar save button or Ctrl+S with a hardware keyboard) before closing the app.

Packages

  • Package updates. Updating an installed package to a newer version may require clearing the app’s package cache first. Go to Settings > Session > Clear Package Cache if an update does not take effect.

  • Large packages take time. Packages with many compiled dependencies (e.g., the full tidyverse) can take a while to download and install. Use one of the preset bundles for a faster experience.

Plots

  • Memory pressure with many plots. Each plot consumes memory. The app may slow down after generating many plots in a single session.

Workaround: Delete plots you no longer need from the gallery, or use selection mode for bulk deletion.

  • Interactive plot limitations. HTML widget plots (plotly, leaflet, DT) render in a WebView. Complex widgets with heavy JavaScript may be slow on lower-end devices.

Memory & Storage

  • R runs locally and needs RAM. Because R executes entirely on your device, large datasets, complex models, and accumulated plots all compete for available memory. Devices with more RAM handle heavier workloads.

To free memory: Remove objects you no longer need (rm(large_object)), delete old plots, and run garbage collection from Settings > Session.

  • Android may reclaim cached data. Under storage pressure, Android can clear the app’s internal cache, which may remove downloaded packages. Use Restore Packages on Startup in Settings as a safeguard so they are automatically re-loaded.

  • SAF directory permissions. If you change your storage directory or revoke file access permissions, the app will prompt you to pick a new location on next launch.

General

  • Startup time. First launch takes 5-15 seconds while the R runtime loads. Subsequent launches are faster due to caching.

  • Keep Android up to date. webRoid requires Android 15 (API level 35) as a minimum. Newer releases include performance improvements and better memory management that directly benefit local R computation.