Running Frappe Entirely in the Browser with WASM, Pyodide and SQLite [experimental]

We’ve been experimenting with running the Frappe framework fully client side in the browser using WASM + SQLite, inspired heavily by what WordPress Playground did for the WordPress ecosystem.

The idea was simple:
“What if trying Frappe could be as easy as opening a link?”

After a lot of hacks and broken experiments, we now have a working prototype running entirely in the browser.

Current setup is highly experimental:

  • SQLite instead of MariaDB

  • In-memory/cache workarounds instead of Redis

  • WASM runtime

  • Browser persistence experiments

  • Lots of rough edges!

But even in this state, it already feels like a gateway to interesting possibilities!

Live demo: (hosted on cloudflare pages)
https://frappe-playground.lubus.in

Would love feedback, ideas, and people interested in exploring this further with us.

Very early days, but exciting to see what might be possible here.

Open source and available to explore or contribute:
https://github.com/lubusIN/frappe-playground

Read More:
https://lubus.in/blog/running-frappe-entirely-in-the-browser-with-wasm-pyodide-and-sqlite

9 Likes

Also check out https://www.frameworkm.dev/

1 Like

This is a really interesting experiment. Lowering the barrier to trying Frappe directly in the browser could help more developers explore the framework without going through a full installation process. I’m especially curious to see how performance and persistence evolve as the project matures. Thanks for sharing the progress and the technical details.

1 Like

At the loadup can you put a progress bar as it is stuck on the “Installing python dependencies”
So i dont know if it is making any progress or just stuck (maybe bad internet)

Thanks! That’s exactly the goal of the project: making it easy to explore and experiment with Frappe without the overhead of a full setup.

Performance and persistence are our immediate priorities. We’re working on faster startup times and adding persistence so users can pick up where they left off instead of losing state on refresh or when closing a tab.

Appreciate the feedback and interest. It’ll be exciting to see how far we can push the browser-based experience while keeping it lightweight and accessible.

1 Like

We have a UI indicator with text indicating whats happening. I haven’t been able to reproduce the issue on my end, but given the experimental nature of the project and its current POC status, I’m sure there are cases where things can get stuck or fail unexpectedly.

Would you be open to sharing a few more details? Things like:

  • Browser and version

  • Device/OS

  • A screenshot of where it gets stuck

  • Any errors from the browser console, if available

If you could open an issue with those details, it would help a lot in tracking down the problem and improving the loading experience:

https://github.com/lubusIN/frappe-playground

1 Like

Thanks @ajitbohra

Its working nicely now