A modern Node.js wrapper around TA-LIB, providing 100+ technical analysis indicators including ADX, MACD, RSI, Stochastic, Bollinger Bands, TRIX, and candlestick pattern recognition.
- 100+ Technical Indicators - Comprehensive indicator library
- Modern JavaScript - ES6+, async/await, Promises
- TypeScript Support - Full type definitions included
- Dual API - Both synchronous and asynchronous execution
- ESM & CommonJS - Works with both module systems
- High Performance - Native C++ bindings via N-API
- Cross-Platform - Works on macOS, Linux, and Windows
- No Dependencies - No external dependencies required
- Lightweight - No unnecessary dependencies, small footprint
- Node.js >= 24.0.0
- Python (for node-gyp)
- C++ Build Tools
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
build-essentialpackage - Windows: Visual Studio Build Tools with the "Desktop development with C++" workload
- macOS: Xcode Command Line Tools (
Windows + recent Visual Studio: Newer Visual Studio releases (e.g. VS 2026 / v18) are only detected by
node-gyp>= 12.1.0. Thenode-gypbundled with npm may be older and fail withCould not find any Visual Studio installation to use. See Windows Build Issues if you hit this.
npm install talibconsttalib=require('talib');// Synchronous executionconstresult=talib.execute({name: 'SMA',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInTimePeriod: 20});console.log(result.result.outReal);importtalibfrom'talib';constresult=talib.execute({name: 'RSI',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInTimePeriod: 14});import*astalibfrom'talib';constresult: talib.ExecuteResult=talib.execute({name: 'MACD',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInFastPeriod: 12,optInSlowPeriod: 26,optInSignalPeriod: 9});git clone https://github.com/oransel/node-talib.git
cd node-talib
npm installThe module will be built automatically during installation.
talib.version// TA-LIB version stringtalib.functions// Array of all available functionstalib.functionUnstIds// Function unstable period IDsExecute a technical analysis function.
Synchronous:
constresult=talib.execute({name: 'SMA',startIdx: 0,endIdx: data.length-1,inReal: data,optInTimePeriod: 20});Asynchronous:
talib.execute({name: 'SMA',startIdx: 0,endIdx: data.length-1,inReal: data,optInTimePeriod: 20},(err,result)=>{if(err)returnconsole.error(err);console.log(result);});With Async/Await:
constresult=awaitnewPromise((resolve,reject)=>{talib.execute(params,(err,result)=>{if(err)reject(err);elseresolve(result);});});Get detailed information about a function's parameters.
constinfo=talib.explain('ADX');console.log(info);// {// name: 'ADX',// group: 'Momentum Indicators',// hint: 'Average Directional Movement Index',// inputs: [...],// optInputs: [...],// outputs: [...]// }Set the unstable period for a function.
talib.setUnstablePeriod(talib.functionUnstIds.TA_FUNC_UNST_EMA,30);// Simple Moving Averageconstsma=talib.execute({name: 'SMA',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInTimePeriod: 20});// Exponential Moving Averageconstema=talib.execute({name: 'EMA',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInTimePeriod: 12});// Relative Strength Indexconstrsi=talib.execute({name: 'RSI',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInTimePeriod: 14});// MACDconstmacd=talib.execute({name: 'MACD',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInFastPeriod: 12,optInSlowPeriod: 26,optInSignalPeriod: 9});// Bollinger Bandsconstbbands=talib.execute({name: 'BBANDS',startIdx: 0,endIdx: prices.length-1,inReal: prices,optInTimePeriod: 20,optInNbDevUp: 2,optInNbDevDn: 2,optInMAType: 0// SMA});// Average True Rangeconstatr=talib.execute({name: 'ATR',startIdx: 0,endIdx: prices.length-1,high: highs,low: lows,close: closes,optInTimePeriod: 14});When an indicator accepts optInMAType:
constMAType={SMA: 0,// Simple Moving AverageEMA: 1,// Exponential Moving AverageWMA: 2,// Weighted Moving AverageDEMA: 3,// Double Exponential Moving AverageTEMA: 4,// Triple Exponential Moving AverageTRIMA: 5,// Triangular Moving AverageKAMA: 6,// Kaufman Adaptive Moving AverageMAMA: 7,// MESA Adaptive Moving AverageT3: 8// Triple Exponential Moving Average (T3)};Check the examples/ directory for more examples:
# Run basic example
node examples/adx.js
# Run modern async example
node examples/adx-modern.js
# Run synchronous example
node examples/adx-sync.js
# Run ES module example
node examples/esm-example.mjs
# Run multiple indicators example
node examples/multiple-indicators.jsnpm testIf you encounter build errors:
# Clean and rebuild
npm run clean
npm install
# Or use rebuild script
npm run rebuildEnsure Python is installed and in your PATH:
# Check Python installation
python --version
# or
python3 --versionInstall Visual Studio Build Tools:
- Download from Visual Studio Downloads
- Select "Desktop development with C++"
Could not find any Visual Studio installation to use / unknown version "undefined"
This means your node-gyp is too old to recognize your installed Visual Studio. Visual Studio 2026 (v18) requires node-gyp >= 12.1.0, but the copy bundled with npm is often older. Upgrade node-gyp and rebuild:
# Install a node-gyp that knows about modern Visual Studio
npm install --global node-gyp@latest
# Then rebuild from a cloned repo using that node-gyp
npm run clean
node ./src/lib/build.js
node-gyp configure
node-gyp buildWhen installing talib as a dependency (so you can't run the steps above directly), point npm at the upgraded node-gyp so its install step uses it:
npm install --global node-gyp@latest
npm config set node_gyp "$(npm prefix -g)/node_modules/node-gyp/bin/node-gyp.js"Contributions are welcome! Please feel free to submit a Pull Request.
If this project helped you, consider supporting its development:
- PayPal
- BTC: 18gT1wmq3RMoLBm2ZFv4PhiYbU5CMAQC6P
Copyright (c) 2012-2026 Mustafa Oransel
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.