
Security News
Another Round of TEA Protocol Spam Floods npm, But It’s Not a Worm
Recent coverage mislabels the latest TEA protocol spam as a worm. Here’s what’s actually happening.
canvaskit-wasm
Advanced tools
A WASM version of Skia's Canvas API.
See https://skia.org/user/modules/canvaskit for more background information.
To use the library, run npm install canvaskit-wasm and then simply include it:
<script src="/node_modules/canvaskit-wasm/bin/canvaskit.js"></script>
CanvasKitInit({
locateFile: (file) => '/node_modules/canvaskit-wasm/bin/'+file,
}).then((CanvasKit) => {
// Code goes here using CanvasKit
});
As with all npm packages, there's a freely available CDN via unpkg.com:
<script src="https://unpkg.com/canvaskit-wasm@latest/bin/canvaskit.js"></script>
CanvasKitInit({
locateFile: (file) => 'https://unpkg.com/canvaskit-wasm@latest/bin/'+file,
}).then((CanvasKit) => {
// Code goes here using CanvasKit
});
To use CanvasKit in Node, it's similar to the browser:
const CanvasKitInit = require('canvaskit-wasm/bin/canvaskit.js');
CanvasKitInit({
locateFile: (file) => __dirname + '/bin/'+file,
}).then((CanvasKit) => {
// Code goes here using CanvasKit
});
WebPack's support for WASM is still somewhat experimental, but CanvasKit can be used with a few configuration changes.
In the JS code, use require():
const CanvasKitInit = require('canvaskit-wasm/bin/canvaskit.js')
CanvasKitInit().then((CanvasKit) => {
// Code goes here using CanvasKit
});
Since WebPack does not expose the entire /node_modules/ directory, but instead
packages only the needed pieces, we have to copy canvaskit.wasm into the build directory.
One such solution is to use CopyWebpackPlugin.
For example, add the following plugin:
config.plugins.push(
new CopyWebpackPlugin([
{ from: 'node_modules/canvaskit-wasm/bin/canvaskit.wasm' }
])
);
If webpack gives an error similar to:
ERROR in ./node_modules/canvaskit-wasm/bin/canvaskit.js
Module not found: Error: Can't resolve 'fs' in '...'
Then, add the following configuration change to the node section of the config:
config.node = {
fs: 'empty'
};
canvaskit-wasm includes 3 types of bundles:
./bin/canvaskit.js - Basic canvaskit functionalityconst InitCanvasKit = require('canvaskit-wasm/bin/canvaskit');
./bin/full/canvaskit.js - includes Skottie and other librariesconst InitCanvasKit = require('canvaskit-wasm/bin/full/canvaskit');
./bin/profiling/canvaskit.js - the same as full but contains full names of wasm functions called internallyconst InitCanvasKit = require('canvaskit-wasm/bin/profiling/canvaskit');
This package also exposes entrypoints
import InitCanvasKit from 'canvaskit-wasm'; // default
import InitCanvasKit from 'canvaskit-wasm/full';
import InitCanvasKit from 'canvaskit-wasm/profiling';
If you use typescript
you need to enable resolvePackageJsonExports in your tsconfig.json
{
"compilerOptions": {
"resolvePackageJsonExports": true
}
}
See example.html and node.example.js for demos of how to use the core API.
See extra.html for some optional add-ins like an animation player (Skottie).
See types/index.d.ts for a typescript definition file that contains all the
APIs and some documentation about them.
For environments where an HTML canvas is not available (e.g. Node, headless servers), CanvasKit has an optional API (included by default) that mostly mirrors the CanvasRenderingContext2D.
const skcanvas = CanvasKit.MakeCanvas(600, 600);
const ctx = skcanvas.getContext('2d');
const rgradient = ctx.createRadialGradient(200, 300, 10, 100, 100, 300);
// Add three color stops
rgradient.addColorStop(0, 'red');
rgradient.addColorStop(0.7, 'white');
rgradient.addColorStop(1, 'blue');
ctx.fillStyle = rgradient;
ctx.globalAlpha = 0.7;
ctx.fillRect(0, 0, 600, 600);
const imgData = skcanvas.toDataURL();
// imgData is now a base64 encoded image.
See more examples in example.html and node.example.js.
Please file bugs at https://skbug.com. It may be convenient to use our online fiddle to demonstrate any issues encountered.
See CONTRIBUTING.md for more information on sending pull requests.
There are Typescript types and associated API docs in types/.
PixiJS is a fast 2D rendering engine that uses WebGL and HTML5 Canvas. It is designed for creating interactive graphics and animations. Compared to canvaskit-wasm, PixiJS is more focused on game development and interactive applications, while canvaskit-wasm provides a more general-purpose 2D graphics API.
Three.js is a popular 3D graphics library that also supports 2D rendering. It uses WebGL to create complex 3D scenes and animations. While Three.js is primarily used for 3D graphics, it can also handle 2D graphics, making it a versatile alternative to canvaskit-wasm for projects that may require both 2D and 3D rendering.
p5.js is a JavaScript library that makes coding accessible for artists, designers, educators, and beginners. It provides a simple interface for creating graphics and interactive content. Compared to canvaskit-wasm, p5.js is more beginner-friendly and is often used in educational contexts to teach programming and graphics.
FAQs
A WASM version of Skia's Canvas API
The npm package canvaskit-wasm receives a total of 388,953 weekly downloads. As such, canvaskit-wasm popularity was classified as popular.
We found that canvaskit-wasm demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 10 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Recent coverage mislabels the latest TEA protocol spam as a worm. Here’s what’s actually happening.

Security News
PyPI adds Trusted Publishing support for GitLab Self-Managed as adoption reaches 25% of uploads

Research
/Security News
A malicious Chrome extension posing as an Ethereum wallet steals seed phrases by encoding them into Sui transactions, enabling full wallet takeover.