A pixel-perfect recreation of Microsoft Paint (Windows 10) for the web. Built with pure vanilla JavaScript, HTML5 Canvas, and CSS - no dependencies, no build step. Works on desktop, tablet and phone.
⬇️ Download for Mac (Apple Silicon and Intel, signed and notarized) · ⬇️ Download for Windows (Windows 10 and 11)
Or use it free in your browser, no download: nicedreamzwholesale.com/paint · nicedreamzapp.github.io/MattPaint
The desktop app is the same Paint in its own window, working offline, with a real Save window,
the system print dialog, and a Set as desktop background that actually sets it. It lives in
desktop/.
- Pencil - Freehand drawing with pixel precision
- Brush - Multiple brush types including:
- Standard brush
- Calligraphy (2 angles)
- Airbrush with spray effect
- Oil brush
- Crayon texture
- Marker (semi-transparent)
- Watercolor
- Eraser - Erase to background color
- Fill (Paint Bucket) - Flood fill with optimized algorithm
- Color Picker (Eyedropper) - Sample colors from canvas
- Text Tool - Full text support with font options, sizes, and styles (bold, italic, underline, strikethrough)
- Line, Curve, Rectangle, Oval, Rounded Rectangle
- Triangle, Right Triangle, Diamond, Polygon
- 5-point and 6-point Stars
- Arrows (all 4 directions)
- Heart, Lightning Bolt
- Configurable outline and fill styles
- Rectangular selection
- Free-form selection with lasso tool
- Move, copy, cut, paste selections
- Transparent selection mode
- Crop to selection
- Rotate (90°, 180°, custom)
- Flip (horizontal/vertical)
- Resize with aspect ratio lock
- Skew transformation
- Zoom (up to 800%)
- New, Open, Save (PNG, JPEG, BMP, GIF)
- Print support
- Drag & drop image loading
- Set as desktop wallpaper
- Authentic Windows 10 ribbon interface
- Rulers with measurement markings
- Gridlines overlay
- Status bar with coordinates and zoom
- Full keyboard shortcuts
- Touch/stylus support
| Action | Shortcut |
|---|---|
| Pencil | P |
| Brush | B |
| Eraser | E |
| Fill | G |
| Text | T |
| Select | S |
| Magnifier | Z |
| Line | L |
| Rectangle | R |
| Oval | O |
| Undo | Cmd/Ctrl + Z |
| Redo | Cmd/Ctrl + Y |
| Copy | Cmd/Ctrl + C |
| Paste | Cmd/Ctrl + V |
| Select All | Cmd/Ctrl + A |
| Save | Cmd/Ctrl + S |
| New | Cmd/Ctrl + N |
| Open | Cmd/Ctrl + O |
| Zoom In | + |
| Zoom Out | - |
Open nicedreamzwholesale.com/paint on anything with a browser. On a phone the canvas sizes itself to the screen and the ribbon scrolls sideways.
Clone the repo and open index.html in any modern browser. That's it!
# Using Python
python3 -m http.server 8000
# Using Node.js
npx serveThen visit http://localhost:8000
MattPaint/
├── index.html # Main HTML file
├── js/
│ └── app.js # All application logic (~3300 lines)
├── css/
│ ├── paint.css # Main styles + phone layout
│ ├── ribbon.css # Ribbon toolbar styles
│ └── dialogs.css # Modal dialog styles
├── test-in-app.js # In-browser self-test suite
└── TESTING-CHECKLIST.md
Add ?test to the URL (for example index.html?test) and the built-in suite runs 65 checks against the live DOM and reports in the corner of the page. It is not loaded otherwise.
- Chrome / Edge
- Firefox
- Safari, including iPhone and iPad (touch drawing)
- Android Chrome
- Zero Dependencies - No npm, no build tools, no frameworks
- Lightweight - Under 100KB total
- Offline Ready - Works without internet
- Faithful Recreation - Looks and feels like real MS Paint
- Educational - Clean, readable vanilla JS code
MIT License - feel free to use, modify, and distribute.
Created by Matt Macosko (@nicedreamzapp)
"Sometimes you just need to paint."

