In-Browser-Desktop
← Project Index In-Browser-Desktop

In-Browser-Desktop

A portable desktop that lives in your browser -; log in and get an OS-style desktop with draggable windows, a dock, a file system, and built-in apps, all client-side and persistent between sessions.

Exploring Started: 2026 Updated: Jun 2026

Overview

A little classic-Mac-style desktop that follows you from machine to machine. You boot it, log in, and land on a desktop with draggable and resizable windows, a dock, desktop icons you can rearrange, right-click menus, and a real Trash with restore. Create files, organize them in folders, doodle, take notes, play a game -; and find it all waiting the next time you open it.

To be clear about what it is: it's not a real OS, and it doesn't run other programs inside itself. Think of it as sitting down at a tidy little desktop, not booting Linux in a tab.

Background

This is the personal MVP -; local-first and single-user. A school edition (multi-user, cloud-synced, SSO) is planned as a later version, and the code is deliberately structured so that swap stays clean. The roadmap lives in the repo's PLAN.md.

How It Works

Everything runs client-side -; nothing leaves your browser, and because there's no server the whole app is just static files that host anywhere. It's built with React 19 and TypeScript on Vite, with react-rnd for the draggable/resizable windows, Zustand for state, and Tailwind for styling.

Persistence is split by what kind of data it is: your files live in the browser's IndexedDB (via Dexie), and desktop state -; open windows, icon positions, theme, notes, links, your login -; lives in localStorage.

  • Apps: TextEdit, a flip-through Note Pad, Paint, an image viewer, Calculator, a Launcher for external links, Appearance, and About.
  • Games: Solitaire, Minesweeper, Tetris, and SkiFree.
  • Files: a Finder-style Files app -; create, rename, trash, navigate; import .txt / .md / images and download them back.
  • Themes: three looks (Sandstone, Dusk, Mint), each with light & dark mode, switchable live.