FAQ
General
Why does the app take a while to start?
webRios runs R through WebAssembly, which takes 5-15 seconds to load and initialize on first launch. Subsequent launches are faster because your device caches the initialized runtime. See Getting Started for what to expect on your first launch.
What devices does webRios support?
webRios requires iOS 26 or later and runs on iPhone and iPad. On iPhone, a new install starts with a tab bar at the bottom: Console, Editor, Plots, Environment, and More, which holds Files, Packages, Projects, History, Help and Settings. On iPad, it starts with a sidebar, and the 4-Pane Workspace shows the Editor, Console, Environment and a tabbed pane side by side. You can switch layouts on either device in Settings > Layout.
Does the app need an internet connection?
Only for installing R packages, and for any R code you write that fetches data from the network. All R computation runs locally on your device, so you can write and run R code completely offline.
Can R code download data from the internet?
Yes. As of webRios v1.2.0, packages built on curl (including httr2 and anything that depends on it) work and can reach any server.
install.packages("httr2")
library(httr2)
resp <- req_perform(request("https://r-project.org"))
resp_status_desc(resp)
#> [1] "OK"R’s built-in download.file(), url() and read.csv() also work, but only against servers that permit cross-origin requests. See Known Issues for details.
By default, requests go straight from your device to the site you asked for, through a small proxy that runs inside the app. Nothing is relayed through a third-party server. For https sites, curl negotiates TLS end to end with the destination, so what passes through the app is already encrypted.
If that on-device proxy can’t start, webRios blocks R’s curl requests rather than quietly sending them somewhere else, and tells you. You can choose to allow a public proxy instead in Settings → R Session → Network.
The credit for this working at all belongs to the webR project. R compiled to WebAssembly has no sockets, so curl cannot open a connection on its own. webR added the mechanism that turns those connections into WebSockets and tunnels them through a SOCKS proxy. webRios supplies that proxy on-device, which is the easy half. Thank you to the webR team for the hard half.
See Known Issues for more detail.
Does my R session persist between launches?
Partly, and you choose how much. Each time you open webRios, a fresh R session starts. Turn on Save Workspace in Settings > R Session and your variables are saved to the current project when you leave the app or switch projects, and loaded again when R starts. Each project keeps its own workspace. It is off by default.
Packages you loaded with library() are not re-attached, so put library() calls at the top of your scripts. Installed packages, your editor tabs, and the commands in the History tab are kept either way.
How much memory can R use?
R has approximately 300 MB of memory available. For most interactive analysis, this is sufficient. If you run out of memory:
- Remove large objects you no longer need with
rm(), or from the Environment tab - Run garbage collection (Settings > R Session > Run Garbage Collection)
- Clear your environment (Settings > R Session > Clear R Environment)
Plots in the gallery are image files on your device, so clearing them does not free R’s memory.
Why is the app so large?
webRios uses the webR WebAssembly binary, which is downloaded once and kept locally on your device (~30 MB compressed). This is what allows R to run without a server.
Editor and Files
How do I save my work?
In the Editor, tap the file icon in the toolbar to open the File menu, then choose Save (or press Cmd+S on a keyboard). You can also create new files, open existing ones, and export scripts as GitHub Gists. Your saved .R files appear in the Files tab and persist between sessions.
Open editor tabs are also saved automatically, a moment after each change and whenever you leave the Editor or the app, so unsaved work comes back after a relaunch. That autosave is a safety net, not a replacement for Save: only a saved file appears in Files.
Can I open R files from other apps?
Yes. In the Files app, Mail, Messages and other apps, share the file (or use Open With, where the app offers it) and choose webRios. R scripts, R Markdown and Quarto documents open in the Editor. CSV and TSV files open in the data import wizard, and .rds and .RData files load into R after asking. A file from Mail or Messages is moved into the current project; a file elsewhere, such as in iCloud Drive, is opened where it is. You can also send files with Import to webRios in the share sheet; see Shared files.
Where are my files stored?
Files are stored in the app’s sandboxed storage on your device. They persist between sessions but are deleted if you uninstall the app. You can import and export files through the Files tab, which also integrates with the iOS Files app and iCloud Drive.
Why do my quotes look different?
iOS sometimes inserts “smart quotes” (curly quotes) when typing. webRios automatically converts these to straight quotes that R understands, so you shouldn’t notice any issues.
Can I change the editor theme?
Yes. webRios includes nine built-in themes, which color the whole app as well as your code, and you can pick one for light mode and one for dark mode. Go to Settings > Appearance to choose them, create your own, or import a VS Code or RStudio theme. See Editor Themes for a preview of some of them.
Running Code
What are the two ways to run code?
You can run code from both the Console and the Editor. The Console is for quick, one-off commands. The Editor is for writing multi-line scripts that you can save and re-run. In the Editor, a green play button runs the entire script and a blue play button runs only the selected text. Either way, R prints every result the code produces, as desktop R does, not only the last one. See Running Your Code for details.
Can I use ggplot2?
Yes! Install it from the Packages tab. Not all CRAN packages are available, only those compiled for WebAssembly by the webR project.
Can I interrupt running R code?
Yes. While R is running, the Console shows a Stop button beside its progress indicator, and the Editor’s Run button becomes Stop. Tap either one, or press Command-period on a keyboard, and R stops where it is, prints “Interrupted”, and keeps your variables. Stop works the same whichever screen started the code, including scripts run from Files, History or a Help example.
If code has been running for over a minute, a banner offers Stop and Restart R. A few compiled operations can’t be interrupted mid-step; the banner then says R is still finishing that step, and you can wait or restart R. See Stopping running code.
Plots
My plot isn’t showing up
Plots appear in the Plots tab after you run code that produces graphics. Make sure you switch to the Plots tab to see them; a badge counts new ones. Plots are stored even if you were on a different tab when the plot was created. To see each plot in the Console as well, set Settings > Appearance > New Plots to Gallery and Console.
Interactive plots from packages such as plotly and leaflet appear on an Interactive Plots card at the top of the gallery.
Can I export plots?
Yes. Tap a plot to open it full-screen, then use the share button to save to Photos, AirDrop, copy, or send to any app that accepts images. See Sharing and Exporting for more.
Packages
Why can’t I find a package?
Not all CRAN packages have WebAssembly builds. The webR project maintains a repository of compatible packages at repo.r-wasm.org. Most popular data science packages are available. Packages that depend on external system libraries (like database drivers) are the most likely to be missing. See A note about package availability for more.
Do installed packages persist?
Yes. Packages you install persist between app sessions and are stored in the app’s local storage. However, you still need to load them with library() each time you start a new session. See Loading packages after installation for details.
To stop a package coming back, remove it from the Environment tab’s Packages list, or run remove.packages("name") in the Console. Either one deletes the saved copy.
How do I install packages?
There are two ways. You can use the Packages tab to browse and install packages with a few taps, or you can run install.packages("name") in the Console or Editor. The app also offers Package Bundles that install groups of related packages in one tap.
Other R Apps
Is there an Android version?
Yes! webRoid is the Android companion app, available on Google Play. It shares the same webR engine, so R code, packages, and even custom themes work across both platforms. webRoid requires Android 15 or later.
How does webRios differ from R Programming Compiler?
R Programming Compiler sends your code to an external server for execution and returns the results, with a 20-second timeout per program. webRios runs R entirely on your device through WebAssembly, so your code never leaves your phone or tablet, there is no timeout, and you can work offline.
How does webRios differ from R Analyst?
R Analyst runs R locally using an older embedded R engine (R 4.2.1, last updated in early 2023) and does not support installing additional packages. webRios uses webR, which tracks recent R releases and lets you install packages from the webR repository.
What about running R through iSH (Alpine Linux)?
The iSH emulator can run Alpine Linux on iOS, and R can be installed through Alpine’s package manager. This gives you access to CRAN packages compiled for Alpine, but compiling packages on the device is extremely slow (hours for a single package like stringr) and typically requires cross-compiling on another machine.
Need More Help?
Check the Known Issues page for current limitations and workarounds, or visit the Support page to get in touch.
- Email: support@caffeinatedmath.com
- GitHub: open an issue to report a bug or request a feature