← Back to all posts

Idea: Distributable Web Apps

Published: ....
Last modified: ....

Share this post on BlueskySee discussion on Bluesky

I was recently reading this Twitter (X?) thread:

Would anyone like to partner on creating an Electron alternative that builds on top of React Server Components? It would take the good parts of Electron, Tauri, and React Native. The IPC would be replaced with the server components (React Flight) — Tom Sherman (@tomus_sherman) July 27, 2023

specifically this part:

Try building the React parts on top of Electron first, and then replace Electron once you’ve got the abstractions in the right spot — and you’re sure Electron is the problem — Jake (@jitl) July 27, 2023

and I got to thinking - what if you could distribute your application as a web server + a bundled web app?

One major benefit - you don't need to rebuild some web view framework (or leverage the existing ones that seem to be fairly heavy and hated also), and it also offers some flexibility to the user for how they want to load the application.

But Matt, how would this work??!?!?

You'd need to do the following:

  • Build your frontend web application (and server if you have one)
  • Package it up into a folder if you want (zip or what not)
  • Offer an entrypoint script (really only something to start up the web server - maybe some shenanigans for domains [see caveats below])
  • Share the "app" as a directory download for the user

Users would then download the folder of assets + web server and start script, run the start script, and load up your application in their favorite web browser!

Caveats:

AKA open questions!

What url would you host the app on?

localhost:3000 or similar is a bit funky - doesn't tell the user what is running there. If possible, would be nice to register something like local.<your-app-name>.app and tell the OS (via hosts file maybe) that the url should be resolved against localhost:<your-port>.

What does the start script look like?

Initially I was thinking that it would be a shell script, but I realized that it could also be a Deno script thats compiled to run as a binary - then it could package up the web server all in one file too!

Summary:

That's it - that's the whole idea! Has anyone tried this before? Anyone have success? I could see a simple native app that handles the host issue for folks, and then web apps "register" with the native app somehow...


Tags:

Related Posts