# Fabric.js — Powerful HTML5 Canvas Library for Interactive Graphics > A feature-rich JavaScript library that provides an interactive object model on top of the HTML5 canvas element, enabling drawing, manipulation, and animation of shapes, images, and text. ## Install Save the content below to `.claude/skills/` or append to your `CLAUDE.md`: # Fabric.js — Powerful HTML5 Canvas Library for Interactive Graphics ## Quick Use ```bash npm install fabric ``` ```javascript import { Canvas, Rect } from 'fabric'; const canvas = new Canvas('myCanvas'); canvas.add(new Rect({ left: 100, top: 100, width: 50, height: 50, fill: 'red' })); ``` ## Introduction Fabric.js provides an interactive object model on top of the HTML5 canvas element. It simplifies canvas programming by offering a rich set of drawing primitives, SVG parsing, and an event-driven interaction layer that raw canvas API lacks. ## What Fabric.js Does - Renders shapes, images, text, and paths with a persistent object graph - Enables selection, grouping, scaling, rotation, and drag-and-drop interactions - Parses SVG files and converts them into editable canvas objects - Supports free-hand drawing, clipping, filters, and animations - Serializes the canvas state to JSON and back for persistence ## Architecture Overview Fabric.js wraps the native CanvasRenderingContext2D behind an object-oriented layer. Each visual element is a FabricObject subclass tracked in an ordered collection. A centralized event bus dispatches pointer, selection, and modification events. Rendering uses a two-canvas strategy: a main display canvas and a hidden cache canvas for per-object bitmap caching, enabling efficient redraws. ## Self-Hosting & Configuration - Install via npm, yarn, or load from a CDN script tag - Import the full bundle or use tree-shakeable ES module imports - Configure canvas dimensions, background color, and selection styles via constructor options - Enable or disable features like object caching, retina scaling, and touch support - Works in Node.js via jsdom or node-canvas for server-side rendering ## Key Features - SVG-to-canvas and canvas-to-SVG bidirectional conversion - Built-in image filters (brightness, contrast, blur, pixelate, and more) - Free-drawing brush system with configurable width, color, and pattern - Robust serialization with toJSON/loadFromJSON for save and restore - Active community maintaining TypeScript definitions and v6 modular architecture ## Comparison with Similar Tools - **Konva** — scene-graph canvas lib focused on high-performance layered rendering; less SVG support - **Paper.js** — vector graphics scripting with path booleans; smaller interaction model - **PixiJS** — WebGL-first 2D renderer for games; no built-in object manipulation UI - **Canvas API (raw)** — maximum control but no object persistence or event handling - **SVG DOM** — native vector but performance degrades with thousands of elements ## FAQ **Q: Can Fabric.js render on the server?** A: Yes. Use node-canvas or jsdom to instantiate a Fabric canvas in Node.js for thumbnails or exports. **Q: Does it support WebGL?** A: Fabric.js uses Canvas2D by default. Image filters optionally run through a WebGL backend for GPU acceleration. **Q: How large can the canvas be?** A: Browser limits apply (typically 4096-16384px per side). Fabric supports virtual canvas and viewport transforms for pan/zoom over large areas. **Q: Is Fabric.js suitable for real-time collaborative editing?** A: Yes. Serialize object state as JSON, transmit deltas over WebSocket, and apply them on remote canvases. ## Sources - https://github.com/fabricjs/fabric.js - http://fabricjs.com/docs/ --- Source: https://tokrepo.com/en/workflows/fabric-js-powerful-html5-canvas-library-interactive-graphics-1541c167 Author: Script Depot