Windows 98 interface style implemented with XP.css (a fork of 98.css)
jekyll-98 — Jekyll Blog Template
By queenkjuul
A Jekyll blog theme based on XP.css that presents post lists, category pages, and social links in a Windows 98 interface style.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Almost no JavaScript; usable without scripts
Built-in pagination, Atom feed, social links, and category index pages
The repository itself is a runnable Jekyll site that can be cloned or forked directly
Supports both gem theme and jekyll-remote-theme integration
Post lists can be rendered as an Explorer-style tree using {:.tree-view}
Template Details
jekyll-98 is a Jekyll blog theme whose visual style comes from XP.css, a fork of 98.css, aiming to recreate the Windows 98 look in a mobile-friendly blog format. The theme uses almost no JavaScript, and the README states it should work even with scripts disabled.
The theme includes pagination, Atom feed generation, social link display, and index pages generated by category. The repository itself is a runnable Jekyll site that can be cloned or forked, then configured, populated with posts, and deployed; it also supports use as a gem theme or via jekyll-remote-theme in an existing site.
There are several explicit limitations: category index pages depend on GitHub Actions deployment, and using GitHub Pages' legacy "deploy from branch" method will cause desktop_categories and show_categories links to point to 404s; desktop icons and start menu items should total no more than 5–7, otherwise the layout becomes strange; if the first line of a post repeats the title, the title will appear twice because the post layout already includes a title header.
Is it right for your project?
Use Cases
- Building a personal blog with a retro Windows 98 interface
- Changing the theme appearance of an existing Jekyll site via remote_theme
- Organizing and browsing posts by topic with category index pages
- Deploying a static blog on GitHub Pages via GitHub Actions
Suitable For
- Individual authors who write blogs with Jekyll and want a retro desktop style
- Users willing to configure site information, categories, and social links via _config.yml
- GitHub Pages users who accept deployment via GitHub Actions rather than deploy from branch
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Quick start: after git clone, run bundle, preview with bundle exec jekyll serve, and build with bundle exec jekyll build.
- 2
To install as a gem theme: bundle add jekyll-98 and set theme: jekyll-98 in _config.yml.
- 3
When using remote_theme, provide _config.yml at the root of the deployment branch and specify layout: post for files such as README.
- 4
If you do not customize social links, set github, youtube, and twitch under jekyll-98.social_links to false in _config.yml; otherwise the theme author's social accounts will be displayed.
- 5
Category index pages require deployment via GitHub Actions; if you continue using deploy from branch, disable desktop_categories and show_categories.
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version of the public repository under the MIT license; the free scope applies to that version's code and does not imply that external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and liability limitations are governed by the original license and applicable law.
Additional costs & items to verify
- Category link functionality depends on GitHub Actions deployment; if using GitHub Pages' deploy from branch method, links generated by show_categories and desktop_categories will point to 404s, so you must switch to GitHub Actions or disable these features.
- If you do not configure social links yourself, the theme author's social accounts will be displayed on your site by default; set github, youtube, and twitch under jekyll-98.social_links to false in _config.yml to remove them.
- When desktop icons and start menu items total more than 5–7, the layout becomes abnormal, so the number of desktop_categories and site_links must be controlled.
- If the first line of a post repeats the title, it will be displayed twice alongside the title header included in the post layout; avoid using a heading on the first line.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; do not judge them solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur separate charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
show_categories: true # show category links in post lists - REQUIRES GITHUB ACTIONS TO WORK WITH GITHUB PAGES, SEE README
Original README
Otherwise, my own socials will appear on your site :cringe:
Original README
Note that things might get weird layout wise if you have more than 5-7 desktop icons total
Original README
https://github.com/queenkjuul/jekyll-98/blob/main/LICENSE.txthttps://github.com/queenkjuul/jekyll-98/blob/main/README.mdif the first line of your post is a header containing the title, the title will appear twice
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 77 / 100
- Technologies
- Jekyll
- Website type
- Blog
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2025-01-02
- Screenshot last checked
- 2026-10-02
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Jekyll as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: e5d9510f0283569c0526154a5513c56466d77352040e8a407de173da4cc3a1e6
2026-10-02T10:58:52.652Z
Source file / repository# jekyll-98
[***See it in action right here!***](https://queenkjuul.github.io/jekyll-98/)
A theme for Jekyll built using the [XP.css](https://github.com/botoxparty/XP.css) fork of [98.css](https://github.com/jdan/98.css) which aims to recreate the aesthetics of Windows 98 in a mobile-friendly, customizable blog format.
*Almost* no JavaScript, but should be perfectly usable without. Ships with pagination, atom feed generation, automatic social media links, and per-category index pages out of the box.

## Installation
### Quick Start
This repo is actually a fully functional jekyll site! You can clone or fork this repo, update the config with your own values, add some posts, et voila! You have a website ready to be hosted with Github Pages or built and served on your own host.
If you use this repo as a base, make sure your GitHub Repo > Settings > Pages > Source is set to "GitHub Actions." The `main` branch is deployed by default. Edit `.github/workflows/jekyll.yml` to change branches. [See note below about GitHub Actions](#github-pages--jekyll-remote-theme)
```sh
git clone https://github.com/queenkjuul/jekyll-98
cd jekyll-98
bundle
bundle exec jekyll serve # preview
bundle exec jekyll build # build
```
### GitHub Pages / jekyll-remote-theme
In your site's _config.yml, add:
```yml
remote_theme: queenkjuul/jekyll-98
```
You will need a `_config.yml` file in the root of your deployment branch as well. All it needs to contain is:
```yaml
defaults:
- scope:
path: "" # an empty string here means all files in the project
values:
layout: "post"
```
Without this, your README.md file will not use any particular layout, and will just render plain text onto an empty desktop. For a more complete example, see [here](https://github.com/queenkjuul/spotify97/blob/main/_config.yml)
If you are not adding your own social media links to `_config.yml` then you will also need to add this:
```yaml
jekyll-98:
social_links:
github: false
youtube: false
twitch: false
```
Otherwise, my own socials will appear on your site :cringe: (if anyone knows a better way to override these by default let me know)
#### GitHub Pages Deployment
**NOTE:** the "deploy from branch (classic)" GitHub Pages deployment method FAILS to generate category index pages. However, the default Jekyll GitHub Action works. [See instructions from GitHub here and set up your site's repo to publish with the default Jekyll workflow](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow).
Using the legacy "deploy from branch" option will not break the site, but it will break the [`desktop_categories`](#theme-settings) and [`show_categories`](#settings) functions. If they are left enabled, the site will build and deploy, but those links will lead to 404s, so it's best to disable them.
### Manual installation
`jekyll-98` is now available as a standard `gem` theme. You can install it to your site with `bundle add jekyll-98` and add this line to your Jekyll site's `_config.yml`:
```yaml
theme: jekyll-98
```
## Usage
Theme should provide sane defaults, but there's lots to customize. For full configuration options, refer to [_config.yml](https://github.com/queenkjuul/jekyll-98/blob/main/_config.yml). Add whatever settings you want *to your site's _config.yml*.
### Posts
#### Titles and excerpts
The default Post layout includes a header containing the post title as defined in the front matter. This means that if the first line of your post is a header containing the title, the title will appear twice. Keep this in mind. Also, Jekyll will by default use the first block of your post as its excerpt, so it's best to avoid first-line headers. You can always define an excerpt explicitly in the front matter like so:
```yml
---
title: Post Title
excerpt: this is what will show on the home page (if show_excerpts is enabled)
---
```
#### List formatting
If you add `{:.tree-view}` before your bulleted lists, they will render in Windows Explorer-style tree view mode. I'd like to do this automatically, but I don't know how to apply a class automatically to the kramdown/jekyll output. If you know how, get in touch! Open an issue, raise a PR, or (please don't really) email me.
Example:
```md
{:.tree-view}
- First Item
- Second Item
- Third Item
```
{:.tree-view}
- First Item
- Second Item
- Third Item
#### Front matter
You will want to define the following in your posts' front matter:
- Required:
- `title: string` - as mentioned above, will be displayed as a top-level header in the post page layout, as well as in lists
- `layout: post` - you probably want to leave this
- `date: YYYY-MM-DD HH:MM:SS +/-0000` - time zone offset at end. Only for internal use, actual formatted date shown to users is formatted per `jekyll-98.date_format` in `_config.yml`
- Optional
- `categories: string1 string2 ...` - space-separated list of post categories. Posts can be browsed by category with links on the homepage. Uses [jekyll-category-pages](https://github.com/field-theory/jekyll-category-pages).
- `icon: icon_string` - `icon_string` is the filename of any icon in the jekyll-98 `assets/icons` folder, minus the extension (so omit `.png`). Optional. Unfortunately for now, can't be automatically set by category. Will appear in any post list.
- `excerpt: string` - excerpt to be shown in post lists if excerpts is enabled in `_config.yml`. If not defined, jekyll will use the first paragraph of your post.
## Configuration
### Basic site info
```yaml
title: blog name
author: # ***PUBLIC BY DEFAULT!***
name: &name your name # need &name prefix for Contact page to work
email: &email [email protected] # need &email prefix for Contact page
description: what's the deal with websites?
```
Basic Jekyll/Pages info from the template, such as title, author, and description. Author is a parent node, with child nodes name and email. Site title is used everywhere. Description appears on Home and About pages. Author info only shows up (optionally) on the Contact page. `title`, `author`, and `description` should be defined at the root level of your `_config.yml`
### Settings
```yaml
show_excerpts: false # show post excerpts in post lists
show_categories: true # show category links in post lists - REQUIRES GITHUB ACTIONS TO WORK WITH GITHUB PAGES, SEE README
paginate: 3 # set to false to disable, numbers above 3 might be weird on mobile
paginate_path: /page/:num # change if you know what you're doing
google_analytics: asdf1234 # your google analytics key
```
Enabling excerpts will show the first bit of a post on the home page. This can be a little unreliable with the layout of the posts list, so either disable (default) or experiment. You can define an explicit excerpt (instead of letting Jekyll guess) by defining `excerpt` in the post's front matter (see [Posts](#posts))
`show_categories` is NOT compatible with the default "deploy from a branch" GitHub Pages deployment method. Instead, [use a GitHub Action](#github-pages-deployment)
### Theme settings
Theme settings are defined within the `jekyll-98` node of your _config.yml
```yaml
title: ...
author: ...
...
jekyll-98:
date_format: ...
...
```
#### `date_format`
change how timestamps are shown - refer to [https://shopify.github.io/liquid/filters/date/](https://shopify.github.io/liquid/filters/date/) if you want to customize this
#### `icon`
you can define a different icon to use for the "my computer" homepage icon on the desktop here.
#### `desktop_categories`
Categories defined in this array will generate desktop icons and start menu links, assuming there are posts that exist that are tagged with that category. Note that things might get weird layout wise if you have more than 5-7 desktop icons total (`desktop_categories` and `site_links` combined)
Not compatible with the default "Deploy from a branch" GitHub Pages deployment method. [Use the default Jekyll deployment Action instead](#github-pages-deployment)
#### `site_links`
You can define additional links to include on the desktop and start menu. Links must have a title, url, icon, and alt text/description. the `alt` text is both the alt-text for the actual icon image tag (for screen readers) but also appears in the start menu. The start menu does not wrap text, so long descriptions might stretch the menu out to goofy proportions.
```yml
jekyll-98:
site_links:
- title: 'Name'
url: https://example.com
icon: document # see assets/icons
alt: 'Descriptive text'
```
#### `social_links`
All available sites/icons are listed in the theme [`_config.yml`](https://github.com/queenkjuul/jekyll-98/blob/main/_config.yml). Define a username, and the site will appear in the taskbar, as well as the Contact page (if enabled)
#### `contact`
By default, the contact page will display the name and email set in the site config. Commenting/removing these lines will prevent the Contact page from being generated (and links to it will be removed)
See [`_config.yml`](https://github.com/queenkjuul/jekyll-98/blob/main/_config.yml) for details on setting up additional info beyond name + email.
#### `about`
You can add any info you like to the default About page. The About page will automatically include your site description. Additional lines defined in the `jekyll-98.about` array will appear in a bulleted list on the About page, below the description.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/queenkjuul/jekyll-98. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## Development
To set up your environment to develop this theme, run `bundle install`.
Your theme is setup just like a normal Jekyll site! To test your theme, run `bundle exec jekyll serve` and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme. Add pages, documents, data, etc. like normal to test your theme's contents. As you make modifications to your theme and to your content, your site will regenerate and you should see the changes in the browser after a refresh, just like normal.
When your theme is released, only the files in `_layouts`, `_includes`, `_sass` and `assets` tracked with Git will be bundled.
To add a custom directory to your theme-gem, please edit the regexp in `jekyll-98.gemspec` accordingly.
## License
The theme is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
social icons from https://github.com/edent/SuperTinyIcons
credit Alex Meub https://win98icons.alexmeub.com/Explore similar templates
Compare previews and descriptions within the same stack and category.

al-folio
A Jekyll academic homepage theme for scholars and researchers, with a clean responsive design and out-of-the-box support for publication lists, project showcases, CVs, and blogs.
Jekyll · Portfolio

minimal-mistakes
Minimal Mistakes is a two-column Jekyll theme for personal sites, blogs, project documentation, or portfolios.
Jekyll · Portfolio

Beautiful Jekyll
Beautiful Jekyll is a mature, easy-to-use Jekyll blog theme maintained by Dean Attali since 2015, with over 50,000 users.
Jekyll · Blog

jekyll-TeXt-theme
A customizable Jekyll theme for personal sites, team sites, blogs, projects, and documentation.
Jekyll · Blog

startbootstrap-clean-blog-jekyll
The official Jekyll version of Start Bootstrap's Clean Blog theme, offering a blog home page, about page, contact page, and sample post pages, with a Formspree-powered contact form.
Jekyll · Blog

So Simple
A minimal reading-oriented Jekyll theme by Michael Rose for personal blogs, portfolios, and long-form reading. It offers multiple layouts, microformat markup, Disqus comments, Google Analytics, Jekyll SEO Tag, three skins, and aggregation by year, category, and tag with a grid view.
Jekyll · Blog
