Skip to content

Tracking: open deprecations #11721

Open
Open

Description

@headtr1ck

This issue tracks every deprecation and pending behaviour change currently on main (357efad), so we can decide when to finalize them instead of letting warnings accumulate for years.

Age is the time since users first saw a FutureWarning (as of 2026-10-13):

  • 🟢 fresh: less than 6 months
  • 🟡 ok: 6 months to 2 years
  • 🔴 old: more than 2 years

(strong) marks changes that silently alter results instead of raising an error; these probably deserve a longer cycle.

Note: #11112 (v2026.02.0, 2026-02-13) turned all DeprecationWarnings into FutureWarnings, so for many items "Introduced" is much older than "FutureWarning since". See the end of this issue for the difference between the warning categories.

Active FutureWarnings

Age API Change Introduced FutureWarning since
🔴 Subclasses of xarray objects without __slots__ raise error v0.13.0 (2019-09-17), #3250 v0.13.0
🔴 apply_ufunc(meta=..., output_sizes=...) remove; pass via dask_gufunc_kwargs v0.16.1 (2020-09-20), #4060 v0.16.1
🔴 .dt.weekofyear, .dt.week remove; use .dt.isocalendar().week v0.16.2 (2020-11-30), #4534 v0.16.2
🔴 .chunk(chunks=None) (Dataset, DataArray, Variable/NamedArray) raise error; use {} v0.17.0 (2021-02-25), #4633 v0.17.0
🔴 quantile(interpolation=...) remove; use method v2022.03.0 (2022-03-02), #6108 v2022.03.0
🔴 Positional args to plot methods raise error v2022.11.0 (2022-11-04), #7052 v2022.11.0
🔴 FacetGrid.axes remove; use FacetGrid.axs v2022.11.0 (2022-11-04), #7194 v2022.11.0
🔴 1D plot hue_style= remove argument v2023.07.0 (2023-07-17), #7925 v2023.07.0
🔴 Updating a PandasMultiIndex dim coordinate alone raise error v2023.09.0 (2023-09-26), #8094 v2023.09.0
🔴 Passing a pandas.MultiIndex directly as coord/data var (strong) stop implicit promotion; use Coordinates.from_pandas_multiindex v2023.09.0 (2023-09-26), #8094 v2023.09.0
🔴 reset_encoding() (Dataset, DataArray, Variable) remove; use drop_encoding v2023.10.0 (2023-10-19), #8287 v2023.10.0 (as UserWarning)
🔴 cftime frequency aliases ("A", "Y", "M", "H", "T", ...) raise error; use "YE", "ME", "h", "min", ... v2023.11.0 (2023-11-17), #8415, #8629 v2023.11.0
🔴 Dataset.dims used as a mapping (strong) return a set of names (#8496) v2023.12.0 (2023-12-08), #8500 v2023.12.0
🔴 as_variable(obj, name=...) auto-converting to IndexVariable (strong) stop converting v2024.03.0 (2024-03-29), #8711 v2024.03.0
🔴 Positional args for keyword-only params on groupby, groupby_bins, resample raise error v2024.07.0 (2024-07-30), #9236 v2024.07.0
🟡 Positional args for keyword-only params on Variable.rolling_window, Rolling.construct raise error v2024.11.0 (2024-11-22), #9720 v2024.11.0
🟡 use_cftime= on open_* / decode_cf remove; use decode_times=CFDatetimeCoder(use_cftime=...) v2025.01.1 (2025-01-09), #9901 v2025.01.1
🟡 CFTimeIndex.to_datetimeindex() default time_unit (strong) default "ns" → "us" v2025.01.2 (2025-01-31), #9965 v2025.01.2
🟡 xr.cftime_range() remove; use date_range(..., use_cftime=True) v2025.03.0 (2025-03-19), #10024 v2025.03.0
🟡 h5netcdf phony_dims default warning default already changed; drop the warning v2025.03.0 (2025-03-19), #10058 v2025.03.0 (as UserWarning)
🟡 pydap output_grid= remove argument v2025.04.0 (2025-04-29), #10182 v2025.04.0
🟡 Third-party Index.equals(self, other) without exclude drop compatibility wrapper v2025.06.0 (2025-06-10), #10293 v2025.06.0
🟡 use_new_combine_kwarg_defaults (concat, merge, combine_*, open_mfdataset, align) (strong) flip defaults: data_vars → None, coords → "minimal", compat → "override", join → "exact" (#8778) v2025.08.0 (2025-08-14), #10062 v2025.08.0
🟡 Dataset.eval(parser=...) remove argument v2026.01.0 (2026-01-28), #11064 v2026.01.0
🟡 Dataset.drop / DataArray.drop remove; use drop_vars / drop_sel v0.14.1 (2019-11-19), #3475, #8497 v2026.02.0
🟡 rolling(...).reduce(dim=...) dim has no effect; remove/raise v0.14.1 (2019-11-19), #3513 v2026.02.0
🟡 DataArray/Variable.argmin()/argmax() without dim/axis (strong) return dict of indices per dim v0.16.0 (2020-07-11), #3936 v2026.02.0
🟡 Dataset.argmin()/argmax() without dim raise error v0.16.0 (2020-07-11), #3936 v2026.02.0
🟡 drop_vars dropping a single MultiIndex level raise error v2022.06.0 (2022-07-22), #6592 v2026.02.0
🟡 Creating an index from float16 data (strong) stop casting to float64 v2023.04.0 (2023-04-14), #7724 v2026.02.0
🟡 .chunk() with dimension-ordered tuple/list raise error; use dict v2023.11.0 (2023-11-17), #8341 v2026.02.0
🟡 DataTree/TreeNode .iter_lineage(), .lineage, .ancestors remove; use .parents v2024.10.0 (2024-10-24) v2026.02.0
🟡 groupby(eagerly_compute_group=...) no-op, remove argument v2025.04.0 (2025-04-29), #10253 v2026.02.0
🟢 keepdims= in groupby/resample/rolling reductions ignored; remove/raise v2026.09.0 (2026-09-29), #11521 v2026.09.0

Still PendingDeprecationWarning (hidden by default)

These should be escalated to FutureWarning. Age is measured from introduction.

Age API Change Introduced
🔴 Dataset.apply, GroupBy.apply, Resample.apply remove; use .map v0.14.1 (2019-11-19), #3459
🔴 dims= / dimensions= → dim (deprecate_dims) on xr.dot, DataArray.dot, transpose, stack, unstack, set_dims remove old names v2023.12.0 (2023-12-08), #8487; v2024.05.0 (2024-05-12), #8982
🟡 interpolate_na(method="spline") remove; use method="polynomial" v2024.10.0 (2024-10-24), #9526

Documented as deprecated but no warning yet

These should start warning. Age is measured from introduction.

Age API Change Introduced
🔴 Dataset.to_array soft-deprecated; use to_dataarray v2023.11.0 (2023-11-17), #8438
🔴 DataTree.ds "soft-deprecated alias" for .dataset v2024.09.0 (2024-09-11), #9476
🟡 set_options(display_expand_groups=...) no-op v2026.01.0 (2026-01-28), #10816
netCDF4 engine guessing for remote URLs stop guessing netcdf4 for non-zarr URLs not started (#10951)

Done

API Change Introduced FutureWarning since PR(s)
Variable.to_variable, Variable.to_coord, IndexVariable.to_coord remove; use to_base_variable / to_index_variable v0.9.0 (2017-01-25), #993 v0.9.0 #11726
set_options(enable_cftimeindex=...) no-op, remove option v0.11.0 (2018-11-07), #2516 v0.11.0 #11729

Small cleanups found while compiling this

Warning categories

Category Shown by default? Meaning
PendingDeprecationWarning Never, not even in scripts or notebooks The feature will be deprecated in the future
DeprecationWarning Only when attributed to code in __main__ (a script or notebook cell, PEP 565); hidden when attributed to a library Deprecated; aimed at other Python developers
FutureWarning Always Deprecated or behaviour will change; aimed at end users

pytest shows DeprecationWarning and PendingDeprecationWarning in its warnings summary, so test suites see them, but interactive users usually don't. Only FutureWarning reliably reaches users, which is why the age above is measured from "FutureWarning since".

Activity

  1. headtr1ck commented on Oct 13, 2026

    @headtr1ck
    CollaboratorAuthor

    Top 10 things that can be done right away. All are 🔴 and raise errors instead of silently changing results, or are pure cleanups:

    [This is Claude Code on behalf of Michael Niklas]

  2. nightcityblade commented on Oct 13, 2026

    @nightcityblade
    Contributor

    Hi, I'd like to take the Dataset.argmax warning/error copy-paste cleanup. I'll submit a focused PR shortly.

  3. Yagnik-Trivedi commented on Oct 13, 2026

    @Yagnik-Trivedi
    Contributor

    I'd like to take the first item: removing the Variable.to_variable, Variable.to_coord and IndexVariable.to_coord aliases (#993). I'll open a PR shortly.

    [This is Claude Code on behalf of Yagnik Trivedi]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions