Get help from the marimo community

Updated last month

wasm export local file read

At a glance
The community members discuss the issue of reading local files in a WASM (WebAssembly) environment. The original poster encountered a FileNotFoundError when trying to read a local data.csv file after exporting a notebook to WASM. The community members confirm that WASM does not currently support reading local files, as it would require bundling the files, which has limitations in terms of file size. However, they suggest that reading files from a URL, such as a GitHub repository, can be a workaround. The community members also discuss how to make a cell asynchronous in Marimo to use the pyfetch function from Pyodide, which is needed to download files from a URL. Overall, the community members provide guidance on the limitations of WASM and suggest alternative approaches to access data in a WASM environment.
Useful resources
exporting notebook to wasm
$ uv tool run marimo@0.10.2 export html-wasm apps.py -o wasm --mode run
serve it on python http server, after loading the index file, caught
This cell raised an exception: FileNotFoundError('[Errno 44] No such file or directory: 'data.csv''

does wasm export support reading local file?
2
M
l
m
14 comments
It does not at the moment. We have an issue internally tracking this
Is difficult since we would need to bundle this
And there is a limit of what wasm can support in terms of file size
ok, just to confirm, thank you, wasm standalone looks really great feature to explore 🙂
not sure if I understood the question correctly, but if you want to make a file available to the pyodide kernel, provided the file is available for download from a url, you can download it to the local wasm kernel filesystem

Plain Text
from pyodide.http import pyfetch

response = await pyfetch("https://raw.githubusercontent.com/caggionim/marimo_rheofit/refs/heads/main/models.py")
with open('models.py', 'wb') as file:
    file.write(await response.bytes())
thanks, true that reading CSV from URL does work, the intention here is to read from local file path
Hi, I was wondering, how do you make a cell async? I want to use pyfetch both during dev and deployment but it complains "'await' outside async function" and I think this is because in your code, cell using pyfetch starts with async def, but not sure how I can configure that? https://github.com/caggionim/marimo_rheofit/blob/6b3b830c463ee724bf99710f1a56ef35676cfb52/rheology_flowcurvefit.py#L15
Hi, I was wondering, how do you make a cell async? I want to use pyfetch both during dev and deployment but it complains "'await' outside async function" and I think this is because in your code, cell using pyfetch starts with async def, but not sure how I can configure that? https://github.com/caggionim/marimo_rheofit/blob/6b3b830c463ee724bf99710f1a56ef35676cfb52/rheology_flowcurvefit.py#L15
Depending on where you want to download from, you may be struggling with CORS though.
my understanding is that the pyfetch from pyodide.html returns a promise, not the actual response, so you need to await the response. When you use await in a marimo cell my understanding is that marimo automatically makes that cell async.

In the example the second cell where await is used is defined as async

Plain Text
@app.cell
def __():
    import sys
    import marimo as mo
    return mo, sys


@app.cell
async def __():
    from pyodide.http import pyfetch

    response = await pyfetch("https://raw.githubusercontent.com/caggionim/marimo_rheofit/refs/heads/main/models.py")
    with open('models.py', 'wb') as file:
        file.write(await response.bytes())

    response = await pyfetch("https://raw.githubusercontent.com/caggionim/marimo_rheofit/refs/heads/main/rheo_widgets.py")
    with open('rheo_widgets.py', 'wb') as file:
        file.write(await response.bytes())
You are right but at least looks like it works when you host an app on Github pages you can download files from the same repository without problems.
Yes, githubusercontent.com url work ok
reminder: marimo now makes serving file/data on WASM so much easier https://docs.marimo.io/guides/wasm/#including-data
Add a reply
Sign up and join the conversation on Discord