Specifically for 2D graphics and art. Not ideally suited for real-time purposes.
Hardware acceleration is not strictly necessary but would be ideal for faster iteration & feedback loops.
Main features:
- Works on the Web (either pure JS or compiles to WASM)
- Works outside of the Web (either Nodejs or native)
- Small footprint, minimal dependencies: tree shake-able codebase
- Borrow most of the 'good' Canvas2D features
- Ability to create multiple canvas surfaces
- Draw images to surfaces
- Ability to treat canvas as an image (offscreen render buffers)
- Rich composite modes (normal, multiply, screen, etc)
- Drawing filled convex & concave polygons (including basic shapes)
- Drawing path strokes & lines
- Anti-aliasing support for all paths
- Basic image decoding/encoding (PNG, GIF, JPG, WEBP, QOI) and working with pixel data
- Additional major features:
- Per-vertex line attributes (color, thickness, join)
- Richer line configuration: joins, caps, placement (inside/outside/center)
- Surface shader support (for patterns, gradients, image manipulation, more)
- Richer compositing (custom blend modes like mixbox or spectral mixing)
- Super high res export option for large print artwork, including configurable DPI for PNG export
- 24 bit and 32 bit (float) image export options e.g. for HDRs
- Wider color gamut by default (display-p3)
- Built for robustness and exactness: determinism, accuracy, etc
- Tooling can be built around it that supports rich media handling, e.g. animated GIF and MP4 export
- Low level API, intended to bring more features to higher-level tools & abstractions like canvas-sketch, p5js
Additional nice-to-haves:
- Text rendering: a huge rabbit hole, so maybe something to skip
- Bleed, crop marks and other options for print export
- GPU accelerated CUBE lookup table support for color grading