Skip to content

jasondaemon/DaemonOS

Repository files navigation

DaemonOS

DaemonOS is a playful, browser‑based “operating system” interface. It’s built as a fun experiment in UI/UX, app modularity, and safe client‑side execution. There is no server‑side code and no interpreted user input — everything runs locally in the user’s browser. A live demo is available at https://daemonos.jasondaemon.net, but the live version may change multiple times per day and some features can be broken (Pinball included).

DaemonOS Screenshot

Purpose

  • A creative playground for desktop‑style UI experiments
  • A lightweight app shell for browser‑native “apps”
  • A static, client‑only deployment that minimizes attack surface

License

DaemonOS is licensed under the GNU General Public License v3.0 (GPL‑3.0). See LICENSE. Asset licensing notes are in ASSETS_LICENSES.md.

Highlights

  • Games: Paddle Duel, Minesweeper, Road Hopper, Pinball (Planck.js), Racecar, Chess, Checkers, 4 'n' a Row, Snake, Space Rocks!, Space Defender, Spacefighter.
  • Music Player: Winamp‑inspired playback with playlists and multiple visualizer modes.
  • Screensavers: Starfield, Aurora Lines, Matrix code rain, and Flying Toasters.
  • System Monitor: top‑bar memory/pressure widget with per‑app suspend controls.
  • Desktop OS UX: dock with tray launchers, menu bar with volume + fullscreen, window management, and theming.

Architecture (High‑Level)

  • Static front‑end served by Nginx (containerized)
  • OS shell in site/os.js manages windows, dock, menus, settings, and app loading
  • Apps are modular JS entrypoints defined in site/apps/registry.json
  • Lazy loading uses dynamic import() so apps load only when opened

Key directories:

  • site/index.html — shell UI and CSP
  • site/styles.css — visual system
  • site/os.js — runtime, window manager, menus
  • site/apps/registry.json — app registry
  • site/apps/** — app entrypoints

Security Model

DaemonOS is intentionally conservative:

  • Client‑side only: no backend execution, no server‑side rendering, no proxying
  • Strict CSP in site/index.html to limit script origins
  • No eval / interpreted user input in core app system
  • Iframe sandbox for the browser app (local pages only; external links open in new tabs)
  • Read‑only container with dropped Linux capabilities
  • No privileged operations; Nginx runs with restricted permissions

These controls keep the attack surface small while still enabling a rich UI.

Running

From the repo root:

docker compose up

By default the container serves ./site.

Custom Apps

Add apps by:

  1. Creating an entrypoint under site/apps/<category>/<app>/<app>.js
  2. Registering it in site/apps/registry.json

Apps should export createApp(osAPI) and return a window payload:

export function createApp(osAPI) {
  return {
    title: "My App",
    width: 500,
    height: 350,
    content: document.createElement("div"),
  };
}

Screensavers & Media

  • Screensaver behavior is configurable in Settings (enable, timeout, style).
  • Global volume control in the menu bar affects all app audio.
  • Music playlists are defined by site/media/music/playlist.json (Suno-generated tracks by default; you can add more).

System Monitor

  • The top‑bar widget provides estimated memory pressure and per‑app controls.
  • Details and integration guide: docs/system-monitor.md.

Third‑Party Notices

Third‑party components and their licenses are listed in THIRD_PARTY_LICENSES.md.

Notes

This is a hobby project and an experiment. Expect rapid iteration, playful UI changes, and occasional breaking changes. Legal notice: see LEGAL.md.

About

Just a for fun web interface that works like an OS with apps.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors