Top Related Projects
A design system for building faithful recreations of old UIs
💩🚀 Windows 95 in Electron. Runs on macOS, Linux, and Windows.
🏁 Web based Windows XP desktop recreation.
A CSS framework for building faithful recreations of operating system GUIs.
Websites, web apps, portfolios which look like desktop operating systems
The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.
Quick Overview
98 is a web-based recreation of the Windows 98 operating system. It aims to provide a nostalgic experience by emulating the look, feel, and functionality of the classic OS in a modern web browser. The project includes various system components, applications, and games that were iconic to the Windows 98 era.
Pros
- Offers a faithful recreation of the Windows 98 user interface and experience
- Runs entirely in the browser, making it accessible across different platforms
- Includes a variety of classic applications and games from the Windows 98 era
- Open-source project, allowing for community contributions and improvements
Cons
- May not include all features and applications from the original Windows 98
- Performance can vary depending on the user's browser and hardware
- Some applications or features may not function exactly as they did in the original OS
- Legal concerns regarding the use of Microsoft's intellectual property
Getting Started
To run the 98 project locally:
-
Clone the repository:
git clone https://github.com/1j01/98.git
-
Navigate to the project directory:
cd 98
-
Open the
index.html
file in a web browser to launch the Windows 98 experience.
Alternatively, you can visit the live demo at https://98.js.org to experience the project without local setup.
Note: This project is not a code library, so there are no code examples or specific installation instructions beyond running it in a web browser.
Competitor Comparisons
A design system for building faithful recreations of old UIs
Pros of 98.css
- Focused solely on CSS styling, making it more lightweight and easier to integrate into existing projects
- Provides a comprehensive set of CSS classes for recreating Windows 98 UI elements
- Well-documented with examples and usage instructions
Cons of 98.css
- Limited to static styling without interactive functionality
- Lacks a complete Windows 98-like environment or application simulation
- Requires more manual HTML structure to create complex UI layouts
Code Comparison
98.css:
.window {
box-shadow: inset -1px -1px #0a0a0a, inset 1px 1px #dfdfdf, inset -2px -2px grey, inset 2px 2px #fff;
background: silver;
padding: 3px;
}
98:
function paintDesktop() {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
// ... (code to draw desktop background)
document.body.appendChild(canvas);
}
The code snippets highlight the different approaches: 98.css focuses on pure CSS styling, while 98 uses JavaScript to create a more interactive environment.
💩🚀 Windows 95 in Electron. Runs on macOS, Linux, and Windows.
Pros of Windows95
- Offers a complete Windows 95 experience, including the boot sequence and system utilities
- Provides cross-platform compatibility (Windows, macOS, Linux)
- Includes networking capabilities and internet access
Cons of Windows95
- Larger file size and resource requirements
- Less focus on web technologies and modern browser integration
- More complex setup process compared to 98
Code Comparison
Windows95:
const { app, BrowserWindow } = require('electron')
const path = require('path')
const url = require('url')
function createWindow () {
win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
}
98:
const electron = require('electron');
const {app, BrowserWindow} = electron;
const path = require('path');
function createWindow() {
win = new BrowserWindow({
width: 800,
height: 600,
title: '98',
icon: path.join(__dirname, 'images/icons/win98.png'),
});
win.loadURL(`file://${__dirname}/index.html`);
}
Both projects use Electron to create desktop applications, but Windows95 uses a more verbose URL formatting approach, while 98 uses a template literal for loading the HTML file.
🏁 Web based Windows XP desktop recreation.
Pros of winXP
- More comprehensive Windows XP experience with multiple applications and features
- Includes a functional start menu and taskbar
- Better visual fidelity to the original Windows XP interface
Cons of winXP
- Less focus on customization and extensibility
- May have higher resource requirements due to more complex interface
Code Comparison
winXP:
const StartMenu = ({ toggleStartMenu, showStartMenu }) => (
<div className={`start-menu ${showStartMenu ? 'active' : ''}`}>
<div className="start-menu-header">
<img src={xpUserIcon} alt="user" className="start-menu-header__user-icon" />
<span className="start-menu-header__user-name">User</span>
</div>
// ... more code
</div>
);
98:
function Start() {
return html`
<button
class="start-button"
onmousedown=${e => e.preventDefault()}
onclick=${() => start_menu.toggle()}
>
<img src="images/start.png" width="30" height="30" alt="Start">
Start
</button>
`;
}
Both projects aim to recreate classic Windows experiences in the browser, with winXP focusing on a more complete Windows XP simulation, while 98 offers a simpler Windows 98-style interface with potential for customization. The code snippets show different approaches to implementing the Start menu, with winXP using React components and 98 using a custom HTML templating system.
A CSS framework for building faithful recreations of operating system GUIs.
Pros of XP.css
- Focuses specifically on Windows XP styling, providing a more authentic XP look
- Offers a wider range of XP-specific UI components and controls
- Easier to integrate into existing projects as a standalone CSS file
Cons of XP.css
- Limited to Windows XP aesthetics, less versatile for other Windows versions
- Lacks the interactive elements and JavaScript functionality found in 98
- Does not provide a full operating system simulation experience
Code Comparison
98:
.window {
background: #c0c0c0;
border: 1px solid #000000;
box-shadow: inset -1px -1px #0a0a0a, inset 1px 1px #dfdfdf, inset -2px -2px grey, inset 2px 2px #fff;
}
XP.css:
.xp_dialog {
background: #ECE9D8;
border: 1px solid #003C74;
box-shadow: inset 1px 1px 0 #ffffff, inset -1px -1px 0 #7f7f7f, 1px 1px 0 rgba(0,60,116,0.5);
}
Both projects aim to recreate classic Windows aesthetics, but 98 provides a more comprehensive Windows 98 experience with interactive elements and a simulated OS environment. XP.css, on the other hand, focuses solely on replicating the Windows XP visual style through CSS, making it more suitable for quickly adding XP-like UI elements to web projects without additional functionality.
Websites, web apps, portfolios which look like desktop operating systems
Pros of awesome-web-desktops
- Comprehensive collection of web-based desktop environments
- Regularly updated with new additions
- Includes a wide variety of styles and implementations
Cons of awesome-web-desktops
- Not a functional desktop environment itself
- Lacks the depth and interactivity of a single, fully-developed project
- May include outdated or non-maintained projects
Code comparison
While a direct code comparison isn't relevant due to the nature of the projects, we can compare a typical entry in awesome-web-desktops to a component in 98:
awesome-web-desktops:
- [Windows 98 JS](https://github.com/1j01/98) - Windows 98 desktop recreation in JS/HTML.
98:
class WindowManager extends EventEmitter {
constructor() {
super();
this.windows = [];
this.focusedWindow = null;
}
// ... more code ...
}
The awesome-web-desktops project is a curated list, while 98 is a full implementation of a Windows 98-like environment. awesome-web-desktops serves as a directory of projects like 98, whereas 98 itself is a functional web-based desktop environment with interactive elements and a more complex codebase.
The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.
Pros of Monkeytype
- More active development with frequent updates and contributions
- Focused on a specific, popular use case (typing practice)
- Larger community and user base
Cons of Monkeytype
- Less nostalgic appeal compared to 98's Windows 98 emulation
- More complex codebase due to its extensive features
- Requires more resources to run effectively
Code Comparison
98:
function startMenu() {
const startMenu = document.createElement("div");
startMenu.classList.add("start-menu");
// ... (simplified for brevity)
}
Monkeytype:
export function updateTestWords(
testWords: string[],
wordIndex: number
): void {
// ... (simplified for brevity)
}
Summary
98 offers a nostalgic Windows 98 experience, while Monkeytype provides a modern typing practice tool. 98 has a simpler codebase focused on emulation, whereas Monkeytype has a more complex structure supporting various typing test features. Both projects serve different purposes and cater to distinct user preferences.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
98.js
A web based Windows 98 desktop remake.
Includes:
- Notepad (separate README)
- Sound Recorder (separate README)
- Paint (separate repository)
- Calculator (separate README)
- 3D Pipes (separate repository)
- 3D FlowerBox (original repository) by Kevin Shannon
- Minesweeper (separate README; original repository) by Jon Ziebell
- Solitaire (original repository) by Radovan Janjic
- Pinball (original repository) ported by Muzychenko Andrey and Alula
- Winamp 2.9 (separate README; original repository) by Jordan Eldredge
- Windows Explorer / Internet Explorer (separate README)
- Help Viewer
- ð Clippy (original repository)
Features:
- Drop files onto the desktop, and they'll be stored in a virtual filesystem
- Load Windows themes! Many are included in the Themes folder on the desktop.
- Easter eggs (try a famous cheat code ð)
- Meticulous detail in many areas (although there's obviously lots "missing")
- Help > Help Topics in Paint, Sound Recorder, Notepad, and Minesweeper
- You can add the site to your homescreen on mobile
Try it out
ENTERããWINDOWSãï¼ï¼ãä½é¨ã¸ãããã
License
Not yet licensed. This project is currently source-available / shared source, but not open source.
Related Projects
Apps that it would be nice to integrate:
Other online operating systems / web desktops:
Name & Link | Vague Description | Repo & License | Chat |
---|---|---|---|
Rahul.io | another Windows 98 remake | repo here - MIT license | |
Windows 93 | a "fictional version of Windows" | (not open source currently) | Discord |
ð¡ ZineOS | emojis everywhere | repo here - MIT license | Discord |
EmuOS | emulator-focused Win9X desktop | repo here - shared source | Discord |
OS.js | a more serious web desktop | repo here - simplified BSD license | Gitter |
Friend | another serious one | repo here - different licenses for different parts | |
CloudDesk | another serious one | (explicitly not open source) | |
AaronOS | interesting aesthetic | repo here - shared source | Discord |
Web Desktop | Windows 10 like "startpage" | ||
System | Windows 10 like thing | ||
WinXP | Windows XP | repo here - MIT license | |
Windows 98 - Packard Belle | Windows 98 | repo here - shared source | |
X-WebDesktop-Vue | Windows 7 | repo here - MIT license | |
vue win3.1 | Windows 3.1 | repo here - shared source | |
VirtualDesktop | Screenshot flows, several OSes | ||
GUIdebook | Screenshots, several OSes |
Plus many more web desktops on Wikipedia, awesome-web-desktops, and awesome-OS.
Libraries:
- OS-GUI, which grew out of this project
- Packard Belle, React95, and another one called React95, with similar goals to OS-GUI
- BrowserFS, a filesystem abstraction library powering 98.js
Also:
- Awesome Atwood's Law, a curated list of JavaScript reimplementations, similar to /r/atwoodslaw/
Contributing
See CONTRIBUTING
Development Setup
- Install Git if you don't already have it.
- Install Node.js if you don't already have it.
- Clone the repository.
- Open up a terminal / command prompt in the project directory, and run
npm install
to install dependencies. - Install one global dependency:
npm i -g browserfs@2.0.0
(this will be simplified in the future; I'm using two different versions of BrowserFS for some reason) - Run
npm start
to start up a live-reloading development web server.
When pulling changes from git, run npm install
again in case there are any new or updated dependencies.
(If you know package-lock.json
hasn't changed, you shouldn't need to do this.)
Some dependencies are versioned with npm, but pulled into the repo with npm run pull-libs
Quality Assurance
Tests are written with Playwright. Spell checking is done with Cspell.
npm test
npm run lint
Debug tests or run them when code changes using the Playwright UI:
npx playwright test --ui
Quickly add tests using the code generator:
# Note: this runs the server, and currently leaves it running when closing the browser.
# Could use `start-server-and-test` to fix this, or see if there's an option in `npm-run-all`'s `run-p` command.
# (There's no option in `playwright codegen --help` to run the server, even though it's configured in `playwright.config.js`)
npm run test-codegen
There are also VS Code extensions for Playwright and Cspell (Code Spell Checker).
Managing Subrepos
To update subrepos, or push changes to them, install git-subrepo. You don't need this tool to clone the project and get up and running, as subrepos are just normal subdirectories with a .gitrepo
metadata file.
Note that the metadata file references specific commit hashes, including between repositories, so it's best to avoid rebasing when subrepo updates are involved, i.e. once you do a subrepo command, it makes a commit, and you should leave it (and earlier commits) alone, and you should leave commits in the subrepo alone, before and up to any commits referenced by the containing project.
When making changes to a subrepo within the containing project: I'd recommend phrasing commit messages to apply to the subrepo, primarily, rather than the containing project, so that when you push the changes to the subrepo, the commit message will be appropriate.
If you so much as edit the commit message for a git subrepo push
ed commit, you'd have to update the .gitrepo
metadata file manually in the containing project,
OR you could drop the commit you pushed and the git subrepo push
commit (which updates the metadata) and do git subrepo pull
instead (which btw gives you an option to rename the commit; and I think renaming that commit would be safe after the fact anyways as long as it's the last commit and not pushed).
TODO
See TODO
Top Related Projects
A design system for building faithful recreations of old UIs
💩🚀 Windows 95 in Electron. Runs on macOS, Linux, and Windows.
🏁 Web based Windows XP desktop recreation.
A CSS framework for building faithful recreations of operating system GUIs.
Websites, web apps, portfolios which look like desktop operating systems
The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot