Polars Python 2.0.0-rc.1 (2 Sep 2026) makes LazyFrame.collect default to the streaming engine (~5x faster, less memory per official). join/group_by no longer guarantee row order — use maintain_order. After-work RC checklist. Not investment advice.
Polars published the first Python 2.0.0-rc.1 on 2 September 2026. Stable 2.0 is expected in the following weeks. This is not a feature dump — it is a defaults bump: every LazyFrame.collect now resolves engine="auto" to the streaming engine (official aggregate estimate: easily ~5× faster, with much better memory behaviour). Joins, group_by, unpivot, and friends no longer guarantee row order unless you opt in with maintain_order. This Hub note is the after-work RC checklist. It is separate from the older Polars 1.44 Iceberg / rate-limit post. Not investment advice.
The only course CTA is Introduction to Python Programming.
From the announcing Polars 2.0 post (Ritchie Vink, 2 Sep 2026) and the upgrade guide:
DataFrame ops stay in-memory. sink_* was already streaming. SQL with eager=True now goes through the same lazy collect path.maintain_order="left" (or sort explicitly). Process-wide escape hatch: pl.Config.set_engine_affinity("in-memory") or POLARS_ENGINE_AFFINITY=in-memory.is_in coercions raise; horizontal concat no longer silently pads (use how="horizontal_extend"); melt → unpivot; string→date via .str.to_date() not .cast(pl.Date). Typed removals: AttributeRemovedError / ArgumentRemovedError.Try the RC:
pip install "polars==2.0rc1"
python -c "import polars as pl; print(pl.__version__)"
1. Feel the default engine + order gotcha:
import polars as pl
lf = pl.LazyFrame({"k": [2, 1, 0], "v": ["a", "b", "c"]})
other = pl.LazyFrame({"k": [0, 1, 2], "r": ["x", "y", "z"]})
# 2.0: streaming default; row order may not match `lf`
print(lf.join(other, on="k", how="left").collect())
# Opt in to left-hand order when you need it:
print(lf.join(other, on="k", how="left", maintain_order="left").collect())
2. Keep in-memory for one query while you bisect:
print(lf.join(other, on="k", how="left").collect(engine="in-memory"))
3. Catch a removed name early (agents love this):
# AttributeRemovedError: use unpivot(index=..., on=...) instead of melt
# lf.melt(id_vars="k", value_vars="v")
print(lf.unpivot(index="k", on="v").collect())
Stop after one of three. Full list: docs.pola.rs/releases/upgrade/2/. GitHub tag: py-2.0.0-rc.1.
If Python packaging is the blocker, Introduction to Python Programming, then pip install polars==2.0rc1 and run the join-order sketch.