{"_id":"@daidr/minecraft-skin-renderer","_rev":"8-71473738c69d6ad155232abfd39ddd0b","name":"@daidr/minecraft-skin-renderer","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@daidr/minecraft-skin-renderer","version":"0.1.0","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.1.0","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"da94f3be63e299e0dc4e04fa8d66f0194c274a1f","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.1.0.tgz","fileCount":150,"integrity":"sha512-J7yl6U2mAO4DZLwmb5xoeSzRpfO3Yyi27pSprIFTK0pUqX9KWvdaLqzx2xHE0iYoDrykpOfxxsXThYrkpdvW5A==","signatures":[{"sig":"MEUCIEE/tw6IEiH0WQjavsYTH4gvoKST1Z4hNWOKJUvDHK7vAiEAz3g5ywL+z/FZr/qX6emaT0Q+Sts821ac5e7nqrgcuU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":554914},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./webgl":"./dist/webgl.mjs","./webgpu":"./dist/webgpu.mjs","./panorama":"./dist/panorama.mjs","./package.json":"./package.json"},"gitHead":"e7b28352060b1aeda3eb7f0fa2fcb407047e163d","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","postinstall":"git-hooks","test:coverage":"vitest --coverage","dev:playground":"vite playground","build:playground":"vite build playground","preview:playground":"vite preview playground"},"_npmUser":{"name":"daidr","email":"daidr@daidr.me"},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"_npmVersion":"10.8.2","description":"A browser-based Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","oxfmt":"^0.28.0","oxlint":"^1.43.0","tsdown":"^0.20.1","vitest":"^4.0.18","stats.js":"^0.17.0","happy-dom":"^20.4.0","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","@types/stats.js":"^0.17.4","oxlint-tsgolint":"^0.11.3","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.1.0_1770228527435_0.7176524941459197","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@daidr/minecraft-skin-renderer","version":"0.2.0","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.2.0","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"520eb5ac517981339d6cc29af0f69d3726852315","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.2.0.tgz","fileCount":198,"integrity":"sha512-yW+BZA4mNO8IiR6H8en+bhZYToH2bqhCqGkEaBllU95VyeY86jackD7F1VSoTAgi4xnrW3HPDSB64ng1aOBiTw==","signatures":[{"sig":"MEUCIDvKrpgRvqNORg97gdstFZQSl8H3T/g5SRm1NlNwbkv7AiEA0KSG5QGTLvPnZ8i/8U2UJzogMUGDPO1kAuiceLI5IM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1137566},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.js","./webgl":"./dist/webgl.js","./webgpu":"./dist/webgpu.js","./canvas2d":"./dist/canvas2d.js","./panorama":"./dist/panorama.js","./package.json":"./package.json"},"gitHead":"2bbaa60f4afdedba8caf001333f32e5dacce6a65","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","docs:dev":"bun run --cwd docs dev","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","bench:math":"bun run benchmarks/math/index.ts","docs:build":"bun run --cwd docs build","postinstall":"git-hooks","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","docs:preview":"bun run --cwd docs preview","test:coverage":"vitest --coverage","dev:playground":"bun run --cwd playground dev","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07699135-a199-4b44-97ef-5ec14d3af32c"}},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"workspaces":["playground","native-playground","docs"],"_npmVersion":"11.6.2","description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.28.0","mitata":"^1.0.34","oxlint":"^1.43.0","tsdown":"^0.20.3","vitest":"^4.0.18","happy-dom":"^20.5.1","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","oxlint-tsgolint":"^0.11.5","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.2.0_1770611088065_0.6594748021478181","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@daidr/minecraft-skin-renderer","version":"0.2.1","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.2.1","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"97d223936d14f6dae2c908b94d51150c494accaf","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.2.1.tgz","fileCount":198,"integrity":"sha512-bjlaHhGtOeTNLkbOrM8c+kH/xI1B9QZdp4LTrU3BMAY2t0vQpjNHJA8OIqMnaG/pq7QF/dA9W0lfIm3Tt3ChKw==","signatures":[{"sig":"MEUCIH+6PvefT0rbYhKg4g+GSr+iYtho81kUgvNKcVBZczBtAiEApi4xc6XhJxtSFppcYEOtyxhKNIjK2TXGZjCmThVDss4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1138508},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.js","./webgl":"./dist/webgl.js","./webgpu":"./dist/webgpu.js","./canvas2d":"./dist/canvas2d.js","./panorama":"./dist/panorama.js","./package.json":"./package.json"},"gitHead":"d41451915ce8ca8b339703555321eb3300ffe4ce","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","docs:dev":"bun run --cwd docs dev","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","bench:math":"bun run benchmarks/math/index.ts","docs:build":"bun run --cwd docs build","postinstall":"git-hooks","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","docs:preview":"bun run --cwd docs preview","test:coverage":"vitest --coverage","dev:playground":"bun run --cwd playground dev","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db833045-34dd-4022-ac6c-9b4fb0de0c92"}},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"workspaces":["playground","native-playground","docs"],"_npmVersion":"11.6.2","description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.28.0","mitata":"^1.0.34","oxlint":"^1.43.0","tsdown":"^0.20.3","vitest":"^4.0.18","happy-dom":"^20.5.1","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","oxlint-tsgolint":"^0.11.5","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.2.1_1770650708586_0.17133639066409123","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@daidr/minecraft-skin-renderer","version":"0.2.2","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.2.2","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"6261b6699f433426c5ad4df10ef88e164277c626","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.2.2.tgz","fileCount":214,"integrity":"sha512-MdGkHPpPThG0dhsLrXjLgU+lNbUmcbQSjhg2EiAyg/pZTgImpgMbV8OxviqGWpH7nCoDzqkQ08gs8iVH2fV26g==","signatures":[{"sig":"MEUCIQCOe75rfn+WAtgyi1ukCkWkC0PhYFx4LKfTWvgYpkxxsQIgWWXLPnMaaj8ndwd9K23jpMV7XJH7rYC5FPs5Z0ZzH24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1200593},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.js","./vue3":"./dist/vue3.js","./webgl":"./dist/webgl.js","./webgpu":"./dist/webgpu.js","./canvas2d":"./dist/canvas2d.js","./panorama":"./dist/panorama.js","./package.json":"./package.json"},"gitHead":"bc2b56e0ac18114890cba0d36f2d28ffbe991d93","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","docs:dev":"bun run --cwd docs dev","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","bench:math":"bun run benchmarks/math/index.ts","docs:build":"bun run --cwd docs build","postinstall":"git-hooks","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","docs:preview":"bun run --cwd docs preview","test:coverage":"vitest --coverage","dev:playground":"bun run --cwd playground dev","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db833045-34dd-4022-ac6c-9b4fb0de0c92"}},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"workspaces":["playground","native-playground","docs"],"_npmVersion":"11.6.2","description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","oxfmt":"^0.28.0","mitata":"^1.0.34","oxlint":"^1.43.0","tsdown":"^0.20.3","vitest":"^4.0.18","happy-dom":"^20.5.1","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","oxlint-tsgolint":"^0.11.5","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"vue":"^3.3.0"},"peerDependenciesMeta":{"vue":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.2.2_1770923167420_0.8761292662480165","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@daidr/minecraft-skin-renderer","version":"0.2.3","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.2.3","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"d6982ded75f9eaa068a1e3bf2892d656ff17fa19","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.2.3.tgz","fileCount":214,"integrity":"sha512-N0y8voIua9wpp6/qdtGrAk7m9skn43i2b96txa0re+xCWTSSNAT3y4n4PEnChGl6FWmC4jVLnJTbzYMbLN4muQ==","signatures":[{"sig":"MEUCIH82/OcvqTLg/EBI0ujdzfuStH0JWUXuZJNo+aUIU+coAiEAv2l3GLJxtZyGYHAjaLs6F5+GcY5XP3cFOLwD9GVfQJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1201891},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.js","./vue3":"./dist/vue3.js","./webgl":"./dist/webgl.js","./webgpu":"./dist/webgpu.js","./canvas2d":"./dist/canvas2d.js","./panorama":"./dist/panorama.js","./package.json":"./package.json"},"gitHead":"6d14e9407c9f380b653e42d79a81cdb25562d89d","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","docs:dev":"bun run --cwd docs dev","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","bench:math":"bun run benchmarks/math/index.ts","docs:build":"bun run --cwd docs build","postinstall":"git-hooks","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","docs:preview":"bun run --cwd docs preview","test:coverage":"vitest --coverage","dev:playground":"bun run --cwd playground dev","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db833045-34dd-4022-ac6c-9b4fb0de0c92"}},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"workspaces":["playground","native-playground","docs"],"_npmVersion":"11.8.0","description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"24.13.1","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","oxfmt":"^0.28.0","mitata":"^1.0.34","oxlint":"^1.43.0","tsdown":"^0.20.3","vitest":"^4.0.18","happy-dom":"^20.5.1","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","oxlint-tsgolint":"^0.11.5","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"vue":"^3.3.0"},"peerDependenciesMeta":{"vue":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.2.3_1772213881669_0.5049504690703412","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@daidr/minecraft-skin-renderer","version":"0.3.0","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.3.0","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"e03c90410724d821dbf84a57fe09d4b21d2e9144","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.3.0.tgz","fileCount":214,"integrity":"sha512-jEekD8axwlHadEkbc86gmMf7qlyDEJPeezHZJ3yvcJLzl1GtT75PuULoXVZUdiI7IBPxqzW2MuWk5aCEp7Fi1Q==","signatures":[{"sig":"MEYCIQCU0iaIzbsxEwDUP2SzReCQiAHG3zrSGkWd77ZmAtkZ7gIhAK7o01omd+jsmP2byQNbvftc2YRKzJt1p+i2qokQJx9I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1209696},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.js","./vue3":"./dist/vue3.js","./webgl":"./dist/webgl.js","./webgpu":"./dist/webgpu.js","./canvas2d":"./dist/canvas2d.js","./panorama":"./dist/panorama.js","./package.json":"./package.json"},"gitHead":"f525df659d963d5cddb3acd5ac2fd34eb810f86c","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","docs:dev":"bun run --cwd docs dev","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","bench:math":"bun run benchmarks/math/index.ts","docs:build":"bun run --cwd docs build","postinstall":"git-hooks","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","docs:preview":"bun run --cwd docs preview","test:coverage":"vitest --coverage","dev:playground":"bun run --cwd playground dev","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db833045-34dd-4022-ac6c-9b4fb0de0c92"}},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"workspaces":["playground","native-playground","docs"],"_npmVersion":"11.8.0","description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"24.13.1","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","oxfmt":"^0.28.0","mitata":"^1.0.34","oxlint":"^1.43.0","tsdown":"^0.20.3","vitest":"^4.0.18","happy-dom":"^20.5.1","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","oxlint-tsgolint":"^0.11.5","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"vue":"^3.3.0"},"peerDependenciesMeta":{"vue":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.3.0_1772281274126_0.7042827285401638","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@daidr/minecraft-skin-renderer","version":"0.3.1","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","_id":"@daidr/minecraft-skin-renderer@0.3.1","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"dist":{"shasum":"6a6b680de62352b5b58d958a192ac798a6ee4f09","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.3.1.tgz","fileCount":216,"integrity":"sha512-XocF4kTDWfbcL+O0k4rkx+eJEiht/RW3r08yqANxxp3QgHxVTTMcd8jQYUxCgansR0tjBzDiRCf0nPWbY/DaOQ==","signatures":[{"sig":"MEQCIGUlMhYAQjVMiuErOb8+OuJ6Lh34Jfa6BPrwDbVgPokOAiA/2Oqp6wV9B9O9aMlaH7yOdIaGtE2R0ddqCC/6QArQ1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1254050},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vue3":{"types":"./dist/vue3.d.ts","default":"./dist/vue3.js"},"./webgl":{"types":"./dist/webgl.d.ts","default":"./dist/webgl.js"},"./webgpu":{"types":"./dist/webgpu.d.ts","default":"./dist/webgpu.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"},"./panorama":{"types":"./dist/panorama.d.ts","default":"./dist/panorama.js"},"./package.json":"./package.json"},"gitHead":"faa4c6c577b2ad0fafb9df0fc87abd928d146d6f","private":false,"scripts":{"dev":"tsdown --watch","fmt":"oxfmt","lint":"oxlint --type-aware --type-check","test":"vitest","build":"tsdown","test:ui":"vitest --ui","docs:dev":"bun run --cwd docs dev","lint:fix":"oxlint --type-aware --type-check --fix","fmt:check":"oxfmt --check","bench:math":"bun run benchmarks/math/index.ts","docs:build":"bun run --cwd docs build","postinstall":"git-hooks","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","docs:preview":"bun run --cwd docs preview","test:coverage":"vitest --coverage","dev:playground":"bun run --cwd playground dev","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db833045-34dd-4022-ac6c-9b4fb0de0c92"}},"repository":{"url":"git+https://github.com/daidr/minecraft-skin-renderer.git","type":"git"},"workspaces":["playground","native-playground","docs"],"_npmVersion":"11.9.0","description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","oxfmt":"^0.28.0","mitata":"^1.0.34","oxlint":"^1.43.0","tsdown":"^0.20.3","vitest":"^4.0.18","happy-dom":"^20.5.1","@vitest/ui":"^4.0.18","typescript":"^5.9.3","lint-staged":"^16.2.7","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","@commitlint/cli":"^20.4.1","oxlint-tsgolint":"^0.11.5","@vitest/coverage-v8":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"vue":"^3.3.0"},"peerDependenciesMeta":{"vue":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/minecraft-skin-renderer_0.3.1_1772654540794_0.6832757916424077","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@daidr/minecraft-skin-renderer","version":"0.3.2","private":false,"description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"homepage":"https://mcskin.daidr.me","bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"license":"MIT","author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"repository":{"type":"git","url":"git+https://github.com/daidr/minecraft-skin-renderer.git"},"workspaces":["playground","native-playground","docs"],"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"},"./panorama":{"types":"./dist/panorama.d.ts","default":"./dist/panorama.js"},"./vue3":{"types":"./dist/vue3.d.ts","default":"./dist/vue3.js"},"./webgl":{"types":"./dist/webgl.d.ts","default":"./dist/webgl.js"},"./webgpu":{"types":"./dist/webgpu.d.ts","default":"./dist/webgpu.js"},"./package.json":"./package.json"},"scripts":{"build":"tsdown","dev":"tsdown --watch","dev:playground":"bun run --cwd playground dev","build:playground":"bun run --cwd playground build","preview:playground":"bun run --cwd playground preview","docs:dev":"bun run --cwd docs dev","docs:build":"bun run --cwd docs build","docs:preview":"bun run --cwd docs preview","build:deploy":"bun run docs:build && bun run build:playground && mkdir -p docs/.vitepress/dist/playground && cp -r dist-playground/* docs/.vitepress/dist/playground/","test":"vitest","test:ui":"vitest --ui","test:coverage":"vitest --coverage","fmt":"oxfmt","fmt:check":"oxfmt --check","lint":"oxlint --type-aware --type-check","lint:fix":"oxlint --type-aware --type-check --fix","bench:math":"bun run benchmarks/math/index.ts","bench:math:vec3":"bun run benchmarks/math/vec3.bench.ts","bench:math:mat4":"bun run benchmarks/math/mat4.bench.ts","bench:math:quat":"bun run benchmarks/math/quat.bench.ts","bench:math:utils":"bun run benchmarks/math/utils.bench.ts","postinstall":"git-hooks"},"devDependencies":{"@commitlint/cli":"^20.4.1","@commitlint/config-conventional":"^20.4.1","@vitest/coverage-v8":"^4.0.18","@vitest/ui":"^4.0.18","@webgpu/types":"^0.1.69","bun-git-hooks":"^0.3.1","happy-dom":"^20.5.1","lint-staged":"^16.2.7","mitata":"^1.0.34","oxfmt":"^0.28.0","oxlint":"^1.43.0","oxlint-tsgolint":"^0.11.5","tsdown":"^0.20.3","typescript":"^5.9.3","vitest":"^4.0.18","vitest-webgl-canvas-mock":"^1.1.0","vue":"^3.5.0"},"peerDependencies":{"vue":"^3.3.0"},"peerDependenciesMeta":{"vue":{"optional":true}},"lint-staged":{"*.{js,jsx,ts,tsx,mjs,cjs,vue}":"bun run lint"},"gitHead":"3e386f2c5108eeb00f88494b5036927786982bcd","_id":"@daidr/minecraft-skin-renderer@0.3.2","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-OxHI18ih6zABnFH3jhjHLeJNH0gbCiDcxYOSnQgCJ71HbEag0CeQDFFewYXBSPeUm9BwZr+tzSQk1S0hFk7wXQ==","shasum":"e209561ba64e8e99424dd47307383c84fe086745","tarball":"https://registry.npmjs.org/@daidr/minecraft-skin-renderer/-/minecraft-skin-renderer-0.3.2.tgz","fileCount":216,"unpackedSize":1274859,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daidr%2fminecraft-skin-renderer@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCD3/610slDMwCf6mcEdtxe6HCk6LYIjX/4NF9LFfVTsQIgeynJ3YHENsgl7Tw5Qx5luaIhdO31Idbku0JKM4r9AJo="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db833045-34dd-4022-ac6c-9b4fb0de0c92"}},"directories":{},"maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/minecraft-skin-renderer_0.3.2_1774725763190_0.7034319722257325"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-04T18:08:47.318Z","modified":"2026-03-28T19:22:43.705Z","0.1.0":"2026-02-04T18:08:47.653Z","0.2.0":"2026-02-09T04:24:48.283Z","0.2.1":"2026-02-09T15:25:08.756Z","0.2.2":"2026-02-12T19:06:07.615Z","0.2.3":"2026-02-27T17:38:01.860Z","0.3.0":"2026-02-28T12:21:14.306Z","0.3.1":"2026-03-04T20:02:21.001Z","0.3.2":"2026-03-28T19:22:43.428Z"},"bugs":{"url":"https://github.com/daidr/minecraft-skin-renderer/issues"},"author":{"name":"Dai Xuezhou","email":"i@daidr.me"},"license":"MIT","homepage":"https://mcskin.daidr.me","keywords":["3d","canvas","minecraft","renderer","skin","webgl","webgpu"],"repository":{"type":"git","url":"git+https://github.com/daidr/minecraft-skin-renderer.git"},"description":"A zero-dependency Minecraft skin renderer with WebGL and WebGPU support","maintainers":[{"name":"daidr","email":"daidr@daidr.me"}],"readme":"# minecraft-skin-renderer\n\n[![npm version](https://img.shields.io/npm/v/@daidr/minecraft-skin-renderer.svg)](https://www.npmjs.com/package/@daidr/minecraft-skin-renderer)\n[![JSR](https://jsr.io/badges/@daidr/minecraft-skin-renderer)](https://jsr.io/@daidr/minecraft-skin-renderer)\n[![JSR Score](https://jsr.io/badges/@daidr/minecraft-skin-renderer/score)](https://jsr.io/@daidr/minecraft-skin-renderer)\n[![GitHub Packages](https://img.shields.io/badge/GitHub%20Packages-available-blue?logo=github)](https://github.com/daidr/minecraft-skin-renderer/pkgs/npm/minecraft-skin-renderer)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA high-performance, browser-based 3D Minecraft skin renderer with WebGL and WebGPU support.\n\n[Online Documentation](https://mcskin.daidr.me)\n\n[Online Demo](https://mcskin.daidr.me/playground/)\n\n## Features\n\n- **Dual Rendering Backends** - WebGL2 for broad compatibility, WebGPU for modern performance\n- **Skin Variants** - Classic (4px arms) and slim (3px arms) model support\n- **Back Equipment** - Cape and elytra rendering\n- **Animations** - Built-in presets (idle, walk, run, fly) with custom animation support\n- **Camera Controls** - Orbit controls with zoom, rotation, and auto-rotate\n- **Panorama Backgrounds** - Equirectangular panorama support via plugin\n- **2D Static Rendering** - Lightweight Canvas 2D renders (avatar, full body, isometric, big head)\n- **Screenshot Export** - Export renders as PNG or JPEG\n- **Tree-Shakable** - Plugin architecture for minimal bundle size\n\n## Quick Start\n\n### Installation\n\n```bash\n# npm\nnpm install minecraft-skin-renderer\n\n# pnpm\npnpm add minecraft-skin-renderer\n\n# yarn\nyarn add minecraft-skin-renderer\n\n# bun\nbun add minecraft-skin-renderer\n```\n\n### Basic Usage\n\n```typescript\nimport { use, createSkinViewer } from \"minecraft-skin-renderer\";\nimport { WebGLRendererPlugin } from \"minecraft-skin-renderer/webgl\";\n\n// Register renderer plugin (required before creating viewer)\nuse(WebGLRendererPlugin);\n\n// Create viewer\nconst viewer = await createSkinViewer({\n  canvas: document.getElementById(\"canvas\") as HTMLCanvasElement,\n  skin: \"https://example.com/skin.png\",\n});\n\n// Start rendering\nviewer.startRenderLoop();\n\n// Play animation\nviewer.playAnimation(\"walk\");\n```\n\n## API Reference\n\n### `use(plugin)`\n\nRegister a renderer or feature plugin. Must be called before `createSkinViewer()`.\n\n```typescript\nimport { use } from \"minecraft-skin-renderer\";\nimport { WebGLRendererPlugin } from \"minecraft-skin-renderer/webgl\";\nimport { WebGPURendererPlugin } from \"minecraft-skin-renderer/webgpu\";\nimport { PanoramaPlugin } from \"minecraft-skin-renderer/panorama\";\n\nuse(WebGLRendererPlugin);\nuse(WebGPURendererPlugin);\nuse(PanoramaPlugin);\n```\n\n### `createSkinViewer(options)`\n\nCreate and initialize a skin viewer instance.\n\n```typescript\nconst viewer = await createSkinViewer({\n  canvas: HTMLCanvasElement, // Required: canvas element\n  preferredBackend: \"auto\", // 'webgl' | 'webgpu' | 'auto'\n  antialias: true, // Enable antialiasing\n  pixelRatio: window.devicePixelRatio,\n  skin: \"url\" | File | Blob, // Skin texture source\n  cape: \"url\" | File | Blob, // Cape texture (64x32)\n  backEquipment: \"none\", // 'cape' | 'elytra' | 'none'\n  slim: false, // Use slim model variant\n  fov: 70, // Field of view in degrees\n  zoom: 60, // Initial zoom distance\n  enableRotate: true, // Enable orbit rotation\n  enableZoom: true, // Enable zoom controls\n  autoRotate: false, // Auto-rotate camera\n  autoRotateSpeed: 30, // Degrees per second\n  panorama: \"url\", // Panorama background (requires PanoramaPlugin)\n});\n```\n\n### SkinViewer Methods\n\n#### Textures\n\n```typescript\nawait viewer.setSkin(source); // Set skin texture\nawait viewer.setCape(source); // Set cape texture\nviewer.setSlim(true); // Switch to slim model\nviewer.setBackEquipment(\"cape\"); // 'cape' | 'elytra' | 'none'\n```\n\n#### Visibility\n\n```typescript\n// Get current visibility state\nconst visibility = viewer.getPartsVisibility();\n\n// Set visibility for all parts\nviewer.setPartsVisibility({\n  head: { inner: true, outer: true },\n  body: { inner: true, outer: false },\n  // ...\n});\n\n// Set single part visibility\nviewer.setPartVisibility(\"head\", \"outer\", false);\n```\n\n#### Animation\n\n```typescript\nviewer.playAnimation(\"walk\"); // Play animation\nviewer.playAnimation(\"walk\", {\n  // With options\n  speed: 1.5,\n  amplitude: 1.0,\n});\nviewer.pauseAnimation(); // Pause\nviewer.resumeAnimation(); // Resume\nviewer.stopAnimation(); // Stop\n```\n\n#### Camera\n\n```typescript\nviewer.setRotation(theta, phi); // Set camera angles\nconst { theta, phi } = viewer.getRotation();\nviewer.setZoom(80); // Set zoom distance\nviewer.getZoom(); // Get current zoom\nviewer.setAutoRotate(true); // Toggle auto-rotate\nviewer.resetCamera(); // Reset to default\n```\n\n#### Rendering\n\n```typescript\nviewer.render(); // Manual render\nviewer.startRenderLoop(); // Start RAF loop\nviewer.stopRenderLoop(); // Stop RAF loop\nviewer.resize(width, height); // Resize canvas\nconst dataUrl = viewer.screenshot(\"png\", 0.9); // Export\n```\n\n#### Lifecycle\n\n```typescript\nviewer.dispose(); // Clean up resources\n```\n\n#### Properties\n\n```typescript\nviewer.backend; // 'webgl' | 'webgpu' (readonly)\nviewer.isPlaying; // Animation playing (readonly)\nviewer.currentAnimation; // Current animation name (readonly)\nviewer.backEquipment; // Current back equipment (readonly)\n```\n\n### Plugins\n\n| Plugin   | Import Path                        | Description                 |\n| -------- | ---------------------------------- | --------------------------- |\n| WebGL    | `minecraft-skin-renderer/webgl`    | WebGL2 rendering backend    |\n| WebGPU   | `minecraft-skin-renderer/webgpu`   | WebGPU rendering backend    |\n| Panorama | `minecraft-skin-renderer/panorama` | Panorama background support |\n| Canvas2D | `minecraft-skin-renderer/canvas2d` | 2D static rendering module  |\n\n### Canvas 2D Rendering\n\nLightweight 2D rendering module using Canvas 2D API — no WebGL/WebGPU required.\n\n```typescript\nimport {\n  renderAvatar,\n  renderSkinFront,\n  renderSkinBack,\n  renderSkinSide,\n  renderSkinIsometric,\n  renderHalfBody,\n  renderBigHead,\n} from \"minecraft-skin-renderer/canvas2d\";\n\nconst canvas = document.getElementById(\"canvas\") as HTMLCanvasElement;\n\n// Render head avatar\nawait renderAvatar(canvas, {\n  skin: \"https://example.com/skin.png\",\n});\n\n// Render full body front view\nawait renderSkinFront(canvas, {\n  skin: \"https://example.com/skin.png\",\n  slim: true, // Use slim model variant\n  scale: 8, // 1 MC pixel = 8 screen pixels (default)\n  showOverlay: true, // Show outer overlay layer (default)\n  overlayInflated: false, // Inflate overlay like 3D (default false)\n});\n\n// Render big head (Q-version) style\nawait renderBigHead(canvas, {\n  skin: \"https://example.com/skin.png\",\n  border: 2, // Border width in virtual pixels (default 2)\n  borderColor: \"black\", // Border color (default 'black')\n});\n```\n\n#### Render Functions\n\n| Function              | Description                            |\n| --------------------- | -------------------------------------- |\n| `renderAvatar`        | Head front face (8×8 MC pixels)        |\n| `renderSkinFront`     | Full body front view                   |\n| `renderSkinBack`      | Full body back view                    |\n| `renderSkinSide`      | Full body side view                    |\n| `renderSkinIsometric` | 2.5D isometric view                    |\n| `renderHalfBody`      | Upper body portrait                    |\n| `renderBigHead`       | Big head (Q-version) style with border |\n\n#### Common Options (`BaseRenderOptions`)\n\n| Option            | Type            | Default  | Description                                                |\n| ----------------- | --------------- | -------- | ---------------------------------------------------------- |\n| `skin`            | `TextureSource` | required | Skin texture (URL, Blob, HTMLImageElement, or ImageBitmap) |\n| `slim`            | `boolean`       | `false`  | Use slim (3px) arm model                                   |\n| `showOverlay`     | `boolean`       | `true`   | Show outer overlay layer                                   |\n| `scale`           | `number`        | `8`      | Pixel scale (1 MC pixel = scale screen pixels)             |\n| `overlayInflated` | `boolean`       | `false`  | Render overlay slightly larger (3D-like)                   |\n\n`renderBigHead` also accepts `border` (default `2`) and `borderColor` (default `'black'`).\n\nAll functions accept `(canvas: HTMLCanvasElement, options)` and return `Promise<void>`. The canvas is automatically resized to fit the rendered content.\n\n### Built-in Animations\n\n| Name   | Description              |\n| ------ | ------------------------ |\n| `idle` | Standing idle animation  |\n| `walk` | Walking animation        |\n| `run`  | Running animation        |\n| `fly`  | Flying/gliding animation |\n\n## Development\n\n### Prerequisites\n\n- Node.js 18+ or Bun\n\n### Setup\n\n```bash\n# Install dependencies\nbun install\n```\n\n### Scripts\n\n| Command              | Description               |\n| -------------------- | ------------------------- |\n| `bun run build`      | Build library with tsdown |\n| `bun dev`            | Build in watch mode       |\n| `bun dev:playground` | Run playground dev server |\n| `bun test`           | Run tests                 |\n| `bun test:coverage`  | Run tests with coverage   |\n| `bun lint`           | Lint with oxlint          |\n| `bun lint:fix`       | Lint and auto-fix         |\n| `bun fmt`            | Format with oxfmt         |\n\n### Project Structure\n\n```\nsrc/\n├── core/\n│   ├── renderer/     # Renderer abstraction (WebGL/WebGPU)\n│   ├── math/         # Math utilities (Vec3, Mat4, Quat)\n│   ├── camera/       # Camera system\n│   └── plugins/      # Plugin registry\n├── model/            # Skeleton and geometry\n├── animation/        # Animation system\n├── viewer/           # Main SkinViewer\n└── plugins/          # Plugin implementations\n```\n\n### Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'feat: add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}