TA-Lib

The C indicator library everything else wraps — and pip now ships the C part with it.

Last updated

From
Free
Licence
BSD-3-Clause AND BSD-2-Clause
Self-hosted
Yes
Platforms
Library

What it is

TA-Lib is two projects sharing a name, and knowing which is which is the difference between a five-second install and a lost afternoon.

The first is the C libraryTA-Lib/ta-lib on GitHub, written by Mario Fortier in 1999 and still maintained by him. It holds the algorithms, and native implementations also exist for Rust, Java and C#. The second is ta-lib-python, John Benediktsson's Cython wrapper, published on PyPI as TA-Lib and imported as talib. Nearly every other indicator library in Python either wraps this one or defines itself against it.

As of 0.8.0 the wrapper exposes 201 functions, 61 of them candlestick patterns — counted both in the generated _func.pxi inside the 0.8.0 source distribution and on the project's own function index on 19 September 2026. That is up from 161 in 0.6.8, because the C library's 0.8.1 release added forty new ones in September 2026: SUPERTREND, VWAP, Hull and zero-lag moving averages, Donchian and Keltner channels, Heikin-Ashi, TSI, Vortex, Chaikin Money Flow and the rest of the list that users had been filing issues about for a decade. The "158 indicators" every tutorial quotes is now out of date.

Three Python APIs sit on top: a function API taking NumPy arrays or pandas and polars Series, an abstract API taking a dict or DataFrame of OHLCV and returning named columns, and a streaming API that computes only the latest value.

Pricing

Free, and there is nothing to buy — no pro build, no hosted tier, no commercial licence. The licensing is the part worth reading twice, because "TA-Lib is BSD" is only half true: the C library is BSD 3-Clause and the Python wrapper is BSD 2-Clause. Both are OSI-approved and neither is copyleft, but a wheel contains both, so shipping one to a customer means carrying two notices and honouring the extra no-endorsement clause.

Data & coverage

Ships no data of any kind. Functions take float arrays and never see a ticker, an exchange or a timestamp, so any instrument and any bar size works — including ones where the indicator makes no sense.

Integrations

Wheels have been published since 0.6.5, and 0.8.0 ships 54 of them for CPython 3.9–3.14 across manylinux and musl on x86_64 and aarch64, macOS on Intel and Apple Silicon, and Windows in 32-bit, 64-bit and arm64. They are self-contained: a bundled libta-lib shared object on Linux, a .dylibs/libta-lib.1.1.0.dylib on macOS, and the C code linked statically into the .pyd on Windows.

Outside Python, 0.7.1 and 0.8.1 added Conan and vcpkg packaging and a setup-ta-lib GitHub Action, and community bindings now exist for Go, PHP, PostgreSQL, R, Ruby and Zig. conda-forge carries both ta-lib and libta-lib.

Limitations

  • The wrapper's README still opens by telling you to install the C library yourself, with Homebrew and TA_LIBRARY_PATH instructions below it. That text predates the wheels and is the single largest source of installation confusion around this library.
  • NaN handling is not pandas' handling. One missing value mid-series propagates to the end of the output rather than clearing after the lookback window.
  • Upgrading to 0.8.1 changes numbers, and two of those changes are not rounding: BBANDS' default period moved from 5 to 20, and PPO and APO now default to an EMA where they used to default to an SMA. Same call, different output, no error. The rest is floating-point re-ordering from the fused multiply-add rewrites, and the release notes quantify it: RSI moves by at most 5.7e-14 on the 0–100 scale at the default period and 5.3e-13 at period 20,000, STOCHRSI by up to 1.1e-11, ATR and NATR by 1.3e-15, EMA by 2.8e-16.
  • Function level only. No bar loop, no positions, no portfolio — that is a backtesting framework's job.
  • NumPy 1 users are stuck on ta-lib<0.5.

Alternatives

pandas-ta and its successor fork are the pure-Python answer for anyone who wants a DataFrame accessor and no binary dependency at all; the trade is speed and the reference implementation. VectorBT bundles its own Numba-compiled indicators and will also call TA-Lib if it is installed.

Specs

Interfaces
Python, C
Export
None
Asset classes
Stocks, ETF, Futures, Forex, Crypto, Indices, Commodities
Markets
Global
Platforms
Library
AI features
None
Pricing verified
Capabilities verified
Coverage verified

Also worth comparing

  • pandas-taThe DataFrame indicator library whose repo is gone and whose last release is a year old.
  • archGARCH and the rest of the volatility-model family, plus the tests you need around them.
  • empyrical-reloadedThe maintained fork of Quantopian's empyrical — risk statistics, no plots.
  • exchange_calendarsSessions, minutes and holidays for 69 exchanges, keyed by ISO-10383 code.
  • ffnPerformance stats, drawdowns and portfolio weights from a DataFrame of prices.
  • PyPortfolioOptPrices in, weights out — efficient frontier, Black-Litterman and HRP.

FAQ

Do I still need a C compiler to install TA-Lib in Python?

Almost certainly not. Since 0.6.5 the project publishes binary wheels that carry the C library inside them, and 0.8.0 ships 54 of them covering CPython 3.9 through 3.14 on Linux x86_64 and aarch64, macOS Intel and Apple Silicon, and Windows 32-bit, 64-bit and arm64. A compiler is needed only off that matrix.

Which package do I install, and what do I import?

The PyPI project is TA-Lib and the import is talib. Neither talib nor ta-lib-python is registered on PyPI by anyone else, so the obvious guesses simply fail rather than installing a stranger's code. Skip ta-lib-bin and TA-Lib-Precompiled — the same author published them as pre-wheel workarounds and both stopped at 0.4.x in 2022.

Is TA-Lib still maintained?

Both halves are, and the C library is busier now than it has been in years. Version 0.8.1 landed on 12 September 2026 with forty new functions, and the last commit to main was 17 September 2026. The Python wrapper released 0.8.0 on 13 September 2026. Neither repository is archived.

What licence is TA-Lib under?

Two licences, both permissive and neither copyleft. The C library is BSD 3-Clause, copyright Mario Fortier; the Python wrapper is BSD 2-Clause. A pip wheel contains both, so redistributing one means honouring the three-clause no-endorsement condition as well as the two-clause one.