
40.1k stars · MIT | 2.0.0 on PyPI, 6 Oct 2026 | [docs.pola.rs](https://docs.pola.rs) · py-2.0.0 (2026-10-06) · Track this in Rising ↗
A faster replacement for pandas when the file is large.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 26 Oct 2026, one day before this check.
Latest release py-2.1.0 on 25 Oct 2026.
Public since May 2020, a little over 6 years.
40,211 stars and 3,205 forks.
981 commits and 512 new issues in the last 90 days.
784 contributors. 937 pull requests merged in 90 days.
A security policy says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 15.
▶Repo detailsthe review · specs · pros & cons · install
What it does
Polars is a query engine for tables, written in Rust with a Python interface. It works two ways: step by step, like pandas, or lazily, where the whole chain of steps is examined and optimised before anything runs. Queries are built from composable expressions for filtering, grouping, aggregating and sorting. A streaming mode processes a query in parts, so a file larger than the machine's memory can still be read; you ask for it when collecting the result. It uses the Apache Arrow column format, which lets data be shared with other tools without copying, and it reads Parquet files, the compact column-based format used for large datasets. Bindings exist for Python, Rust, Node.js and R, and there is a SQL interface. It uses every processor core without being asked, and can optionally use an NVIDIA graphics card. It is not a database: there is no server and no storage of its own, and spreading one query across several machines is a separate paid product.
Why it matters
Who it suits. Anyone repeating the same load-and-reshape hundreds of times — a parameter sweep, a backtest, a nightly report — where one pass getting three times faster makes the whole afternoon three times shorter. It also suits anyone whose file no longer fits in memory, because the streaming mode is a smaller change than restructuring the job. Skip it if the files are small, because the difference will not be felt and a day of rewriting buys nothing.
Verdict. Worth a day when the files are genuinely large, and worth nothing when they are not, so time one real run before committing. Note the version: 2.0.0 landed on 6 October 2026, and a first digit that changes usually means some code has to change too, so read the project's upgrade notes rather than bumping the version in place. Expect to call .to_pandas() at the edges where other libraries insist on a pandas table, and that copy costs back some of what was gained. It pairs well with entry #11: the database holds and summarises, this does the run-by-run work in memory.
Summary (Key Points)from the README
Key features
- Multi-threaded, vectorized core: Written in Rust with multi-threaded, vectorized (SIMD) execution.
- Lazy and eager modes: Both execution styles are supported, with query optimization built in.
- Streaming for larger-than-RAM data: The streaming engine processes parts of a query in a streaming fashion, so a 250GB dataset might run on a laptop.
- Expression-based API: Queries are composed from expressions, and lazy queries run in parallel across all available cores.
- Native extensibility: Custom code can extend Polars through I/O and Expression plugins.
- Multiple language bindings: Bindings exist for Python, Rust, Node.js, R, and SQL.
- Optional NVIDIA GPU acceleration: Queries can optionally run on NVIDIA GPUs.
- Zero-copy data sharing: It uses the Apache Arrow Columnar Format for zero-copy data sharing.
- Distributed scaling: The README links to a guide for horizontally scaling queries across a cluster.
Ways to install
| Platform or method | What it needs | Effort |
|---|---|---|
| Python release (pip install polars) | pip and a Python environment; optional dependencies are listed in the User Guide | Low |
| Compile from source (py-polars) | The latest Rust compiler, maturin (pip install maturin), and make; release builds take long compile times | High |
Important
- Source builds are slow: The make targets range from fast-compiling debug builds to build-dist-release, which the README describes as having extreme compile times.
- Older CPUs need a flag: Set LTS_CPU=1 when compiling if your CPU lacks support for features such as AVX2, for example CPUs from before 2011.
- Very large row counts need the advanced guide: Datasets with more than 2^32 (about 4.2 billion) rows require options described in the Installation guide.
- Apple Silicon under Rosetta is a special case: An x86-64 build of Python on Apple Silicon under Rosetta needs the advanced installation steps.
- Streaming is opt-in: Larger-than-RAM processing only applies when you call collect(engine='streaming').
- GPU support is limited to NVIDIA: The README mentions GPU acceleration only for NVIDIA GPUs and describes it as optional.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- MIT, mature and fast-moving, with version 2.0.0 published on 6 October 2026.
- It uses every processor core with no special code, and the streaming mode reads files larger than memory.
- Lazy mode inspects the whole chain of steps before starting, then skips work it does not need.
- It is not pandas. Method names and behaviour differ, so expect a day of rewriting and some surprises.
- Some libraries demand a pandas table, and converting costs time and memory back.
- A major version arrived this month. Pin the version and read the upgrade notes before moving old code.
source venv/bin/activate pip install polars python -c "import polars as pl; print(pl.__version__)"
