(v0.12.0rc1)=
### 0.12.0rc1 {small}`2025-04-09`

#### Breaking changes

- Remove `anndata.read` {user}`ilan-gold` ({pr}`1766`)
- Tighten usage of {class}`scipy.sparse.spmatrix` for describing sparse matrices in types and instance checks to only {class}`scipy.sparse.csr_matrix` and {class}`scipy.sparse.csc_matrix` {user}`ilan-gold` ({pr}`1768`)
- Disallow declaration of {class}`~anndata.AnnData` with non-`cs{r,c}` sparse data-structures {user}`ilan-gold` ({pr}`1829`)
- Upgrade all `DeprecationWarning`s to `FutureWarning`s {user}`ilan-gold` ({pr}`1874`)

#### Bug fixes

- Disallow writing of {class}`~anndata._core.xarray.Dataset2D` objects {user}`ilan-gold` ({pr}`1887`)
- Upgrade old deprecation warning to a `FutureWarning` on `BaseCompressedSparseDataset.__setitem__`, showing our intent to remove the feature in the next release.  {user}`ilan-gold` ({pr}`1928`)
- Don't use {func}`asyncio.run` internally for any operations {user}`ilan-gold` ({pr}`1933`)
- Disallow forward slashes in keys for writing {user}`ilan-gold` ({pr}`1940`)

#### Features

- {data}`None` values can now be serialized to `.h5ad` and `.zarr`,
  preserving e.g. {attr}`~anndata.AnnData.uns` structure through saving and loading {user}`flying-sheep` ({pr}`999`)
- Add {func}`~anndata.experimental.read_elem_lazy` (in place of `read_elem_as_dask`) to handle backed dataframes, sparse arrays, and dense arrays, as well as a {func}`~anndata.experimental.read_lazy` to handle reading in as much of the on-disk data as possible to produce a {class}`~anndata.AnnData` object {user}`ilan-gold` ({pr}`1247`)
- Support {mod}`zarr` version 3 python package {user}`ilan-gold` ({pr}`1726`)
- Adopt the Scientific Python [deprecation schedule](https://scientific-python.org/specs/spec-0000/) {user}`ilan-gold` ({pr}`1768`)
- Allow {mod}`zarr` v3 writing of data {user}`ilan-gold` ({pr}`1892`)
- {func}`anndata.register_anndata_namespace` functionality for adding custom functionality to an {class}`~anndata.AnnData` object {user}`srivarra` ({pr}`1870`)
