A pixel-perfect web-based MS Paint remake and more... Try it out! Then join the Discord server to share your art!
JS Paint recreates every tool and menu of MS Paint, and even little-known features, to a high degree of fidelity.
It supports themes, additional file types, and accessibility features like a Dwell Clicker and Speech Recognition.

Ah yes, good old Paint. Not the one with the ribbons or the new skeuomorphic one with the interface that can take up nearly half the screen. (And not the even newer Paint 3D.)
Windows 95, 98, and XP were the golden years of Paint. You had a tool box and a color box, a foreground color and a background color, and that was all you needed.
Things were simple.
But we want to undo more than three actions. We want to edit transparent images. We can't just keep using the old Paint.
So that's why I'm making JS Paint. I want to bring good old Paint into the modern era.
Dictate text with the Text tool
Create an animated GIF from the current document history. Accessible from the Extras menu or with Ctrl+Shift+G. It's pretty nifty, you should try it out! You might want to limit the size of the image though.
Editing Features:
Miscellaneous Improvements:

A few things with the tools aren't done yet. See TODO.md
Full clipboard support in the web app requires a browser supporting the Async Clipboard API w/ Images, namely Chrome 76+ at the time of writing.
In other browsers you can still copy with Ctrl+C, cut with Ctrl+X, and paste with Ctrl+V, but data copied from JS Paint can only be pasted into other instances of JS Paint. External images can be pasted in.
⚠️ Saving as JPEG will introduce artifacts that cause problems when using the Fill tool or transparent selections.
⚠️ Saving in some formats will reduce the number of colors in the image.
💡 Unlike in MS Paint, you can use Edit > Undo to revert color or quality reduction from saving. This doesn't undo saving the file, but allows you to then save in a different format with higher quality, using File > Save As.
💡 Saving as PNG is recommended as it gives small file sizes while retaining full quality.
| File Extension | Name | Read | Write | Read Palette | Write Palette |
|---|---|---|---|---|---|
| .png | PNG | ✅ | ✅ | 🔜 | |
| .bmp, .dib | Monochrome Bitmap | ✅ | ✅ | 🔜 | ✅ |
| .bmp, .dib | 16 Color Bitmap | ✅ | ✅ | 🔜 | ✅ |
| .bmp, .dib | 256 Color Bitmap | ✅ | ✅ | 🔜 | ✅ |
| .bmp, .dib | 24-bit Bitmap | ✅ | ✅ | N/A | N/A |
| .tif, .tiff, .dng, .cr2, .nef | TIFF (loads first page) | ✅ | ✅ | ||
| PDF (loads first page) | ✅ | ||||
| .webp | WebP | 🌐 | 🌐 | ||
| .gif | GIF | 🌐 | 🌐 | ||
| .jpeg, .jpg | JPEG | 🌐 | 🌐 | N/A | N/A |
| .svg | SVG (only default size) | 🌐 | |||
| .ico | ICO (only default size) | 🌐 |
Capabilities marked with 🌐 are currently left up to the browser to support or not. If "Write" is marked with 🌐, the format will appear in the file type dropdown but may not work when you try to save. For opening files, see Wikipedia's browser image format support table for more information.
Capabilities marked with 🔜 may be coming soon, and N/A means not applicable.
"Read Palette" refers to loading the colors into the Colors box automatically (from an indexed color image), and "Write Palette" refers to writing an indexed color image.
With Colors > Save Colors and Colors > Get Colors you can save and load colors in many different formats, for compatibility with a wide range of programs.
If you want to add extensive palette support to another application, I've made this functionality available as a library:
AnyPalette.js
| File Extension | Name | Programs | Read | Write |
|---|---|---|---|---|
| .pal | [RIFF] Palette | [MS Paint] for Windows 95 and Windows NT 4.0 | ✅ | ✅ |
| .gpl | [GIMP][Gimp] Palette | [Gimp], [Inkscape], [Krita], [KolourPaint], [Scribus], [CinePaint], [MyPaint] | ✅ | ✅ |
| .aco | Adobe Color Swatch | Adobe [Photoshop] | ✅ | ✅ |
| .ase | Adobe Swatch Exchange | Adobe [Photoshop], [InDesign], and [Illustrator] | ✅ | ✅ |
| .txt | [Paint.NET] Palette | [Paint.NET] | ✅ | ✅ |
| .act | Adobe Color Table | Adobe [Photoshop] and [Illustrator] | ✅ | ✅ |
| .pal, .psppalette | [Paint Shop Pro] Palette | [Paint Shop Pro] (Jasc Software / Corel) | ✅ | ✅ |
| .hpl | [Homesite] Palette | Allaire [Homesite] / Macromedia [ColdFusion] | ✅ | ✅ |
| .cs | ColorSchemer | ColorSchemer Studio |
$ claude mcp add jspaint \
-- python -m otcore.mcp_server <graph>