node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



Node wrapper for JSC3D, a cool little (unmaintained?) 3D model renderer originally written for the browser.

Supports in-memory, software rendering of certain 3D Models with a simple interface, great for generating previews of STL or OBJ files.


Install locally with:

npm install --save jsc3d

NOTE: It (presently) relies on node-canvas for PNG rendering and canvas implementation. This requires Cairo and Pango to be installed on the host system. Read more here.

As library

Using render helper method

Provides a few helper methods, notably render, for more easily interacting with JSC3D. See bin/jsc3d.js for full example of using render.

const jsc3d = require('jsc3d');
const canvas = jsc3d.makeCairoCanvas(500, 500);
jsc3d.render({canvas}, () => {
    const buf = canvas.toBuffer(undefined, 3, canvas.PNG_FILTER_NONE);
    fs.writeFile(outputPath, buf, error => {
        if (error) {
            throw error;

Using JSC3D directly

The original JSC3D API is also directly exposed.

const jsc3d = require('jsc3d');
const canvas = jsc3d.makeCairoCanvas(500, 500);
const viewer = new jsc3d.Viewer(canvas);
viewer.setParameter('SceneUrl', 'path/to/file.stl');
viewer.setParameter('InitRotationX', -45);
viewer.setParameter('RenderMode', 'smooth');
jsc3d.onLoaded(() => {
    // Called when STL file has been read in 
    // At this point the canvas has been written to 

As stand-alone program

Install globally with

npm install -g jsc3d

Solid render

jsc3d examples/example.stl examples/example.png

Example default render

Example wireframe render

This node wrapper exposes all arguments as CLI arguments, also.

jsc3d \
    --ModelColor=#00ff00 \
    --RenderMode=wireframe \
    --BackgroundColor1=#000000 \
    --BackgroundColor2=#000000 \
    examples/example.stl \

Example wireframe render


To match JSC3D, this wrapper is also released under MIT License.


  • Background images do not load: need to mock HTML Image interface

  • Implement new, simpler mock canvas using Buffer to avoid Cairo dependency

  • Monkey patch JSC3D's BinaryStream with a faster implementation using Buffer