### 0.15.0 {small}`the-future`

```{rubric} Features
```
* Replaces CuPy RawKernel infrastructure with precompiled **nanobind/CUDA C++** extensions {pr}`455` {smaller}`S Dicks`

  All GPU kernels are now compiled at build time via scikit-build-core instead of JIT-compiled on first call, eliminating startup latency and CuPy kernel cache issues across CUDA/driver upgrades.
  Prebuilt wheels are available on PyPI as `rapids-singlecell-cu12` (CUDA 12) and `rapids-singlecell-cu13` (CUDA 13) for both x86_64 and aarch64 — no CUDA toolkit or nvcc required for installation.

  nanobind's typed array bindings enforce dtype (e.g., float32 vs float64) and memory layout (C-contiguous vs F-contiguous) at the Python/C++ boundary, catching mismatches with clear `TypeError` messages before they reach the GPU instead of producing silent corruption or cryptic CUDA errors.

  Kernels are now proper C++ with headers, templates, and multi-file organization, which will enable more optimized and composable functions that are entirely C++ in future releases.

* Rewrites Harmony clustering and correction loops in C++, removing the ``use_gemm`` parameter and one-hot ``Phi`` matrix in favor of categorical indices. ``correction_method`` now defaults to ``None`` and auto-selects ``batched`` or ``fast`` based on workspace size {pr}`578` {smaller}`S Dicks`
