A KDE Plasma desktop that lives in a browser tab. Real window manager, working terminal, actual apps that do things.
Important
Not affiliated with KDE or KDE e.V.
Everyone builds another todo app. I wanted to prove I could build something genuinely complex without it turning into a form with a database behind it — so I built an entire desktop environment instead. Dragging windows, z-order, focus management, a shell that parses commands. Make it weird, make it stick.
A browser-based Plasma clone built with Svelte 5 and TypeScript. Windows drag, resize, and minimize, and stack in the right order. Apps launch from a searchable launcher. There's a terminal that actually runs commands instead of printing canned strings.
- 🪟 Drag, resize, minimize — full window lifecycle, with edge and corner handles
- 📐 Z-order management — clicking a window raises it above the rest
- 🎯 Focus tracking — only one window is focused at a time, and the panel reflects it
- 🔄 State syncing — Svelte reactivity propagates every change, no manual DOM juggling
| App | What It Actually Does |
|---|---|
| Info Center | System info, your profile, skill breakdown |
| Dolphin | Browses your GitHub repos via the API, with a preview pane |
| Konsole | A real terminal — see the command table below |
| System Settings | Themes, wallpaper, animation speed, click behavior |
Not a fake. Commands are real modules registered through import.meta.glob, with argument parsing, aliases, and proper exit codes.
| Command | Aliases | What It Does |
|---|---|---|
help |
— | List commands, or help <cmd> for detail |
fastfetch |
neofetch |
System summary — also opens Info Center |
uname |
— | Kernel and host information |
whoami |
— | Current user |
jsh |
node, deno |
JavaScript REPL — evaluates JS in the browser |
vim |
vi, nvim |
Text editor |
sudo |
— | Run a command as another user |
echo |
— | Write arguments to output |
clear |
— | Clear the screen |
exit |
— | End the session |
- 🎨 Catppuccin themes — Latte, Mocha, or Automatic (follows your system preference)
- 🖼️ Custom wallpaper — upload any image, persisted in IndexedDB
- 🔍 Searchable launcher — filter apps by name or description as you type
- 🔒 Lock screen — clock and a password field
- ⚡ Animation speed — scale it from instant to full, or let it be
- ♿ Accessibility — ARIA roles, focus-visible indicators, keyboard navigation, and full
prefers-reduced-motionsupport - 🔒 Persistence — theme, wallpaper, and preferences survive reloads
- ✅ CI on every PR —
svelte-check+tsc, ESLint, and a production build - 🧹 Zero ESLint warnings — typescript-eslint with
svelte-eslint-parser
Requires pnpm and Node 22+.
git clone https://github.com/thetommylong/portfolio
cd portfolio
pnpm install
pnpm devBuild for production:
pnpm build- Boot it — the lock screen takes any password
- Launch things — click the Plasma logo in the panel to toggle the launcher
- Open apps — type to filter, arrow keys to select,
Enterto launch - Play with the terminal — Konsole's
jshcommand will evaluate any JavaScript you throw at it
Yes,
jshreally doesevalyour input, in your own browser, on your own machine. That's the point of a REPL.
Everything lives in System Settings and persists to localStorage:
- Theme — Latte, Mocha, or Automatic
- Wallpaper — any image, stored in IndexedDB
- Animation scale —
0(instant) through2(full) - Click behavior — single-click to select vs. double-click to open
- Not mobile. It's a desktop environment. It works in a phone browser, but that's not the point.
- The lock screen is cosmetic. Any password unlocks it. There's no auth here.
- No window snapping. Deliberate — it was more work than it was worth.
- Dolphin hits the GitHub API. Rate-limited without a token, and cached for 24 hours to soften it.
- No window layout persistence. Windows reset on reload. Only preferences stick.
- Animations may stutter on weak hardware.
- The terminal is a simulation.
jshruns in your browser, not a real shell. Nothing touches your machine.
It's a Plasma clone in a browser tab with four apps and a terminal that fakes being a terminal. The window manager is the only part that would survive contact with a real product.
If you need a real desktop environment, install KDE Plasma. This is a portfolio piece, not a replacement.
- Code: GPL-3.0-only
- Icons: KDE Breeze — LGPL-3.0-only, see LICENSES/LGPL-v3+.txt
KDE® and K Desktop Environment® are registered trademarks of KDE e.V.
Issues and PRs welcome. See AGENTS.md for agent setup and docs/agents/ for the issue tracker and domain docs.