Get help from the marimo community

Home
Members
btnaughton
b
btnaughton
Offline, last seen 18 hours ago
Joined November 25, 2024
I am trying to serve marimo apps on a company server (python, not webassembly).
I have fastapi working fine, but I am running up against a problem with imports.

Originally I thought the sandbox imports would work, but it looks like this is not the case (I found a message on this discord).

That leaves a few options to solve the import problem:

  • use mo.install() to somehow pull in the sandbox imports? But if all the apps are in the same marimo process does this create conflicting imports? Also how would I read in the imports?
  • use marimo run --sandbox and have each app have its own process and port that i have to forward to
  • use a global uv environment for all apps and keep it synced across apps somehow. This will eventually lead to conflicts.
Obviously my preference would be something where i can just have one marimo fastapi app,
but I am not sure what the best way to achieve this is, while keeping apps sandboxed.
Generally each app will have many imports.

Thanks for any advice!
4 comments
M
b
I actually posted this to github discussions, so apologies for double-positng. I think this is probably a better forum for this question... (Happy to delete the github one if that's helpful)

I am trying to get marimo running on modal, following https://docs.marimo.io/guides/deploying/programmatically.html and https://docs.marimo.io/guides/deploying/authentication.html

The following code works, up to the point of giving a 401 for /api/kernel/instantiate

Plain Text
import modal
from modal import asgi_app
import marimo

server = marimo.create_asgi_app().with_app(path="", root="/marimo/test.py")

app = modal.App()

@app.function(
    image=modal.Image.debian_slim().pip_install("marimo==0.8.3", "fastapi"),
    gpu=False,
    mounts=[modal.Mount.from_local_dir("./marimo", remote_path="/marimo")],
)
@asgi_app()
def marimo_asgi():
    return server.build()


if __name__ == "__main__":
    modal.serve(app)


I have tried adding middleware and I can see the requests come through.

I can reject requests (return 401) but I can't figure out how to prevent a 401 for /api/kernel/instantiate
Plain Text
    GET / -> 200 OK  (duration: 117.8 ms, execution: 51.9 ms)
    ....
    GET /android-chrome-192x192.png -> 200 OK  (duration: 1.27 s, execution: 0.0 ms)
   POST /api/kernel/instantiate -> 401 Unauthorized  (duration: 1.17 s, execution: 13.1 ms)
CONNECT /ws -> 101 Switching Protocols  (duration: 1.52 s, execution: 0.0 ms)


I think I am missing something fundamental about what's going on here, since I don't see where a token could be validated, or where the 401 is actually happening. I do see marimo-server-token in the header for /api/kernel/instantiate but no authorization or similar.

If anyone has any ideas, I would appreciate it! Running marimo on modal would be fantastic.
26 comments
A
b
M
E