A Blazor UI component library that brings back the nostalgic look and feel of classic Windows operating systems (Windows 98, XP, 7 and 10). Create retro-styled web applications with authentic Windows UI components.
🪶 Lightweight the NuGet package is only ~300 KB.
Compatible with Blazor Server and Blazor WebAssembly
DEMO and DOCS : https://tossnet.github.io/Blazor-WinOld/
BlazorWinOld provides a collection of Blazor components styled to match the iconic Windows interfaces from the late 90s and 2000s. Whether you're building a nostalgia-driven project or need that classic Windows aesthetic, this library delivers pixel-perfect components including buttons, message boxes, windows, tabs, and more.
💡 Already using a UI framework? No problem! BlazorWinOld is fully compatible alongside other UI libraries (MudBlazor, Radzen, Fluent UI…). You can adopt just the components you need, such as
WinOldContextMenuorWinOldMessageBox, without any conflict.
Enregistrement.2026-04-02.151547.mp4
Install-Package BlazorWinOld
or
dotnet add package BlazorWinOld
For client-side and server-side Blazor - add script section (head section)
<link href="_content/BlazorWinOld/css/blazorwinold.css" rel="stylesheet" />In Program.cs add this line
builder.Services.AddWinOldComponents();in _Imports.razor :
@using Blazor.WinOld
@using Blazor.WinOld.Componentsand in the bottom of your MainLayout.razor add these lines (optional, only if you use MessageBox or InputBox)
<WinOldMessageBoxHost /> <!-- Only if you use MessageBox -->
<WinOldInputBoxHost /> <!-- Only if you use InputBox -->
<WinOldDialogHost /> <!-- Only if you use DialogBox -->Version 2.6.3
- improve touch for WinOldSelect (winXP and win98) and checkbox UI
Version 2.6.2
- Add Win10 label style, improve touch and checkbox UI
Version 2.6.1
- Touch mode font sizes are now scaled up to 13px for Win7/Win10 themes; Win98/WinXP themes retain their native 11px pixel-font size with antialiasing disabled to preserve crisp rendering.
- On the button demo page: Add a custom style example.
Version 2.6.0
- Added
TouchModeboolean property toWinOldButton,WinOldCheckBox,WinOldOptionButton,WinOldTextBox,WinOldNumberBoxandWinOldSelect— enlarges controls for easier finger interaction on touch screens. Supports per-component usage or cascade via<CascadingValue Name="TouchMode" Value="true">.
Version 2.5.6
- Context menu now automatically repositions itself to stay within the browser viewport when it would overflow the right or bottom edge
Version 2.5.5
- add css shadow to the win10 submenu
Version 2.5.4
- Multiple context menus on the same page now automatically close each other when a new one is opened.
Version 2.5.3
- Added ShowContextMenu(double clientX, double clientY) overload to WinOldMenu, allowing the context menu to be opened programmatically from code-behind without a MouseEventArgs.
Version 2.5.2
- Dialog: Fixed dialog overflow on small screens. The dialog width is now capped at the viewport width.
Version 2.5.1
- Added generic ShowDialog(options, parameters) extension method to render any Blazor component as dialog content without requiring a RenderFragment.'
🚧 Upcoming (not yet released)
WinOldButton: preview of a new DOS appearance style — retro terminal-inspired button with IBM VGA font and classic shadow effect
Version 2.5.0
- New component
WinOldSlider
Version 2.4.0
WinOldMenuItem: newIconCssClassandIconTemplateparameters. Display icons from any external library (Bootstrap Icons, Font Awesome, custom SVG…) without bundling any icon dependency in the package
Version 2.3.0
- The
WinOldMenucomponent can be used as a Context Menu by setting theIsContextMenuproperty totrue
Version 2.2.1
- Accessibility: added ARIA attributes (
role,aria-expanded,aria-selected,aria-modal,aria-labelledby…) to all components
Version 2.2.0
- Added new
WinOldMenu- Button : winXP and win7 , add default style
Version 2.1.0
- Added new
WinOldNumberBoxcomponent for numeric input with support for generic types- Enhanced
WinOldInputBoxwith support for numeric types:int,decimal, anddouble- New extension methods:
ShowInputBox<int?>(),ShowInputBox<decimal?>(), andShowInputBox<double?>()
Version 2.0.0
- Added new Windows 10 style theme
- Windows 10 is now the default style applied to all components
Version 1.5.0
- Added WinOldDialog component: a fully draggable dialog window supporting custom child content
Version 1.4.0
- Added drag-and-drop support for MessageBox and InputBox, allowing users to move the window freely across the screen.
Version 1.3.1
- Improve disabled style for some components (Frame, Options, Tab)
- WinOldTabs : a Tab can be disabled.
Version 1.3.0 ⚠️ BREAKING CHANGE
- DialogOptions has been renamed to MessageBoxOptions for WinOldMessageBox
- Migration: Replace 'new DialogOptions' with 'new MessageBoxOptions' (simple Find/Replace)
- New WinOldInputBox component
- Button : Add "Default" Property style for win98 button
Version 1.2.9
- Fix height of Tabs
- Fix disabled style of WinOldButton
Version 1.2.8
- win7 : separation of font size from font family
Version 1.2.7
- Improved checkbox component rendering
- Fixed button and selectbox label colors on Safari
Version 1.2.6
- Added
disabledattribute support onWinOldSelectcomponent- Added Select page in the demo site
Version 1.2.2
- Added .AddWinOldComponents() to simplify declaration
This project uses the Ultimate Oldschool PC Font Pack by VileR (int10h.org).
Font used: WebPlus IBM VGA 8x14
- Source: https://int10h.org/oldschool-pc-fonts/
- License: CC BY-SA 4.0
- © 2015–2020 VileR
I used these repo for most of the css and icons:
- https://github.com/botoxparty/XP.css
- https://github.com/khang-nd/7.css
- https://win98icons.alexmeub.com/
- https://github.com/softwarehistorysociety/XPIcons/tree/main
- https://kristopolous.github.io/BOOTSTRA.386/v2.3.1/components.html
OS emulator :
