Skip to content

Repository files navigation

WebPaint98

日本語

A pixel-art paint application that runs entirely in your browser, inspired by the way paint software worked on the NEC PC-98 in the early 1990s. You draw on a 640×400 indexed-color canvas with a 16-color palette, and you can save in MAG, the standard image format of that era. No install, no sign-up — your work is autosaved inside your browser.

Try it now

Just open it in a browser — nothing to download or install.

Usage

A help page with screenshots is at https://uraraworks.github.io/WebPaint98/help.html?lang=en (source: public/help.html). It is also reachable from the footer of the app.

The short version:

  1. Use the icon bar in the top-left to open the windows you need (Pen, Tile, Mask, Edit, Loupe, Palette, Filer, System).
  2. In the Pen window pick what you draw with (upper row), how you draw (lower row), a color and a tone.
  3. Drag on the canvas to draw.
  4. Export to your computer with ExpMAG / ExpPNG in the Filer window.

Press ? in the app for the full list of keyboard shortcuts.

Features

  • Drawing: 9 drawing tools (pen, 1-dot, smudge, clone, soft brush, spray, dither, blur, random walk) combined freely with 9 stroke modes (freehand, line, polyline, rectangle, ellipse, flood fill, …)
  • Color: per-channel RGB editing of the 16-color palette, swapping two colors, generating a gradient between two colors
  • Patterns: 32 tiles, a 9-step halftone gradation row, and capturing any 16×16 area of your picture as a new pattern
  • Mask: per-color write protection, so you can paint without disturbing chosen colors
  • Zoomed editing: a ×2 / ×4 / ×8 loupe window (1-dot, 2×2-dot, line, flood fill, eyedropper)
  • Text: lettering with optional shadow and emphasis
  • Screen effects: flip, rotate, and copy/swap between two pages
  • File I/O: MAG read/write, PNG export, and drag-and-drop loading
  • Autosave: picture, palette and window layout are kept in the browser (IndexedDB)

Interoperability with the original software

MAG files written by WebPaint98 are readable by the period software itself. This has been verified end to end: a picture drawn in WebPaint98 is written into a PC-98 HDD image through the FAT16/THD layer in src/fat/, the image is booted in WebNP2, and the file is loaded in the original paint software — and the reverse direction as well. Automated tests also check that every MAG file inside a real HDD image decodes and round-trips pixel-for-pixel (test/genuineMag.test.ts, test/fat.test.ts).

Note that this round trip currently runs through the Node harness in tools/roundtrip/, not from the app's UIsrc/fat/ is not wired into the app yet. Mounting and editing disk images directly from the browser is still on the list.

Development

npm install
npm run dev        # dev server at http://localhost:5199
npm run typecheck  # type check
npm test           # tests (vitest)
npm run build      # production build into dist/
  • Drawing, coordinate math and file I/O live in src/core/ and are DOM-independent, so test/ exercises them directly.
  • src/ui/windows/ holds one module per window; src/app/main.ts wires everything together and handles the keyboard.
  • Design and research notes are in docs/.

Project principles

  • Independent code: none of the original software's code is reused; everything is written from scratch in TypeScript. The reimplementation is based on observing a legally purchased copy of Ver.1.02 running under WebNP2, and on analysing its executable (including disassembly) to understand its internal logic. The research notes, separating facts from guesses, are in docs/.
  • Reference is Ver.1.02: all observation and analysis is done against the legally purchased copy.
  • All UI assets are original: earlier public versions used assets extracted from the original software, but as of 2026-08-12 every icon, window background, pattern, font and cursor has been replaced with our own artwork (see "About the assets" below).
  • File compatibility: MAG is the save format, and automated tests verify round-trip compatibility.
  • The original software is never bundled: its executable and disk images are not part of what is distributed.

Rights and credits

WebPaint98 is a homage / tribute to “Multi Paint”, a paint application created by Woody-Rinn (森林林檎) and released by C-Lab in 1992. It is an independent reimplementation that takes that software's window layout, interaction model and key bindings as a reference.

“Multi Paint” is the product name of its respective rights holders. WebPaint98 is not affiliated with, endorsed by, or licensed by them, and does not use that name as its own.

  • Published non-commercially and free of charge (no advertising).
  • The original product and nickname names are not used for this app.
  • If the rights holder contacts us, we will respond promptly — taking the app down, changing it, or replacing the assets as requested. Please reach us through the contact form on the URARA-works site (at the bottom of that page), or via GitHub Issues.
  • We are continuing our efforts to reach the rights holder. On 2026-08-12 we sent an email to the contact address we could find, introducing this project and asking for permission (we are currently awaiting a reply). We also keep an eye on the author's site and will reach out again if it comes back online.

About the assets

As of 2026-08-12, all UI assets — icons, window backgrounds, cursors, brush / tone / tile patterns and the 8×8 font — are our own work. No assets extracted or decoded from the original software are used, and the old ones have also been removed from the git history.

  • The icons are new artwork drawn with the original's compositions as reference (produced with the help of an image-generation model, by shrinking large hand-drawn-style illustrations; no pixels from the original are involved. The full process, including verification that nothing was traced, is documented in the tools/iconwork/ READMEs).
  • Window backgrounds and patterns are generated procedurally from primitive descriptions (tools/gen_*.py).
  • The 8×8 font derives from a public-domain font (dhepper/font8x8, IBM VGA lineage).
  • Numeric layout data such as geometry.json consists of measured coordinates (facts) needed to reproduce the behavior.

If the rights holder contacts us, we will still respond promptly — making changes or taking the app down as requested.

(The original software's executable and disk images themselves, under reference/private/, are git-ignored and are not part of this repository.)

License

The source code and assets in this repository are by URARA-works (the font derives from a public-domain font). Now that the assets are all original, an open-source license has become possible; one has not been chosen yet (all rights reserved until then).

Related

  • WebNP2 — a PC-98 emulator for the browser (sister project)

About

Web-based pixel paint app in the style of PC-98 paint software, with MAG format support

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages