Show HN: Configurable desktop environment running in the browser

3 peaBerberian 2 5/26/2025, 2:02:48 PM peaberberian.github.io ↗
This is a complete desktop environment with a functional file system, apps, theming, configurable window manager etc., all in vanilla JS (no dependency at all for the runtime code and just one really relied on to "bundle" the project, esbuild).

---

I began it by rewriting my (initially minimal) personal website by writing it as a desktop thing, at the end of April.

This also has been an excuse for me to start trying that LLM thing everybody talks about. I'm kind of an [annoying] contrarian luddite and so I never really used an LLM before, but after my search engine (Kagi) insisted that I should use it by adding some to my subscription plan, I gave up and felt that I had to try using that thing!

In the end, LLM mainly helped me for initial app drafts and ideas, which is not the aspects I find the most fun generally, freeing me to do what I like: the logic stuff, architectural ideas, ad-hoc concepts (e.g. executable format, a file system, a permission system etc.). Though I found that under my prompts at least, the more I queried an LLM, the worse its output was, so it stood in first drafts territories mostly (and theming!).

This synergy led me to spend way too much time on that thing, as there was not much any step slowing/annoying me enough for me to stop working on that project.

---

Now after a long list of features that I wanted to implement first, I finally begin to like enough that site to share it.

Do not hesitate to tell me if you see issues, weird choices or poorly understandable things.

Comments (2)

maximge · 1d ago
The standard file system paths are a mix of *nix and Windows approaches. It seems that you are not satisfied with both options :)
peaBerberian · 23h ago
I chose the filesystem paths organically as I was iterating with it: starting from the ideas of having a root dir and a simple unique "home" dir.

I also wanted to allow the visitor to hack around stuff like the system config through the filesystem (as if updating the `~/.config/` or `/etc/` directories in the linux world), so I also planned to have the desktop's own config files reachable in there and make it user-editable (though for now that's only the case for the list of desktop icons).

I found out that having a few root directories that were fully virtual[1] (actually in-memory) and marked a "read-only", and the others that were actually real IndexedDB-backed storage[2] was very simple to manage.

In the end it seemed to me like a much more simplified unix-like way of doing things which is what I'm the most used to. I'm not that familiar with windows so I'm not sure why it also looks windows-like though :D, is it about the naming of paths?

[1] `/apps` for apps and `/system32` for default configs - the name was `/system` at first, then I thought renaming it `system32` instead was ""funny"" (as the directory name became kind of a meme), so I did that! Both store "files" that are actually JS objects that can be stringified to JSON when reading them.

[2] For now `/userconfig` for the desktop's own update-able config and `/userdata` for the "home" directory. Something like `/appconfig` is also planned though I'm not sure yet. In contrast those contain data really stored locally, in ArrayBuffer form (a blob of bytes).