{"_id":"@djodjonx/gwen-renderer-canvas2d","_rev":"8-310615a908ca9f5c8e939fe1c302cb7f","name":"@djodjonx/gwen-renderer-canvas2d","dist-tags":{"latest":"1.0.0"},"versions":{"0.3.1":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.1","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.1","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"f2f3b605eb204a7669af5351b7ff632bfb417d72","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.1.tgz","fileCount":5,"integrity":"sha512-GD8OBcSKWu15EY8hmxjVWXXDmPeqWJDk4zPkixALzOWM4IT32gxcu41V8bY8LE/s89xqjBNmy8wkqUPedO0PZw==","signatures":[{"sig":"MEUCIGf8GCME9KZ+9cJNLCm9iVzvI2aGMq4wT/244id2+Ru4AiEAxvMFf5vSTL4L5hj5y74+lBbbkJYlSI/hk3Unx3CKiOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24789},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"gitHead":"a340e36856533079cd3e903c6d82049d7b9993aa","scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"workspace:*","@djodjonx/gwen-engine-core":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.1_1773053164238_0.28940601428645407","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.2","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.2","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"0670c13ea724f43f2a1b930e1a6ff7de06719800","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.2.tgz","fileCount":6,"integrity":"sha512-LYaTHjI0qXxwK/IN62ripHQvsfWnqB+HrYvehn4DMVQ8DLqcDwBOur3130944Q9YCrQwzYYm8g7/NVtwFolkbw==","signatures":[{"sig":"MEUCIDJtJrZilXNNmi/YUZBqUY31zavdvSsY4aMwCtHWQzAtAiEA3sIEhAF88baqu7mb0wLtIZieSTvnonRkpgd35jCMZr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39536},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","_from":"file:djodjonx-gwen-renderer-canvas2d-0.3.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/e3ac27bc78fc2bed70c136b761d27b68/djodjonx-gwen-renderer-canvas2d-0.3.2.tgz","_integrity":"sha512-LYaTHjI0qXxwK/IN62ripHQvsfWnqB+HrYvehn4DMVQ8DLqcDwBOur3130944Q9YCrQwzYYm8g7/NVtwFolkbw==","_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"0.3.2","@djodjonx/gwen-engine-core":"0.3.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.2_1773064747515_0.7528875710152945","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.3","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.3","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"af356b767e24b9eec0b871680d23d11142d692f0","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.3.tgz","fileCount":6,"integrity":"sha512-N48Wvuw3XnxpdmcumCigAoZHPLnKbVeBcfb7P1FCKA0V3NxtDokaUKmAjZluqeNALK5a773ygqcIC6/pXmNH6A==","signatures":[{"sig":"MEYCIQCNYqhy4Dj2PvU03QVYGL8u6CnXGflWB3L6cF4BPW4hCQIhAPuMqAmrlikeiz4ZdzI5PgSykH5syQhK9R3gX6LNq06c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39536},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","_from":"file:djodjonx-gwen-renderer-canvas2d-0.3.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/43210a9ceb698220e1ac16961ecc82d4/djodjonx-gwen-renderer-canvas2d-0.3.3.tgz","_integrity":"sha512-N48Wvuw3XnxpdmcumCigAoZHPLnKbVeBcfb7P1FCKA0V3NxtDokaUKmAjZluqeNALK5a773ygqcIC6/pXmNH6A==","_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"0.3.3","@djodjonx/gwen-engine-core":"0.3.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.3_1773066092014_0.3193174069291804","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.4","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.4","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"c12d264cad88f6b8b70690c87b87411c7be1d501","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.4.tgz","fileCount":6,"integrity":"sha512-aTuY/aAzYj97+uBegtDH61/1HWGTWe0KQvJCAeHtWe2RToOUupJHThW6smxH4cNNQ194H+uUmPGqwtkCopccPQ==","signatures":[{"sig":"MEYCIQC36ccq0yQYDXGF0C5ki6a0l2r3Ro1sTglM36BoJKNWmgIhAOiGxo2SR2LULvFNZIdH0Xp7zgj1BEBsgVxoIUBgq2SK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39534},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","_from":"file:djodjonx-gwen-renderer-canvas2d-0.3.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/1f5bfa66e1d68f0fe4db301fa47fd0f0/djodjonx-gwen-renderer-canvas2d-0.3.4.tgz","_integrity":"sha512-aTuY/aAzYj97+uBegtDH61/1HWGTWe0KQvJCAeHtWe2RToOUupJHThW6smxH4cNNQ194H+uUmPGqwtkCopccPQ==","_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"0.3.4","@djodjonx/gwen-engine-core":"0.3.4"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.4_1773067659645_0.7779381444014488","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.5","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.5","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"037b5b01df17f83c8acae7093b466eedf6104484","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.5.tgz","fileCount":6,"integrity":"sha512-0mt9KWc8DIeW6b/ibaXNGr7V7QAc34k02QG/r68ADTDF5xV9qoTmlDgNEMcmp0TzDkEt//J80H6t4vdZ8JEOhQ==","signatures":[{"sig":"MEUCIQD8CPtZd3R7jcPmQ/ALsIaPslNI5dvJZI2Pcrzb7nRjMwIgBRDdgCDlanIzz47JLRpcMUCBu2fNHEehZlhigekpshQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39534},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","_from":"file:djodjonx-gwen-renderer-canvas2d-0.3.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","development":"./src/index.ts"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/a75d03079739eaeee868d191da5da0fd/djodjonx-gwen-renderer-canvas2d-0.3.5.tgz","_integrity":"sha512-0mt9KWc8DIeW6b/ibaXNGr7V7QAc34k02QG/r68ADTDF5xV9qoTmlDgNEMcmp0TzDkEt//J80H6t4vdZ8JEOhQ==","_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"0.3.5","@djodjonx/gwen-engine-core":"0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.5_1773067947746_0.8486312225707877","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.6","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.6","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"bc169fc3d4a1c6e5eaf53202593a857b4ffa29d6","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.6.tgz","fileCount":6,"integrity":"sha512-ZRfj/pRQpKRZ+U3SvNqxkclg1dg8vxjH+VT34+awZ6k3CeDA8wobyqq8SlrNpPuCYWS3viFjYoY0KRst/PpaeA==","signatures":[{"sig":"MEYCIQCRYFdK3bVdfse3ZpxNLWGJFHR09NIHIEYz3b4tjMc1lQIhANUlPdDohIrVAM567qyNBFBmXVD/KmEmfxucTMaLxdcA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39495},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","_from":"file:djodjonx-gwen-renderer-canvas2d-0.3.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/bd57555e6cdf69dde9f3d7b597c74167/djodjonx-gwen-renderer-canvas2d-0.3.6.tgz","_integrity":"sha512-ZRfj/pRQpKRZ+U3SvNqxkclg1dg8vxjH+VT34+awZ6k3CeDA8wobyqq8SlrNpPuCYWS3viFjYoY0KRst/PpaeA==","_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"0.3.6","@djodjonx/gwen-engine-core":"0.3.6"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.6_1773070019740_0.8131968594370149","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"0.3.7","_id":"@djodjonx/gwen-renderer-canvas2d@0.3.7","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"dist":{"shasum":"165ccb5aa0559eb414e81d7b11b2d79187624f78","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-0.3.7.tgz","fileCount":6,"integrity":"sha512-zAumtGzqiohnk5g2QczxiJq+42wE7bzUbqE5jgkG1QfQMyY9yL86sY+Z/sxoGUD2qEorkvttFP7uqUO6Ttngrg==","signatures":[{"sig":"MEUCIQCRrpSSKsTOU4/0zxnWyxI1wuwoQPa67q7T12y5bgW5ugIgayT3OSjtqIc8LCp8J5bRBIxQbBBKx3eMC4A2TxCmIMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39003},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"main":"./dist/index.js","type":"module","_from":"file:djodjonx-gwen-renderer-canvas2d-0.3.7.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","watch":"vite build --watch"},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/fb2711be6f9514971c18141463f6e15d/djodjonx-gwen-renderer-canvas2d-0.3.7.tgz","_integrity":"sha512-zAumtGzqiohnk5g2QczxiJq+42wE7bzUbqE5jgkG1QfQMyY9yL86sY+Z/sxoGUD2qEorkvttFP7uqUO6Ttngrg==","_npmVersion":"10.9.4","description":"GWEN Canvas2D Renderer Plugin","directories":{},"_nodeVersion":"22.21.0","dependencies":{"@djodjonx/gwen-kit":"0.3.7","@djodjonx/gwen-engine-core":"0.3.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/gwen-renderer-canvas2d_0.3.7_1773311974155_0.9539562677457674","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@djodjonx/gwen-renderer-canvas2d","version":"1.0.0","description":"GWEN Canvas2D Renderer Plugin","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"@djodjonx/gwen-engine-core":"1.0.0","@djodjonx/gwen-kit":"1.0.0"},"devDependencies":{"typescript":"^5.9.3","vite":"^7.3.1","vite-plugin-dts":"^4.5.4","vitest":"^4.0.18"},"gwen":{"type":"typescript","serviceTypes":{"renderer":{"from":"@djodjonx/gwen-renderer-canvas2d","exportName":"Canvas2DRendererService"}}},"scripts":{"dev":"vite","build":"vite build","test":"vitest run","watch":"vite build --watch"},"_id":"@djodjonx/gwen-renderer-canvas2d@1.0.0","_integrity":"sha512-8rCTaxZt3suO58ZY/8qBkFP4oO/0rsfTkKRWl1wiskjIRDmhXKnbgzXzS3YdgT3wIsTNSv/p3dYBWLjPFbUV/g==","_resolved":"/private/var/folders/vc/41dnkkc11kqfyrhq8hmhj9400000gn/T/fc3e94754b15e6404ec4a65aa0b81bc6/djodjonx-gwen-renderer-canvas2d-1.0.0.tgz","_from":"file:djodjonx-gwen-renderer-canvas2d-1.0.0.tgz","_nodeVersion":"22.21.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-8rCTaxZt3suO58ZY/8qBkFP4oO/0rsfTkKRWl1wiskjIRDmhXKnbgzXzS3YdgT3wIsTNSv/p3dYBWLjPFbUV/g==","shasum":"dd92ee9727402eba8eb9090e7d1097a719399e04","tarball":"https://registry.npmjs.org/@djodjonx/gwen-renderer-canvas2d/-/gwen-renderer-canvas2d-1.0.0.tgz","fileCount":6,"unpackedSize":39003,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCoHgXCCN3J3z7urpicXeUkLu6nXoPN+6dD00o+yn4inAIgCrphlhB13s+aByBu3/6ZI6Y6RZGXFd0ysTUryCJ/itE="}]},"_npmUser":{"name":"djodjonx","email":"djo.moutier@gmail.com"},"directories":{},"maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gwen-renderer-canvas2d_1.0.0_1773671197520_0.41377719605332586"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-09T10:46:04.108Z","modified":"2026-03-16T14:26:38.975Z","0.3.1":"2026-03-09T10:46:04.407Z","0.3.2":"2026-03-09T13:59:07.683Z","0.3.3":"2026-03-09T14:21:32.162Z","0.3.4":"2026-03-09T14:47:39.797Z","0.3.5":"2026-03-09T14:52:27.888Z","0.3.6":"2026-03-09T15:26:59.879Z","0.3.7":"2026-03-12T10:39:34.293Z","1.0.0":"2026-03-16T14:26:37.688Z"},"description":"GWEN Canvas2D Renderer Plugin","maintainers":[{"name":"djodjonx","email":"djo.moutier@gmail.com"}],"readme":"#@djodjonx/gwen-renderer-canvas2d\n\n**GWEN Canvas2D Renderer Plugin — 2D rendering with HTML Canvas**\n\nRender sprites, shapes, and text using the Canvas 2D API.\n\n## Installation\n\n```bash\nnpm install@djodjonx/gwen-renderer-canvas2d\n```\n\n## Quick Start\n\n### Register the Plugin\n\n```typescript\n// gwen.config.ts\nimport { defineConfig } from '@djodjonx/gwen-kit';\nimport { Canvas2DRenderer } from '@djodjonx/gwen-renderer-canvas2d';\n\nexport default defineConfig({\n  canvas: 'game-canvas', // ID of your canvas element\n  plugins: [new Canvas2DRenderer()],\n});\n```\n\n### HTML Setup\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <title>My Game</title>\n    <style>\n      canvas {\n        display: block;\n        background: #222;\n      }\n    </style>\n  </head>\n  <body>\n    <canvas id=\"game-canvas\" width=\"800\" height=\"600\"></canvas>\n    <script type=\"module\" src=\"/src/main.ts\"></script>\n  </body>\n</html>\n```\n\n## API Reference\n\n### Rendering Primitives\n\n```typescript\nconst renderer = api.services.get('renderer');\n\n// Clear canvas\nrenderer.clear('#222222');\n\n// Fill rectangle\nrenderer.fillRect(x, y, width, height, color);\n\n// Draw outlined rectangle\nrenderer.strokeRect(x, y, width, height, color, lineWidth);\n\n// Fill circle\nrenderer.fillCircle(x, y, radius, color);\n\n// Draw outlined circle\nrenderer.strokeCircle(x, y, radius, color, lineWidth);\n\n// Draw sprite/image\nrenderer.drawImage(image, x, y, width, height);\n\n// Draw text\nrenderer.drawText(text, x, y, { font: '16px Arial', color: '#fff' });\n```\n\n### Camera Control\n\n```typescript\n// Set camera position\nrenderer.setCamera(centerX, centerY);\n\n// Set camera scale (zoom)\nrenderer.setZoom(scale);\n\n// Translate canvas\nrenderer.translate(x, y);\n```\n\n## Examples\n\n### Drawing a Simple Scene\n\n```typescript\nconst renderer = api.services.get('renderer');\n\nexport function renderGame() {\n  // Clear\n  renderer.clear('#1a1a1a');\n\n  // Background\n  renderer.fillRect(0, 0, 800, 600, '#2d2d2d');\n\n  // Draw player\n  renderer.fillCircle(playerX, playerY, 16, '#00ff00');\n\n  // Draw enemies\n  for (const enemy of enemies) {\n    renderer.fillRect(enemy.x, enemy.y, 20, 20, '#ff0000');\n  }\n\n  // HUD text\n  renderer.drawText(`Score: ${score}`, 10, 30, {\n    font: 'bold 20px Arial',\n    color: '#ffffff',\n  });\n}\n```\n\n### Camera-Following Gameplay\n\n```typescript\nfunction updateCamera() {\n  const renderer = api.services.get('renderer');\n  const screenWidth = 800;\n  const screenHeight = 600;\n\n  // Center camera on player\n  renderer.setCamera(playerX - screenWidth / 2, playerY - screenHeight / 2);\n}\n```\n\n### Sprite Sheet Animation\n\n```typescript\nfunction drawAnimatedSprite(sheet, frameIndex, x, y) {\n  const frameWidth = 64;\n  const frameHeight = 64;\n  const row = Math.floor(frameIndex / 8);\n  const col = frameIndex % 8;\n\n  const sourceX = col * frameWidth;\n  const sourceY = row * frameHeight;\n\n  renderer.drawImage(sheet, x, y, frameWidth, frameHeight, {\n    sourceX,\n    sourceY,\n    sourceWidth: frameWidth,\n    sourceHeight: frameHeight,\n  });\n}\n```\n\n## Performance Tips\n\n- Use `renderer.clear()` once per frame\n- Cache frequently-used colors as constants\n- Use `renderer.setCamera()` instead of translating individual objects\n- Consider sprite atlasing for many small sprites\n- Profile with [@djodjonx/gwen-plugin-debug](../plugin-debug/) to identify bottlenecks\n\n## Browser Compatibility\n\n- Canvas 2D API: All modern browsers\n- Best performance on Chrome 90+, Firefox 88+\n\n## See Also\n\n- [@djodjonx/gwen-engine-core](../engine-core/) — Core engine\n- [@djodjonx/gwen-plugin-debug](../plugin-debug/) — Performance monitoring\n- [MDN Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)\n","readmeFilename":"README.md"}