node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey »



Fast and efficient stl format parser

GitHub version

Build Status Dependency Status devDependency Status

  • Optimized for speed (webworkers)
  • And low memory consumption (streams)
  • works in Node.js & browser
  • there is currently no support for backpressure

Table of Contents


npm i @usco/stl-parser


  import makeParsedStream from '@usco/stl-parser'
  //for binary stl files
  fs.createReadStream('./someFile.stl', { encoding: null})
    .pipe(makeParsedStream({concat: true}))
    .on('data', function (parsed) {
      console.log('parsed', parsed)
      //DO what you want with the data
  //for ascii stl files
    .pipe(makeParsedStream({concat: true}))
    .on('data', function (parsed) {
      console.log('parsed', parsed)
      //DO what you want with the data


  • returns a node.js stream containing geometric (positions & normals) data in TypedArrays (Float32Array)
  • useable both on Node.js & client side

works something like this

raw data stream => raw chunks => | worker | => parsed chunks => concat

only exports a single function:


  • options.useWorker use web workers (browser only) defaults to true in browser
  • options.concat (default: true) when set to true, stream outputs a single value with all combined data , ie the whole mesh data: this is the default and it what you usually want to use


See the contribute file!

PRs accepted.

Small note: If editing the Readme, please conform to the standard-readme specification.

Code is written in the standard style.

JavaScript Style Guide


MIT © Mark Moissette