Show HN: DaedalOS – Desktop Environment in the Browser

6 months ago (github.com)

Demo: https://dustinbrett.com

Hey HN!

I've been building my passion project daedalOS for over 4 years now.

The original idea was to give visitors to my website the experience as if they had remotely connected to my personal machine. To do this I decided I would attempt to recreate as much of the functionality as possible.

My hope is to keep working on this project for the rest of my life and continue to evolve it's capabilities as technologies progress.

Thanks for checking it out!

I made one of these years ago, much less polished but broadly similar.

From that perspective you have done well to avoid discouragement. Most of the feedback I received was negative. Worse was that the negative feedback was not related to my implementation but arguing that I should not try at all.

If you do keep working on this project for the rest of your life, I commend you.

I kind of got split between making a client only version (all data client side), a file storage server where all brains are client side but persistent data is on a server, or a direct Linux login (open real shell on browser. Linux executables can connect to a socket to open windows on the browser and provide a UI similar to how X11 does, only with a much smarter UI host)

In recent years I have been doing a few experiments working on the areas that were difficult. So many things have been added to browsers since I started, I can't recall exactly how long ago that was but I remember boot2gecko adding features that I needed.

Recently I have been experimenting with launching web workers which asks for an API and is given a MessagePort with code to construct functions that translate to messages. That way all of the desktop features can be provided as permissions with some auditing theoretically(but unimplemented) available.

  • Wow - indeed. I see you made something like this already back in 2012. Impressive: https://github.com/Lerc/notanos That is more than 13 years ago when websockets where about to become generally available. Impressive!

    Don't be discouraged by people that argue what you should or should not do. The world is full with people with their own agenda or that simply have a too narrow view of how their world should operate.

  • To everyone: Ignore the nay-sayers. You've done more than most of them ever attempted. It's more easily said than done, negative feedback tends to set off a stronger emotional response. Seek feedback from people you know will support you.

    I play guitar, for fun. I've once posted a recording. Someone said something mean. It really hurt me somehow, I didn't record anything at all in the following 15 years.

    Recently I've been talking a lot with my sister, we both really liked a song so we agreed to record a cover. I've now been working on that for many evenings. I'm sharing the WIP demos with people I know will give me constructive feedback. I keep going. It's more work than I've expected! But it's so much fun.

    Don't stop dreaming.

    • Totally agree, the nay-sayers don't phase me anymore because I enjoy what I am doing, everything else that comes from my work is just a freebie.

  • Notanos looks awesome, I will check it out.

    There are several milestones of my project that will likely require forks in the road where I might have to do a rewrite, but I hope to be able to keep doing it and learning.

    I think that in 10-20 years with the progress of AI, this project could become something quite amazing, but by then maybe everything will be amazing by todays standards.

    • Arrgh, now I get to live with the shame of someone looking at my code. Be wary of the https://github.com/Lerc/userserv component, because that's the bit that is only really proof-of-concept level and runs as root. It's the bit that allows user login (it forks and drops privileges to the user before serving static files) It's probably a candidate for a Rust rewrite.

      I agree on the AI part. When ChatGPT4 came out my test case for it was getting it to make a filesystem on top of IndexDB and and a set of edge case tests. It did quite a respectable job (until it got bigger than the context anyway). I should go back and finish the job now that contexts are larger.

This is amazing - well done, and indeed runs oh-so smooth - even on mobile!

I see that the browser is somewhat limited as most sites try to prevent 'embedding'. However, we have a solution where we can proxy any web content in such a way to still allow you to embed it: https://www.webfuse.com/use-case/embed-unembeddable-content

Lmk if you would like to try this out and I can help you set this up.

  • Thanks! I actually did add a "Proxy settings" button to the right of the address bar which allows you to pick between a few free to access proxies. For my proof of concept Browser I have been ok with this, but if I did want to have a legit proxy then I would consider something like what you mentioned.

  • It would be €529 /month for 20 users but wouldn't they need to possibly support way more users than that? I wish we had a client-side solution that could infinitely scale beyond having users run their own node.js proxy.

    • The 'per user' pricing is only for the number of admins/devs they'd need to give access to the platform, beyond that you can scale to unlimited users.

      And also for this specific need case (just proxying and embedding) the 'spark' plan at €19 will be enough though. Also for these non-for-profit usecases I'm happy to sponsor access.

On one side Im amazed by the amount of good work you have done, but on the other, I feel it lacks true useful scenarios.

For instance, I would love to install it in my server to handle my own server files, but it doesnt support mounting a folder to access from the OS.

Or I would love to have an SSH client, or a terminal that is executed in the server, to run my own nodejs apps.

Also some form of login/pass would be helpfull in case somebody got access to the URL.

But none of them are available.

I understand than the goal was to see whats possible in a browser, but to make it more appealing to people I would love to see some real usecases covered.

Cheers

  • It does indeed have a long way to go if I want to add usefulness beyond my personal website use case.

    It is possible to "map" a local drive in several ways, such as via the desktop right click menu's "Map directory", and also if you built it locally you could put a folder in "public" which would then be mapped.

    But it isn't the same as what you are describing and that would likely require a server component so I could bypass the limits of the browser.

    I hope to eventually have an answer for all the use cases you mention, but because this is just a side project and my main goal is a client-side personal website, I don't expect those features in the 2020's, maybe the 2030's. :-)

Reminds me a bit of Sun's network computer (JavaStation) back in the day. Based on JavaOS. It was an idea to get Java on the map but it had very obvious issues.

The main thing I remember about that... s...l...o...w... :P The other thing I remember: Shit cool hardware. As expected from Sun. They were the cool kids before Apple were cool, along with SGI.

But of course computers are not what they used to be these days.

This is really impressive and surprisingly visually close to Explorer, especially the font rendering and the button hover effects. I also started poking around to see how the animated wallpaper was done and the custom devtools were a nice surprise too. I don't know how much Microsoft cares about people ripping Windows icons, but directly using icons from Facebook Messenger, VLC, VSCode, Chromium, etc might be more of a concern if it starts to get more attention.

Much deeper and works better than anything like it, at least from what I’ve seen around the web. And that’s only from my phone. Very well done

I even got quake to run, haven’t tried connecting a keyboard yet.

  • Thanks for saying so, I've tried to make something which is "deep" in functionality. Some of the games/demos work better on desktop than mobile, but I tried to make it work on as many devices as possible.

Just magical! It's so realistic that I had to remind myself that it was a website and not a VM!

The nuances you've captured across so many different interfaces must've taken you a long time!

  • Happy to hear you found it realistic! It did indeed take many years to get the level of detail it has now. I still find things to add/adjust almost daily.

The accuracy and attention to detail in the UI is amazing. You even got the little window borders right. Nice work!

  • Thanks very much! I'm glad to hear you considered it detailed. I have indeed spent a lot of time trying to get the little stuff right.

    I am someone for which things that aren't quite right stand out, so it's been somewhat comforting to have a project where I can try and make things feel "right".

This is insanely cool! I really want to know how programmes like Vim are running under the hood, is this emulation? Either way, massive congrats on an awesome fun project.

  • Thanks! In the case of Vim.js and many other apps, they are ports via Emscripten which converts the native source code to run in WebAssembly.

    • Ooh, I didn't know about emscripten but that's insanely powerful!

      Again, kudos for running this stuff natively in the browser, it's absolutely insane and I'm definitely gonna snoop through the source code later!!

This is something that was clearly done just by the love of the craft and congratulations but also feel this could have a huge potential in real world applications.

First crazy idea that came to mind was a multi user desktop environment for an intranet where everyone has their own desktop but could also request access to other desktops entering and leaving them as they are working together through the day.

  • Nice of you to say, thank you! I did indeed feel like I was doing it for the love of the craft and to make something I could be proud of.

    Hopefully one day it finds the right use case, but until then I am enjoying working on it.

I really appreciate that the double-click on the icon button in the title bar of each window closes it. Such a nice detail! I got used to this once on windows 3.11 and Windows kept behaving like that through the versions, even though there's a dedicated close button on the right. I think the most recent versions of windows don't have this behavior anymore.

  • Glad you liked that small detail. I tried to re-create every detail I could find and which I personally use on Windows. I still sometimes discover things that I didn't know Windows could do which I am excited to add to my project.

  • I think nowadays it acts like clicking the maximize button rather than clicking the close button. Just as useful IMO but much safer. Apps can, of course, override the behavior though.

Impressive. Running smooth on an old 4-core Kaby Lake, in FF, while that is playing some music via YT in some other tab. Kaby Lake clocks up from 800Mhz to 900, peaking 1.1G sometimes. Music doesn't stutter, not even while your video plays.

Though I'd have preferred the option to switch to a light theme.

  • Great to hear it ran well on lower specs.

    I hope to have light mode in the coming years as it's on my list to detangle the mess of styling I did to create the dark "theme".

I had a conversation on an irc room I created called #globaltetrahedron using two browser windows on my $40 cracked screen phone.

Worked flawlessly and is a fantastic experience. I hope Microsoft is scared of the efficiency of your experience.

Wow, this is an incredibly full featured Win10-like OS using plain HTML, with apps like Quake3 and Tic80 built in.

Besides having something you can continuously work on, what's the current concrete end goal for it for users?

  • Glad you found it full features, thanks!

    As my personal website it has already reached the final goal I had for it. For other use cases, I am going with the approach of "if you build it, they will come".

This looks awesome. As soon as I saw Synology's DSM I realized the browser would be a fantastic place for a desktop environment, but they only built half of it - then left it mostly untouched anyway.

Really cool! I've seen this before, really good work. I saw your awesome YouTube video's explaining what you've done.

  • Thanks very much! Glad you checked out my YouTube videos as well. I hope to do another one soon discussing the new stuff I have added, such as screen saver support.

I checked out a lot of browser desktop environments before embarking on my own project, this one definitely takes the cake

  • Nice of you to say, thank you!

    I am a big fan of desktop environments so I know there are some good ones out there and I have indeed tried to make one of the best.

It's very cool. Love the Winamp and Doom throwbacks, it was fun to play Doom for a little bit.

Congrats on the Webby nomination!

Can someone explain to me why would such things be useful?

PS: I do not want the next generation of apps to be running only on top of these. We already have layers on top of layers in software.

  • Perhaps it's not really intended to be of widespread practical use. It's useful to the person who made it because it powers his website. But sometimes people do stuff just because they think it's fun or cool. Or as a sort of exhibit with little practical value — like apprentices used to make a "masterpiece" to show off their skills. Or because it's a way to learn a skill or technology in a low-pressure environment.

  • > We already have layers on top of layers in software.

    And more layers on top of layers will be built, forever. That's just change, and for as long as programmers are alive, more abstractions will come up and ossify.

    Don't think there is much we can do to fight it, regardless of how much we disagree with it.

  • As my personal website it is useful and was built with that purpose in mind.

    Any other uses which may come from it would also be of interest to me and I am excited to see what can come of it in the future.

I saw this a few years ago, and it’s still at the top of my “cool shit” bookmarks!!

I still look at it when I want to remember how fun, cool and silly programming can be. I seriously love this project.

  • Glad to hear that, thanks for the support!

    I still update it all the time so it's cool to hear you sometimes check back.

I don't know why, but just the animated background causes 100% cpu consumption for me. Debian 12, Chromium 136, i5-3450, 20gb ram, nVidia 3080, 4k screen though.

  • Sounds like partial lack of GPU acceleration on your linux side of things?

    You can check with going to

    chrome://gpu

    (I assume for chromium it is the same adress as for chrome)

  • That is odd, perhaps the browser is not using your GPU and instead trying to run fully on the CPU. I have an issue on GitHub where another user reported this in Firefox. I assume changing to a picture wallpaper like APOD fixes the issue then?

    • Yes, with static image CPU consumption goes to ~0%. chrome://gpu says:

      Graphics Feature Status

      =======================

      * Canvas: Hardware accelerated

      * Direct Rendering Display Compositor: Disabled

      * Compositing: Hardware accelerated

      * Multiple Raster Threads: Enabled

      * OpenGL: Enabled

      * Rasterization: Hardware accelerated on all pages

      * Raw Draw: Disabled

      * Skia Graphite: Disabled

      * Video Decode: Hardware accelerated

      * Video Encode: Software only. Hardware acceleration disabled

      * Vulkan: Disabled

      * WebGL: Hardware accelerated

      * WebGL2: Hardware accelerated

      * WebGPU: Disabled

      * WebNN: Disabled

Very nice! I only managed to nest two browsers, the third one didn't seem to be responding - although that might be the hug of death.

  • Thanks! The issue is that Chrome doesn't let you load the same URL that many times. You need to change it slightly such as adding random query params like `/?a=1` to the end, then it can load more.

Swish.

One thing I found as a minor distraction was that when you go to browse a folder the tab title of tab changes to the folder.

amazingly well done. i like it that my browser has a browser so i opened the website in the website until there was no room left on the screen and it was smooth as silk

Holy heck. Exploring this uncovers so many little gems.

- Winamp. With skins.

- SWFs. Badger.

- A bunch bootable ISOs with OSs like Kolibri. Kinda nuts to have a real OS in a browser OS on a real OS. Also: Windows RG.

- Web-self-inspector. <https://malleable.systems/> anyone?

- Games. Doom. Keen 4. Quake 3. What the heck- Quake 3!?

  • Happy to hear you explored it a bit.

    Credit to Webamp for the amazing features including hosting a winamp skin gallery which I use to get random skins. Also Webamp can run Milkdrop/Butterchurn for music visualization which I use daily on my spare computer.

    I tried to add some of the old Flash stuff I recalled from my teen years.

    The introspection I get from "DevTools" is very cool and fun to see, credit to Eruda for that.

    Glad you liked the games I've added. I could add some other cool ones into the browser but the files get to be 100's of megabytes.