Known Issues
Known limitations and issues in the current version of Pyodios (v1.1.0), along with workarounds where available.
Don’t see your issue here? Open a new issue on GitHub.
Your notebooks, scripts, files, themes, and settings carry over untouched. Packages you installed yourself do not. They were built for Python 3.13 and cannot load on the Python 3.14 runtime that v1.1.0 ships.
The first time you open v1.1.0, Pyodios writes down the names of the packages you had, clears the old copies, and offers to re-install them in one tap. Re-installing downloads fresh copies, so it needs an internet connection.
If you tap Later, or if you happen to open the app offline, the offer stays available in two places.
- Settings > Python Session, as a Re-install Previous Packages button
- The Packages tab, as a banner you can tap to start, or dismiss
Packages re-install one at a time, and anything that fails stays on the list so you can try again later. See the release notes for the full upgrade story.
Some older iPhone and iPad models take noticeably longer to start Python, even on iOS 26. The root cause is unknown and this is not fixed yet.
In v1.1.0, matplotlib loads in the background after the app is usable, so you reach the app sooner. Your first import matplotlib.pyplot as plt or first plot may take extra time while that finishes. If it fails, an amber banner names what is unavailable and offers a Retry button.
Close other apps first. Python needs a large block of memory at startup. On a 4 GB device (the minimum Pyodios supports), memory pressure is the most likely cause of slow or failed starts.
If the app hangs on the loading screen or shows Unable to Start Python, you can help us diagnose it by sending the startup log.
- Tap Show Startup Log while loading, or View Startup Log on the Unable to Start Python screen.
- Tap File on GitHub to open a pre-filled issue with your device and runtime details. Nothing is sent until you submit.
- If the app did start, find the log at Settings > Support > Startup Log. Errors are under Settings > Diagnostics > Error Logs.
- Send Feedback (Settings > Support) can also include the startup log by email, GitHub issue, or the share sheet.
The startup log records how long matplotlib took to load, which is what we need to track this down. The GitHub route fills in your device model and iOS version automatically.
Console
- No interrupt for running code. Once Python code starts executing, it cannot be stopped mid-run. A single run gives up after 120 seconds and reports a timeout, but that only hands control back to the app. The code itself keeps running in the background, and anything you run next has to wait for it to finish.
Workaround: If code is stuck in an infinite loop, go to Settings > Python Session and tap Restart Python Session. That shuts down Python and starts it fresh without closing the app. If the app itself has stopped responding, close and reopen it. Either way you lose your variables, but you can re-run your script from the Editor or Notebook.
- Session does not persist across launches. Variables, imported packages, and the console transcript are cleared when the app is closed. Each launch starts a fresh Python session. Save your work as
.pyfiles in the Editor or.ipynbnotebooks in the Notebook, and putimportstatements at the top of your scripts. Your typed command history (the one you reach by swiping up in the Console) is the exception. It is saved to disk and is there on the next launch.
Editor
- Large files may be slow. Scripts over a few hundred lines may experience slower syntax highlighting and scrolling.
Packages
Not all PyPI packages work in Pyodios. Only packages written entirely in Python, or those that have been built for Pyodide, are supported. Most popular packages (
numpy,pandas,matplotlib,scikit-learn, etc.) are available.Installing over a package you already have does nothing. If a package is already installed, installing it again has no effect. Asking for a specific different version fails instead of replacing what you have. To change versions, uninstall first (swipe left on the package in the Installed list and tap Uninstall), then install it again.
A package you already imported does not change until you restart. Uninstalling and reinstalling replaces the package files, but Python keeps using the version it already loaded. Go to Settings > Python Session > Restart Python Session, then import again to pick up the new copy.
Package versions are tied to the app. Packages that ship with the app (
numpy,pandas,scipy,scikit-learn,bokeh,altair, and most other compiled ones) are fixed at a specific version and only change when the app itself updates. v1.1.0 ships with pandas 3.0.2, SciPy 1.18.0, NumPy 2.4.6, matplotlib 3.10.8, and Pillow 12.2.0. Packages from PyPI (plotlyandseaborn, for example) are fetched fresh when you install them, so uninstalling and reinstalling one of those can get you a newer release.
pandas 3 is a major release. Code written against pandas 2 may need small changes to keep running.
Check availability: Visit pyodide.org to search for available packages before trying to install.
Projects and file sync
Deleting a file does not carry across. Removing a file in Python leaves the copy in your project folder, and deleting one in the Files tab leaves the copy in the running Python session until you reopen the project. This is deliberate. A stray
os.removein a scratch cell should not be able to delete your real work. See Projects.Files added from outside are not visible until you reopen the project. Copy something in through the iOS Files app while a project is open and Python will not see it until the project is reopened.
Files over 16 MB are not copied between your project and the Python session, in either direction. The app tells you when it skips a file. Read large files by absolute path instead of relying on the copy.
Anything written but not yet saved back is lost if Python is terminated. Your session’s working files are kept in memory. Output is copied to your project when a cell finishes, so you only risk losing one cell’s output at a time. If Python is terminated mid-run, that run’s output is lost.
Projects are reachable on iPhone under More > Projects, and on iPad from the sidebar or the workspace panel. If you do not open a project, your code runs in a scratch folder and its output is not saved to Documents.
Plots
Bokeh and Altair charts need an internet connection to draw. The HTML those two libraries generate points at their own CDNs for their JavaScript, which Pyodios does not bundle, so offline they render as an empty box. matplotlib plots and Plotly charts do not have this problem. matplotlib ships inside the app, and as of v1.1.0 so does Plotly’s JavaScript. See Plots.
Memory pressure with many plots. Generating many plots in a single session increases memory usage. The app may become sluggish after many plots.
Workaround: Clear plots you no longer need from the Plots gallery to free memory.
Notebooks
- Very large notebooks may be slow to render. Notebooks with many cells or large outputs may experience slower scrolling and rendering performance.
General
Startup time. The first launch takes 5 to 15 seconds while Python loads, and the first launch after an app update is slower than usual. Some optional work, including loading matplotlib, continues in the background after the app is usable, so the app can appear before everything inside it is ready.
Memory limit. Python needs a meaningful amount of RAM to work with data, but mobile devices have less memory available than desktops. Pyodios has approximately 300 MB of memory for Python. Very large datasets or complex models may exceed this limit. See the FAQ for tips on freeing memory.
Package storage. Packages that ship with the app are saved on your device, so they load on the next launch without a connection. Packages from PyPI (
plotlyandseaborn, for example) are remembered by name but downloaded again each time, so restoring those needs a connection. You can see how much space the saved packages use, and clear them, under Settings > Python Session. If your installed packages disappear, reinstall them from the Packages tab.