npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tulind-maintained

v1.0.1

Published

Maintained fork of Tulip Indicators - Over 100 Technical Analysis Functions with modern Node.js support

Readme

Build Status Build Status npm

Tulind Maintained

📢 Important Notice: This is a maintained fork of the original tulipnode project by Lewis Van Winkle. The original project appears to be unmaintained with pending PRs not being merged. This fork provides compatibility with modern Node.js versions and ongoing maintenance.

Why This Fork?

  • Modern Node.js Support: Works with Node.js 16, 18, 20, and 22 (LTS versions)
  • Updated Dependencies: All dependencies updated to latest versions
  • Active Maintenance: Bugs are fixed and PRs are reviewed
  • Community Driven: Welcoming contributions from the community
  • Same Great API: Drop-in replacement for the original tulind package

All credit for the original implementation and design goes to Lewis Van Winkle and the Tulip Indicators project.


About Tulip Indicators

Tulip Node is the official node.js wrapper for Tulip Indicators. It provides 100+ technical analysis indicator functions, such as: simple moving average, Bollinger Bands, MACD, Parabolic SAR, Stochastic Oscillator, and many more.

Installation

Installation should just be:

npm install tulind-maintained

Or if migrating from the original package:

npm uninstall tulind
npm install tulind-maintained

Then update your imports:

// Old
// const tulind = require("tulind");

// New
const tulind = require("tulind-maintained");

It should work on Windows, Os X, and Linux. Node version 16, 18, 20, and 22 (LTS) are tested and supported on each platform.

Note that pre-compiled binaries are available for Windows. For other platforms you will need a C++ build environment installed. On Linux based distributions this can be achieved by installing build-essential package.

You can force building from source with:

npm install tulind-maintained --build-from-source

If you run into problems, let me know. I want this to be easy for everyone to use.

Usage

Tulip Node is very easy to use.

var tulind = require("tulind-maintained");
console.log("Tulip Indicators version is:");
console.log(tulind.version);

In these examples, we assume you already have price data loaded such as:

//Examples assume you have some price data like this:
//Data order is from oldest to newset (index 0 is the oldest)
var open = [4, 5, 5, 5, 4, 4, 4, 6, 6, 6];
var high = [9, 7, 8, 7, 8, 8, 7, 7, 8, 7];
var low = [1, 2, 3, 3, 2, 1, 2, 2, 2, 3];
var close = [4, 5, 6, 6, 6, 5, 5, 5, 6, 4];
var volume = [123, 232, 212, 232, 111, 232, 212, 321, 232, 321];

Calculating a simple moving average is as easy as:

//Do a simple moving average on close prices with period of 3.
tulind.indicators.sma.indicator([close], [3], function (err, results) {
  console.log("Result of sma is:");
  console.log(results[0]);
});

Example of calculating the Stochastic Oscillator:

//Functions that take multiple inputs, options, or outputs use arrays.
//Call Stochastic Oscillator, taking 3 inputs, 3 options, and 2 outputs.
tulind.indicators.stoch.indicator(
  [high, low, close],
  [5, 3, 3],
  function (err, results) {
    console.log("Result of stochastic oscillator is:");
    console.log(results[0]);
    console.log(results[1]);
  }
);

It's also easy to discover argument types at run-time:

//Discover argument types at run-time:
console.log(tulind.indicators.stoch);

//Produces:
{ name: 'stoch',
  full_name: 'Stochastic Oscillator',
  type: 'indicator',
  inputs: 3,
  options: 3,
  outputs: 2,
  input_names: [ 'high', 'low', 'close' ],
  option_names: [ '%k period', '%k slowing period', '%d period' ],
  output_names: [ 'stoch_k', 'stoch_d' ],
  indicator: [Function],
  start: [Function] }

Many (most) indicators return an output array length smaller than the input length. You can get the difference like this:

console.log(
  "Given these options, the output arrays will be this much shorter than the input arrays:"
);
console.log(tulind.indicators.stoch.start([5, 3, 3]));

Hopefully it's obvious, but you can see all the available indicators by doing:

console.log(tulind.indicators);

You can also see a full list of the available indicators on the Tulip Indicators website here.

Contributing

Contributions are welcome! This is a community-maintained fork, and we're happy to review PRs.

Please:

  • Open an issue first for major changes
  • Follow the existing code style
  • Add tests for new features
  • Update documentation as needed

Original Project

This is a maintained fork of tulipnode by Lewis Van Winkle.

The original project provided an excellent foundation for technical analysis in Node.js. This fork exists to ensure the project remains compatible with modern Node.js versions and receives ongoing maintenance.

License

This project maintains the original LGPL-3.0 license. See the LICENSE file for details.

Original work Copyright (C) Lewis Van Winkle
Modifications Copyright (C) 2025 Susant and contributors

Links