SCRIPT

High Performance Skia Canvas Implementation in Rust

Explore the high-performance Skia canvas implementation in Rust, designed for seamless integration with Node.js without system dependencies.

skia canvas rust node-api napi graphics drawing image-processing
High Performance Skia Canvas Implementation in Rust

๐Ÿ“ฆ Get High Performance Skia Canvas Implementation in Rust

vmainยท MIT Licenseยท โญ 2.3K stars ยท Updated Sep 18, 2026

If you are a developer looking for a powerful graphics solution that integrates seamlessly with Node.js, the Skia Canvas implementation by Brooooooklyn might just be what you need. This library provides a high-performance canvas using the Skia graphics engine, enabling you to create stunning graphics without worrying about system dependencies. With its simplicity and efficiency, it's perfect for both server-side and client-side rendering.

What Is Skia Canvas?

The Skia Canvas library is a Rust-based implementation that binds the Google Skia graphics engine to Node.js via the Node-API (N-API). This allows developers to utilize the powerful features of Skia for rendering graphics directly in their Node.js applications. One of the most significant advantages is that it has zero system dependencies, making it easy to install and deploy across different environments.

Key Features

  • High Performance: Built on Skia, this canvas implementation is optimized for speed, making it suitable for applications requiring real-time graphics.
  • Zero System Dependencies: With no external dependencies to worry about, developers can focus on building features instead of managing libraries.
  • Easy Installation: Installing the library is straightforward with npm or yarn, allowing quick integration into existing projects.
  • Cross-Platform Support: The library supports various architectures, including ARM64 and ARMv7, making it versatile for different deployment environments.
  • Image Handling: Easily load and manipulate images from both local and remote sources, enabling dynamic graphics generation.
  • Rich API: The API provides a comprehensive set of functions for drawing shapes, colors, and images, making it suitable for complex graphic applications.
  • Compatibility with AWS Lambda: A dedicated Lambda layer is available for easy deployment in serverless environments, expanding the library's usage.
  • Active Community: With over 2,292 stars on GitHub, the project has a vibrant community, ensuring continuous improvements and support.

Installation & Setup

Installing the Skia Canvas library is a breeze. You can use either npm or yarn to include it in your project. Here are the commands:

CODE
npm install @napi-rs/canvas
CODE
yarn add @napi-rs/canvas

Make sure you have a compatible system as outlined in the support matrix. The library requires a minimum glibc version of 2.18, so ensure your environment meets this requirement.

How to Use It

Once installed, using the Skia Canvas is as simple as following the example below. This code snippet demonstrates how to create a canvas, draw shapes, and load images:

CODE
const { promises } = require('node:fs')
const { join } = require('node:path')
const { createCanvas, loadImage } = require('@napi-rs/canvas')

const canvas = createCanvas(300, 320)
const ctx = canvas.getContext('2d')

ctx.lineWidth = 10
ctx.strokeStyle = '#03a9f4'
ctx.fillStyle = '#03a9f4'

// Wall
ctx.strokeRect(75, 140, 150, 110)

// Door
ctx.fillRect(130, 190, 40, 60)

// Roof
ctx.beginPath()
ctx.moveTo(50, 140)
ctx.lineTo(150, 60)
ctx.lineTo(250, 140)
ctx.closePath()
ctx.stroke()

async function main() {
  // load images from disk or from a URL
  const catImage = await loadImage('path/to/cat.png')
  const dogImage = await loadImage('https://example.com/path/to/dog.jpg')

  ctx.drawImage(catImage, 0, 0, catImage.width, catImage.height)
  ctx.drawImage(dogImage, canvas.width / 2, canvas.height / 2, dogImage.width, dogImage.height)

  // export canvas as image
  const pngData = await canvas.toBuffer()
}
main()

This example showcases how to create a simple house drawing and load images to be drawn on the canvas. The loadImage function can fetch images from both local paths and URLs, providing flexibility in how you use the canvas.

Who Should Use Skia Canvas?

The Skia Canvas library is an excellent choice for developers working on Node.js applications that require high-performance graphics rendering. It is particularly useful for:

  • Game developers looking for a lightweight graphics engine.
  • Web developers who need server-side image processing capabilities.
  • Anyone building applications that involve dynamic graphics, such as data visualization tools.
  • Developers looking for a straightforward yet powerful library with minimal setup.

Final Thoughts

In conclusion, the Skia Canvas implementation by Brooooooklyn stands out as a robust solution for developers needing efficient graphics rendering in their Node.js applications. Its performance, ease of use, and lack of system dependencies make it an attractive option for many use cases. Whether you are building a simple drawing application or a more complex game, Skia Canvas provides the tools you need to bring your graphics to life.

ScriptForge Admin

Senior developer and curator of the ScriptForge platform. Specializing in PHP, Laravel, and full-stack JavaScript development.

gh
๐•
๐ŸŒ