JS Paint: the website that rebuilds MS Paint in a tab
05 Nov 2026 · By the Boring Websites editors
JS Paint is a browser-based remake of the classic Microsoft Paint, rebuilt from scratch in JavaScript so the Windows 98 drawing program runs in any modern tab. It is worth a look because it is not a nostalgic screenshot: it is a working editor that opens the same teal toolbox, then quietly adds features the original never shipped.
The site lives at jspaint.app, loads instantly, and asks for nothing. No account, no download, no splash screen begging for a subscription. A visitor lands on a blank canvas with the familiar tool palette down the left edge and starts scribbling.
In brief
- JS Paint recreates classic MS Paint in the browser, then adds extras such as themes, more file formats, and branching undo.
- It was built by Isaiah Odhner and is free and open source under the MIT license.
- It runs as a web page, an installable app, and a desktop build, and works offline once loaded.
- Accessibility features include voice commands and head tracking, which the original Paint never had.
What it actually is
The description on the site is blunt: "Classic MS Paint in the browser, with extra features." That is the whole pitch. The toolbox holds the pencil, brush, airbrush, fill bucket, eraser, text tool, line, curve, rectangle, ellipse, and polygon, arranged exactly where muscle memory expects them. The color palette sits along the bottom. The menu bar reads File, Edit, View, Image, Colors, Help.
It is a remake, not an emulator. There is no copy of Windows running underneath. The interface is rebuilt in HTML and drawn on an HTML5 canvas, so it behaves like a native web page rather than a virtual machine. That choice is what lets it do things the 1990s version could not.
The default look is the Windows 98 gray, complete with beveled buttons and the navy title bar. The theme color declared in the page is the classic navy blue, and the tile color is Paint's signature teal, small details that signal how seriously the recreation treats the source material.
A tour of the toolbox
Anyone who used Paint between the mid 1990s and the mid 2000s will recognize every tool on sight. The Free-Form Select and the rectangular Select sit at the top, followed by the Eraser, the Fill With Color bucket, and the color picker eyedropper. Below those are the Magnifier, the Pencil, the Brush with its row of tip shapes, the Airbrush with its characteristic spray of dots, the Text tool, the Line, the Curve, the Rectangle, the Polygon, the Ellipse, and the Rounded Rectangle.
The behaviors match too. The Airbrush still sprays more densely the longer the button is held. The Fill tool still floods a contiguous region and leaks through a one-pixel gap exactly as the original did, a quirk that generations of users learned the hard way. Right-clicking still paints with the secondary color. Holding Shift still constrains a line to an angle or forces a rectangle into a square. These are not approximations. They are the rules of the old program, reimplemented faithfully.
The canvas can be resized by dragging its corner handle, zoomed with the Magnifier, and viewed with a pixel grid at high magnification, just as before. For anyone who spent childhood afternoons placing pixels one at a time, the muscle memory transfers completely.
Who built it, and why it is free
JS Paint is the work of Isaiah Odhner, who publishes it on GitHub under the handle 1j01. The project is open source under the permissive MIT license, which means anyone can read the code, fork it, or run their own copy. The repository at github.com/1j01/jspaint has collected thousands of stars and hundreds of forks over years of steady commits.
The motivation reads like a love letter to a tool most people outgrew. Microsoft slowly sidelined Paint across Windows versions, and for a stretch it looked set for removal entirely. JS Paint answers that by making the program outlive its platform. It no longer needs Windows at all. It needs a browser, which almost every device already has.
Because the code is public, the project also doubles as a study in how far the web platform has come. Rebuilding a decades-old desktop application as a single page, with the same responsiveness, is the kind of feat that used to require native code and a compiler. The commit history, stretching across thousands of changes, shows it was not a weekend hack but a sustained act of maintenance.
The extras the original never had
The phrase "with extra features" is doing quiet heavy lifting. The original Paint could open and save a short list of formats. JS Paint reads and writes PNG, BMP, GIF, JPEG, TIFF, WebP, SVG, ICO, and even PDF, and it understands palette files from other editors such as GIMP, Adobe Photoshop, and Paint.NET. That turns a toy into something a person could reasonably use to tidy up an icon or convert an image.
Undo is the clearest upgrade. The 1990s Paint allowed only a few steps of undo before the history ran out. JS Paint offers effectively unlimited undo, and the history is nonlinear: a user can branch off at an earlier state, try something else, and still return to the abandoned path. That is a feature borrowed from professional editors, dropped into a program famous for its simplicity.
Transparency is handled properly as well. Where old Paint flattened everything onto an opaque background, JS Paint can keep transparent regions, which matters for anyone editing an icon or a logo. Image operations such as rotate, flip, stretch, and skew are all present under the Image menu, and they apply to either a selection or the whole canvas.
The themes, one coat at a time
There are also themes beyond the default gray. The settings offer Modern, Dark, Winter, Occult, and Bubblegum variants alongside the classic Windows 98 skin. The Dark theme is the practical favorite for a late-night session, Winter dusts the chrome with a seasonal touch, and Occult and Bubblegum lean into pure whimsy. The tools underneath never change. Only the frame does, which keeps the program recognizable while letting it suit a mood.
Turning a drawing into an animation
One of the more playful additions turns the undo history into output. Because JS Paint records every step, it can render that sequence as an animated GIF, replaying the drawing as it was made. A static doodle becomes a short time-lapse of its own creation, which is the sort of flourish nobody asked for and many people enjoy.
Accessibility nobody expected from Paint
The most surprising additions are the accessibility tools, because they are serious rather than decorative. JS Paint includes a Dwell Clicker, which lets a person click by hovering the pointer and holding still, useful for anyone who cannot press a mouse button comfortably. There is speech recognition, so spoken commands can drive the menus and tools. There is even head tracking, which maps head movement to the cursor through the webcam.
These are not features one expects from a nostalgia project. They reflect a view that a drawing program should be usable by people with different physical abilities, and they sit in a program that most visitors arrive at purely for fun. An Enlarge UI option rounds out the set for anyone who finds the retro buttons too small on a modern high-resolution screen.
The design choice worth noting is that these tools are not hidden behind a separate accessible version of the site. They are built into the same program everyone else uses, which is the harder way to do it and the more respectful one. A person using head tracking paints in the same Paint, with the same teal toolbox, as everyone else.
Drawing together, and hidden jokes
Under the Extras menu there is a multi-user mode. It lets more than one person paint on the same canvas at the same time, a collaborative whiteboard dressed as a 1998 application. Commenters on Hacker News discovered it and spent time scribbling together, which is roughly the intended effect. The feature is described by the project as rudimentary, built on a realtime database, but it works well enough for a shared doodle.
The attention to detail extends to jokes. The application hides the Konami code, the up-up-down-down sequence familiar to anyone who played 1980s games, as an easter egg. It also recreates the old Windows help system, down to the retro help window, so that reading the documentation feels like using the program it documents. On one widely shared Hacker News thread that gathered hundreds of points, readers noted that even the help pages load with the same snappy feel as the rest of the app.
How well it runs
The practical surprise is speed. A full desktop-style interface, rebuilt as a web page, could easily feel sluggish. JS Paint does not. It opens fast, responds to the brush without lag, and holds up on phones, where the layout adapts even though the small buttons were designed for a mouse. Readers on Hacker News repeatedly singled out how smoothly it ran on mobile browsers, a place the original Paint never reached.
Part of that comes from the architecture. The program is a static page plus JavaScript, so once it has loaded there is little further to fetch. It can be installed as an app and used offline, and there are desktop builds packaged for macOS, Windows, and Linux for anyone who wants it in a window of its own rather than a tab.
The result is a tool that behaves like software, not like a web gimmick. A person can genuinely open an image, crop it, recolor it, save it in a different format, and close the tab, having done real work in a program that looks like it belongs on Windows 98.
Part of a wider revival
JS Paint is one of a small group of projects rebuilding heavyweight desktop software as a single web page. In the same Hacker News discussion, readers pointed to Photopea, a browser-based Photoshop alternative written largely by one developer, as a comparison. The pattern is the same: take a program that used to demand an install and a license, and make it a link anyone can open.
What sets JS Paint apart in that company is restraint. It does not try to out-feature Photoshop. It aims to be the best possible version of a deliberately simple program, and then stops. The extras all serve the original idea rather than bolting on a new one. That discipline is why it reads as a faithful remake rather than a different app wearing Paint's clothes.
Small touches that reward a closer look
The color controls go deeper than the visible swatches suggest. Double-clicking a palette entry opens an Edit Colors dialog, the same one Windows users remember, where a custom color can be mixed and saved back into the strip. Entire palettes can be loaded from files, which is why support for GIMP, Adobe Photoshop, and Paint.NET palette formats matters more than it first appears. A pixel artist can bring a favorite set of colors straight in.
Keyboard shortcuts carry over as well. Control plus Z undoes, Control plus Y redoes, and the function keys and menu accelerators behave as they did on the desktop. For a returning user, nothing needs to be relearned. The program meets decades-old habits rather than asking people to form new ones.
There is also a quiet generosity in how it treats input. A drawing can be started with a mouse, continued with a finger on a touch screen, and finished with a stylus, all in the same session, because the canvas listens for every kind of pointer. That flexibility is part of why the mobile experience holds up, and it is the sort of thing that only emerges from careful, unglamorous work on the parts of a program nobody usually praises.
Why it belongs in the boring web
JS Paint fits the quiet corner of the internet that values a single idea executed with care. It does one thing: it is Paint, on the web, done properly. There is no feed, no login wall, no notification, and nothing to buy. That restraint is the point. It stands alongside the other small, single-purpose sites in the Boring Websites family, where the reward is a few minutes of calm attention rather than engagement metrics.
It also preserves something. Software usually vanishes when its platform moves on, and a generation of children learned to draw on the blocky canvas of MS Paint. JS Paint keeps that experience alive and portable, free of the operating system that birthed it. The project submitted to Hacker News years ago is still maintained, still improving, and still free, which in web terms is its own small miracle.
FAQ
Is JS Paint free to use?
Yes. JS Paint is free and open source under the MIT license. The full source code is published on GitHub, so anyone can inspect it, fork it, or host their own copy without paying or signing in.
Does JS Paint work without installing anything?
Yes. It runs entirely in a web browser at jspaint.app with no download required. It can also be installed as an app for offline use, and there are separate desktop builds for macOS, Windows, and Linux if a person prefers a standalone window.
What file formats can JS Paint open and save?
JS Paint handles far more than the original Paint did. It reads and writes PNG, BMP, GIF, JPEG, TIFF, WebP, SVG, ICO, and PDF, and it can import palette files from editors such as GIMP, Adobe Photoshop, and Paint.NET.
Can more than one person draw at the same time?
Yes. A multi-user mode under the Extras menu lets several people paint on the same canvas together in real time. The project describes it as rudimentary, but it is enough for a shared doodle between friends.