I built a browser-based desktop environment (IP Linux) with React, TypeScript and Vite

작성자

카테고리:

← 피드로
DEV Community · IKER PEREZ · 2026-06-16 개발(SW)

IKER PEREZ

I built a browser-based desktop environment (IP Linux) with React, TypeScript and Vite

I have been working on a project called IP Linux: a browser-based desktop environment that runs as a static web app.

It is not a real Linux distribution, and it does not run native binaries. The idea is different: I wanted to explore how far a polished desktop-like experience can go inside a normal browser tab.

The result is a small web OS-style environment with:

  • A splash / entry screen
  • A desktop with icons, folders, and widgets
  • A top panel with system controls
  • A dock and app launcher
  • Resizable and draggable windows
  • Virtual workspaces
  • Snap assist
  • A global search / Spotlight-style command palette
  • Local-first apps (Files, Terminal, settings, player)
  • Reactive wallpapers
  • Glass UI and visual effects

Why I built it

Most web demos are landing pages, dashboards, or small single-purpose apps. I wanted to build something that feels more like an environment.

I was interested in questions like:

  • Can a web app feel physical and desktop-like?
  • How should windows behave inside a browser viewport?
  • How far can local-first storage go before a backend is actually needed?
  • How do you organize many small apps without making the UI messy?

IP Linux became a way to test all of that in one project.

The app includes a catalog of built-in apps and tools: Files, Terminal, Browser, Settings, App Store, Music Player, Matrix Rain, games, developer tools, productivity apps, and visual utilities. The virtual file system and user preferences are stored locally in the visitor’s browser with IndexedDB/localStorage. There is no backend, no account system, and no required environment variables for the public release.

Would love to get feedback on the interaction design, responsiveness, or features!

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다