LIVE LINK: https://dustinbrett.com/
Hey everyone, thanks for checking out my article on my passion project for the last year (and several years prior in different forms/codebases).
I've recently completed 52 weekly streams in 2021 as I worked on coding my app, from Hello World to what it is today.
Today (Jan 2nd) was the day of my first stream one year ago so I felt it was a good day to do this release. I will be having a LIVE ๐ด Release Party Stream later TONIGHT, (Jan 2nd, 2022) at 9 PM PT to celebrate finally getting the code live and also to answer any questions or comments anyone may have.
I'm also going to be answering questions throughout the 1st week of 2022 as I will post on several sub reddits that may find this project interesting. Today I have posted on /r/reactjs so feel free to go over there to comment.
Feature Summary
System ๐ง
File System
- File Explorer
- Back, Forward, Recent locations, Address bar
-
Drag & Drop File Support (internal & external)
- Loading progress dialog
- ZIP (write support), ZIP/ISO read support, RAR extract support
- Writes to IndexedDb
- Group selection/manipulation & drag to sort
- Dynamic and auto cached icons for music, images & video
- Context Menus
- Cut, Copy, Create shortcut, Delete, Rename
- Add file, Map directory
- Open with, Open file/folder location, Open in new window
- Download, Add to archive, Extract here, Set as wallpaper
- Sort by, New Folder, New Text Document
- Keyboard Shortcuts
- CTRL+C, CTRL+V, CTRL+X, CTRL+A, Delete
- F2, F5, Backspace, Arrows, Enter
- File information tooltips
- Allow sorting by name, date, type or extension
- Persists states
Windows
- Resizable and Draggable
- Minimize, Maximize & Close
- Persists size/position/maximized states
- Animates opening and closing
Start Menu
- Expandable Sidebar
- Apps list, Documents shortcut, Power (clears session)
- Spotlight visual effect
- Folder support
- Keyboard shortcut opens with SHIFT+ESC
Taskbar
- Peek hover preview of windows
- Focused window indicator
Clock
- Runs in a web worker
- Synced to system clock on load
- Date tooltip
Wallpaper
- Dynamic animated wallpaper
- Set via images (Fill, Fit, Stretch, Tile, Center)
URL
- Query parameter loading
- Examples:
/?url=/favicon.ico
/?app=TinyMCE
Apps ๐งช
BoxedWine (.exe, .zip)
- Runs 16/32-bit Windows applications
Browser (.htm, .html)
- Loads websites (w/HTTP header support)
- Bookmark bar
- Favicon support
- Back/Forward & Reload
- Google search via Address bar
DevTools
- Console, Elements, Network, Resources, Sources, DOM
- Activate from Start Menu or SHIFT+F12
js-dos (.exe, .jsdos, .zip)
- DOS emulator
- Automatic save states on close
- /Users/Public/Snapshots
- Automatic window resize
Monaco Editor
- Code/text editor
- Supports all file types
- Save files via CTRL+S
- Line count, cursor position, language id
-
Prettier formatting
- json, js/ts, css/sass/less, html, markdown
PDF (.pdf)
- Renders PDF's
- Page current/count & Zoom
Photos
- Supported Formats
- Fullscreen & Zoom
Ruffle (.swf, .spl)
- Flash Player emulator
Terminal
- File system support
- Autocomplete & history
- Command list via
help
- Git support (checkout & clone)
- Python support (.py)
- WebAssembly Package Manager
- Weather information
TinyMCE (.whtml)
- Read & WYSIWYG modes
- File save support
Virtual x86 (.img, .iso)
- x86 emulator
- Automatic save states on close
- /Users/Public/Snapshots
- Automatic window resize
Video Player
- Supported Formats
- Plays YouTube videos/shortcuts
Webamp (.mp3, .wsz)
- Winamp audio player
- Skin support
To Do ๐จ
ASAP
- Add custom session.json for sort orders
- File search in Terminal & File Explorer
- Status bar button to save Monaco on mobile
- PDF change page/zoom inputs
- IRC Client
Soon
- Add 96x96 icons for higher dpi devices
- Make desktop icons draggable around grid
- Window Menu Bar
- Open/Save File Dialog
- File Explorer Column View
- File Properties Dialog
- NES/SNES Emulator
- Light theme
- FFMpeg Support
- ImageMagik Support
- System Tray
Eventually
- Event Viewer
- Task Manager
- Run Dialog
- Drag/Drop Taskbar Entries
- Wapm I/O
- Terminal piping
- Virtual Assistant
- Calendar
- Spreadsheet Viewer
- Browser Tabs
- Fancy Zones
- Service Worker
Bugs ๐
General
- Initial sort order is not based on session
- Layout shifts when text is untruncated
- Closing File Manager too quickly causes memory leak
- Monaco breaks Vanta is loaded via url query
- Space Cadet loads too big if BoxedWine is loaded
Mobile
- Titlebar menu/clicking doesn't work properly when draggable
Safari Mobile
- Drag image is black
- V86 not working
- Eruda is missing titlebar
Firefox
- TinyMCE styling is reset on 2nd load
- Webamp stays in front during File Explorer drags
Thank you very much for checking out my project and please feel free to leave me feedback in whatever forum you desire. I plan to be focusing my YouTube efforts on coding and various topics about my project throughout 2022 so feel free to check those out and subscribe to my channel.
Top comments (49)
Playing Quake Arena was so fun!
Congrats!
Thank you!
๐
Nice! Looks good. I love the idea of web workers and iframes actually in certain cases. I have an iframe for the Browser app and a worker for the clock, but I don't use workers as much as I would like. I will keep improving on this hopefully.
In fact, this is mainly for the convenience of third-party developers and security considerations, because it is obviously impossible to require all application developers to use the same technology stack, and it is impossible to guarantee that third-party code can run on the same thread as the system without happening. Any problems (even malicious code). I mainly draw on the existing web-based plug-in systems such as vscode for web, figma, applets, electron, etc. They all use a multi-threaded model and provide all system APIs to the main thread.
I wrote an article before about the js sandbox attempt. At present, I have established an EventEmitter-based sandbox interface, and implemented two runtime sandboxes, web worker and quickjs virtual machine, and then implemented the system API and Added various applications to enrich the system.
blog.rxliuli.com/p/bafce41b0e68409...
Another key point of using multi-threading is performance. We may have some large applications, such as maps or 3D content. If multi-threading is not used, it is very difficult to run all functions normally without stalling. . .
Ya I also have 3rd party app support on my list of to do's. I was thinking of a type of controlled iframe with an api using post messages or a broadcast channel or something. It's fun stuff anyway. I tried to keep most of the code self contained for the existing apps.
Thanks! I will check this out. Performance is my focus for 2022 in regards to my app improvements.
Very cool!
Would theming this be possible? Is it simply done with CSS? If so, I'm interested in doing a mac theme.
Thanks! Ya you could totally theme it! I have a theme called
defaultTheme
but you could make another one with your own sizes/colors/etc. I think it would require some adjustment and moving things into the theme that I was too lazy to do, but in general it was built to support theming. I'd say 75% of the sizes/colors are centralized in one folder, the rest is inside Styled Components closer to their usage, but eventually it should all be extracted into the theme.github.com/DustinBrett/daedalOS/tr...
Nice! What if I wanted to go beyond applying theming (colors, etc) and wanted to make it more of a Mac clone? Because theming wouldn't be enough, i.e, the MS start button doesn't really align with anything Mac related; re-positioning the clock; etc.
Ya that's totally possible! You could remove the Taskbar component from the main index file (github.com/DustinBrett/daedalOS/bl...) and then make your own desktop environment components to work with existing hooks/contexts.
Thanks! Might look into this!
This is really MIND BLOWING MAN ๐ฅ๐ฅ๐ฅ๐ฅ๐ฅAMAZINGโจ
Thanks! I'm glad I blew your mind :-)
awesome job!!!
Thanks!
This is awesome
Thank you!
This is insane, good job! ๐ค๐ป
Thank you!
This is the coolest thing I have seen in a while
Thanks!
Thanks! It has a few DOS Shareware games.