Around 9 and a half months ago I started working on a small idea I had, back then I thought to myself what if I could implement a full desktop environment with all the regular features of a desktop environment such as a full window manager and high-level abstractions of concepts like running apps and managing your desktop, but all with the exception of running in your web browser as a web app.
In theory, this may sound unnecessary (at the very least for some people), you could think to yourself, isn't the web much slower than my daily used blazing fast native CPP-based desktop environment?
or, what about support for all of the existing apps that weren't built to run on a web environment? well before I start and explain my solution to both those issue I want to start over and list the Pros I personally see in a web-based desktop environment -
- accessible from anywhere - since it exists in the form of a website.
- isn't bound to a physical box - you don't must to have a physical PC, you could host your PC from anywhere, sometimes working directly from a public server could be awesome for some developers.
- great for low-end computers or servers - small PC boards like the raspberry PIs or low-end servers with virtual CPU/s and no GPU can struggle running a full desktop and dealing with rendering, but running a desktop environment web server? that's no problem.
now, what about the flows with a web desktop environment?
let's start with the performance issues -
well, the way why address those is by breaking the regular way people have been writing web applications for the last few years, instead of providing to the user with a client app that contains all of the app logic and supporting that logic flow with a rest/socket API to supply the native functionalities like must full-stack web apps do, we instead move all of the logic to the server and only provide the client with instructions of what the server wants him to currently render, this moves out all of the heavy calculation and stuff that relies heavily on multithreading away from the client to into the server and by doing so keeps the web lightweight, fast and eliminate the performance issue with running a complete desktop on the browser.
and what about the backward compatibility issue?
this is the hard one, I am working hard to find a way to enable support for x11 applications to run on the desktop environment but in the meantime and as of today (03.04.21) support for gtk3-apps to run via the broadway backend of gtk3 is already in the main branch and soon to be released to NPM.
- terminal emulator 👩💻
- visual studio code ✌
- file explorer 📁
- text editor 📝
- media player 🎧
- settings/ system info app ⚙
- any GTK3 app (30% of apps do crash) 🐾
- slick-looking desktop 💻
- lot's of themes 🎨
- complete sync between all instances 👦<->👦
You can visit the live client side demo here https://web-desktop.app/demo , I can promise you that playing a bit with the themes can be quite fun!!
If you are looking to learn more, install the app or even just wanting to give me a star on GitHub 🙏 here is the link
A cross-platform desktop-environment with a web interface
Installation and run guide
First, we need to make sure we have node and npm installed, I recommend using node 14.x with npm 7.x.
now we will install "web-desktop-environment" with the following commands -
npm install @web-desktop-environment/home-edition-server or
npm install @web-desktop-environment/development-edition-server --unsafe-perm for the development edition of "web-desktop-environment".
After the "web-desktop-environment" server is installed we can run it using
web-desktop-dev for the development edition of "web-desktop-environment".
Now that "web-desktop-environment" is running we can enter "https://www.web-desktop.app" and connect to it.
to connect to the server we will need to enter the server host and port,
if we are running the server locally we can keep the default
localhost host, otherwise enter the server host IP,
to get the server port we can look at the server console output, it should print somewhere in the start something along the…