98.css
98.css is a JavaScript-free CSS library that styles semantic HTML to look like the Windows 98 user interface, providing nostalgic recreations of classic widgets like windows, title bars, buttons, and form controls.
MITPermissive — free to use in commercial and proprietary software, with attribution.View license →
Production readiness
4/5- Actively maintainedSlower activity (6–12 months)
- No known vulnerabilitiesNo OSV advisories
- Clear, usable licenseMIT (permissive)
- Proven adoptionWidely used
- Has documentationDocumentation indexed
Our analysis
A single CSS file that restyles semantic HTML elements to faithfully recreate the look and feel of the Windows 98 desktop UI, with classes for windows, title bars, tabs, sliders, tree views, and other classic widgets.
When to use 98.css
Use it for hobby projects, portfolios, demos, jam games, or marketing pages that want a deliberate retro/nostalgic aesthetic. Because it's pure CSS with no JS, it drops into any frontend stack (React, Vue, vanilla, etc.) via a single stylesheet link.
When not to
Avoid it for production apps that need accessibility, responsive layouts, theming flexibility, or a modern look. It's a stylistic novelty rather than a general-purpose component framework, and the deliberately pixel-accurate retro styling fights against fluid/mobile-first design.
Strengths
- Zero JavaScript, so it's framework-agnostic and trivial to integrate
- Very small footprint and a single CSS import via unpkg
- Works on plain semantic HTML, keeping markup clean
- Strong nostalgic fidelity and part of a coordinated family (XP.css, 7.css)
- MIT licensed and welcoming to first-time contributors
Trade-offs
- Intentionally fixed retro aesthetic with little theming customization
- Not responsive or mobile-friendly by design
- Accessibility is limited compared to mature component libraries
- Interactive behavior (e.g., real tabs, draggable windows) requires your own JS
- Narrow use case — essentially a styling gimmick, not a productivity toolkit
Maturity
A popular and well-known project (11k+ stars) that is feature-complete and stable rather than rapidly evolving. It's a small, single-maintainer hobby project with modest ongoing development, suitable for casual use but not backed by an organization.
98.css
A design system for building faithful recreations of old UIs.
98.css is a CSS file that takes semantic HTML and makes it look pretty. It does not ship with any JavaScript, so it is compatible with your frontend framework of choice.
Be sure to check out XP.css and 7.css as well.
Installation / Usage
The easiest way to use 98.css is to import it from unpkg.
<!DOCTYPE html>
<html>
<head>
<title>98.css example</title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="https://unpkg.com/98.css" />
</head>
<body>
<div class="window" style="margin: 32px; width: 250px">
<div class="title-bar">
<div class="title-bar-text">
My First VB4 Program
</div>
</div>
<div class="window-body">
<p>Hello, world!</p>
</div>
</div>
</body>
</html>
Alternatively, you can grab 98.css for the releases page or npm.
npm install 98.css
Here is an example of 98.css being used with React, and an example with vanilla JavaScript.
Refer to the documentation page for specific instructions on this library's components.
Developing
First, run npm install.
style.css is where everything happens.
You can use npm start to start a development environment that will watch for file changes and rebuild 98.css, reloading your browser in the process.
You can run a build manually with npm run build. This will write to the dist/ directory.
Issues, Contributing, etc.
Refer to the GitHub issues page to see bugs in my CSS or report new ones. I'd really like to see your pull requests (especially those new to open-source!) and will happily provide code review. 98.css is a fun, silly project and I'd like to make it a fun place to build your open-source muscle.
Thank you for checking my little project out, I hope it brought you some joy today. Consider starring/following along on GitHub and maybe reading my posts on Bluesky. 👋
Publishing
Building the docs site: npm run deploy:docs
Publishing to npm: npm run release