FAQ
General
Which version of Python am I running?
CPython 3.14.2, compiled to WebAssembly and shipped inside the app as Pyodide 314.0.5. Nothing is downloaded to make Python work: the runtime is part of the app. You can confirm the exact versions on your device under Settings > Python Session.
Why does the app take a while to start?
Pyodios runs Python through WebAssembly, which takes 5-15 seconds to load and initialize on first launch. The first launch after an app update is slower than usual. Subsequent launches are faster because your device remembers the loaded Python environment. Some optional setup, including loading matplotlib, continues in the background after the app is usable, so your very first plot may take a moment longer than later ones. See Getting Started for what to expect on your first launch.
What devices does Pyodios support?
Pyodios runs on iPhone and iPad, and requires iOS 26 or iPadOS 26 or later. On iPad, the app uses a multi-pane workspace layout with the Notebook, Editor, or Console alongside the Environment, Plots, Files, and Packages tabs. On iPhone, each tab is full-screen and accessible from the bottom tab bar.
Python won’t start at all. What should I try?
Close your other apps first. Starting Python means claiming a large block of memory in one go, and iOS takes that memory back from Pyodios before almost anything else when the device is under pressure. Open the app switcher, close what you are not using, and tap Try Again.
On a 4 GB device (the minimum Pyodios runs on), this is the most likely cause. The Unable to Start Python screen shows how much memory your device has and suggests next steps.
If it still will not start, tap File on GitHub on that screen. It opens a pre-filled issue carrying your app, iOS, device, and memory details plus the tail of the startup log, and nothing is sent until you submit it yourself. See Known Issues for the full diagnostic path.
Why isn’t the update showing up on my device?
Almost certainly because your device is not on iOS 26 or iPadOS 26 yet. Pyodios 1.1.0 raised the minimum from iOS 17, and the App Store will not show the update on devices running an older version. Pyodios 1.0.0 (Python 3.13) has known issues on older hardware and is no longer supported.
Updating your device to iOS 26 or iPadOS 26 makes the current release available. See Getting Started for the full requirements.
Does the app need an internet connection?
Mostly no. Python itself runs entirely on your device, and so do the science and math packages that ship with the app (numpy, matplotlib, Pillow and friends). matplotlib plots and Plotly charts both draw with no connection.
You do need one for:
- Installing a package you do not already have, and re-installing packages after an app update that changes the Python runtime
- Restoring a PyPI-only package such as
plotlyorseabornat launch, since those are fetched again rather than cached as files - Drawing Bokeh and Altair charts, which load their JavaScript from their own CDNs
- Connecting to a remote Jupyter kernel
Does my Python session persist between launches?
No. Each time you open Pyodios, a fresh Python session starts. Variables, imported packages, and the console transcript from your previous session are not carried over. To preserve your work, save your code as .py files in the Editor or as .ipynb notebooks in the Notebook, and put import statements at the top of your scripts so packages load automatically when you re-run them.
Your typed command history is the exception. The Console saves it to disk, so swiping up through past commands still works after a relaunch.
How much memory can Python use?
Python has approximately 300 MB of memory available. For most interactive analysis, this is sufficient. If you run out of memory:
- Clear unused plots (Plots tab > Clear All)
- Restart the Python session
- Clear your environment
Notebooks
What notebook format does Pyodios use?
Pyodios uses the standard Jupyter .ipynb format (nbformat 5.10). Notebooks have full round-trip compatibility with JupyterLab, VS Code, and other tools that support the .ipynb format.
Can I use markdown cells?
Yes. Notebooks support both code and markdown cells with rendered preview. You can mix explanatory text with executable Python code in the same notebook.
Can I export notebooks?
Yes. Export notebooks to HTML from the notebook toolbar.
Editor and Files
How do I save my work?
In the Editor, use the file menu and choose Save. Notebooks auto-save as you work. Your saved .py files and .ipynb notebooks appear in the Files tab and persist between sessions.
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.
If you have a project open, that project’s folder is also the folder your Python code runs in, so a file your code writes lands there and shows up in the Files tab. See Projects and your working folder.
Why isn’t there a built-in git client?
A separate git companion app is planned. The idea is that both apps would share files through iOS Files and iCloud Drive, so you could clone in the companion, edit in Pyodios, and commit and push from the same folder. No release date yet.
Why do my quotes look different?
iOS sometimes inserts “smart quotes” (curly quotes) when typing. Pyodios automatically converts these to straight quotes that Python understands, so you shouldn’t notice any issues.
Running Code
Can I use matplotlib?
Yes! matplotlib ships inside the app, so it works with no connection. It loads in the background just after launch, which means your first plot of a session can take a moment while that finishes. Plots appear in the Plots tab after you run code that produces graphics.
Can I use pandas?
Yes! pandas is not bundled in the app, so the first time you use it Pyodios fetches it, which needs a connection. You can install it ahead of time from the Packages tab or by running import micropip; await micropip.install("pandas") in the Console. You can also just write import pandas as pd and run it: Pyodios notices the import and fetches the package for you.
Pyodios 1.1.0 ships pandas 3.0.2, up from 2.3.3 in 1.0.0. pandas 3 is a major release, so code written against pandas 2 may need small changes.
Can I use interactive plots (Plotly)?
Yes. Plotly, Bokeh, and Altair charts all render interactively in a web view. Install the package you need from the Packages tab and create your visualization as you normally would.
One difference between them matters offline. Plotly’s JavaScript ships inside the app as of v1.1.0, so a Plotly chart draws with no connection. Bokeh and Altair generate HTML that points at their own CDNs, so those two need a connection to draw and show as an empty box without one.
Can I interrupt running code?
Currently, Python code cannot be interrupted once it starts executing. A single run gives up after 120 seconds and reports a timeout, but the code itself keeps running in the background, and anything you run next waits behind it. To get out of it, open Settings > Python Session and tap Restart Python Session, or close and reopen the app. Either way you lose your variables and imported packages. See Known Issues for more details.
Packages
Why can’t I find a package?
Not all PyPI packages work in Pyodios. Packages written entirely in Python, and those that have been built for Pyodide, are supported. Most popular data science packages (numpy, pandas, scipy, scikit-learn, etc.) are available. Packages that depend on external system libraries are the most likely to be missing. Check pyodide.org for compatibility information.
I updated to v1.1.0 and my packages are gone. Why?
Because they could not have worked. Packages you installed yourself were built for Python 3.13, and v1.1.0 runs Python 3.14, which cannot load them. Rather than leave you with copies that fail on import, Pyodios writes down their names on first launch, clears the old copies, and offers to re-install them in one tap. That re-install downloads fresh copies, so it needs an internet connection.
If you dismissed the offer, it is still waiting for you in Settings > Python Session as Re-install Previous Packages, and on the Packages tab as a banner. Your notebooks, scripts, files, themes, and settings were not touched. See Known Issues and the release notes.
Can I update a package to a newer version?
Sometimes. Installing over a package you already have does nothing, so to change versions you uninstall it first (swipe left on it in the Installed list and tap Uninstall), then install it again. Two limits are worth knowing:
- Packages that ship with the app (
numpy,pandas,scipy,scikit-learnand most other compiled ones) are fixed at a specific version, so reinstalling gets you the same version back. Those only change when the app itself updates. Packages from PyPI, such asplotlyorseaborn, are fetched fresh when you install them, so reinstalling those can get you a newer release. - A package you have already imported stays loaded as it was. After reinstalling, restart from Settings > Python Session > Restart Python Session and import it again.
Do installed packages persist?
Yes, with one wrinkle. Packages that ship with the app are saved on your device and load on launch without a connection. Packages from PyPI, such as plotly and seaborn, are remembered by name but downloaded again each launch, so restoring those needs a connection. Either way, you still need to import them each time you start a new session.
When the app updates to a new Python version, the saved packages are cleared because they were built for the old version. That is what the one-time re-install offer above is for.
Other Apps
Is there an R version?
Yes! webRios is the R companion app for iOS. It uses the webR WebAssembly engine to run R locally on your iPhone and iPad.
Will Pyodios come to Android?
An Android port (working name Pyodroid) is planned. The Pyodide engine is WebAssembly, so the Python side can run on Android, but the app around it needs to be rebuilt. No release date yet.
Can I connect to a remote Jupyter server?
Yes! Pyodios supports connecting to remote Jupyter kernels for full CPython access. Configure servers in Settings.
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