Convert Figma logo to code with AI

1j01 logo98

💿 Web-based Windows 98 desktop recreation █████▓█▓▓▒▓▒▒░▒░░░🗕︎🗗︎🗙︎

1,135
184
1,135
51

Top Related Projects

9,000

A design system for building faithful recreations of old UIs

22,240

💩🚀 Windows 95 in Electron. Runs on macOS, Linux, and Windows.

5,489

🏁 Web based Windows XP desktop recreation.

2,205

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:

  1. Clone the repository:

    git clone https://github.com/1j01/98.git
    
  2. Navigate to the project directory:

    cd 98
    
  3. 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

9,000

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.

22,240

💩🚀 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.

5,489

🏁 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.

2,205

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

98.js

Discord GitHub Repo stars

A web based Windows 98 desktop remake.

Includes:

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 98 体験へようこそ

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 & LinkVague DescriptionRepo & LicenseChat
 Rahul.ioanother Windows 98 remakerepo here - MIT license
 Windows 93a "fictional version of Windows"(not open source currently)Discord
🏡 ZineOSemojis everywhererepo here - MIT licenseDiscord
 EmuOSemulator-focused Win9X desktoprepo here - shared sourceDiscord
 OS.jsa more serious web desktoprepo here - simplified BSD licenseGitter
 Friendanother serious onerepo here - different licenses for different parts
 CloudDeskanother serious one(explicitly not open source)
 AaronOSinteresting aestheticrepo here - shared sourceDiscord
 Web DesktopWindows 10 like "startpage"
 SystemWindows 10 like thing
 WinXPWindows XPrepo here - MIT license
Windows 98 - Packard BelleWindows 98repo here - shared source
X-WebDesktop-VueWindows 7repo here - MIT license
 vue win3.1Windows 3.1repo here - shared source
 VirtualDesktopScreenshot flows, several OSes
GUIdebookScreenshots, several OSes

Plus many more web desktops on Wikipedia, awesome-web-desktops, and awesome-OS.

Libraries:

Also:

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 pushed 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