Back to Freedom.Tech Back
All MLX releasesAll versions
Release Tue, Jul 7, 2026 7 min read

MLX 0.32.0

Original release notes

What's Changed

  • Generate qmm implementaions with cmake by @zcbenz in https://github.com/ml-explore/mlx/pull/3424
  • Enable swap for all CI building CUDA by @zcbenz in https://github.com/ml-explore/mlx/pull/3437
  • Bump minor by @angeloskath in https://github.com/ml-explore/mlx/pull/3438
  • [CUDA] Fix qmm_naive K-tail dispatch for FP quantized kernels by @Lyxot in https://github.com/ml-explore/mlx/pull/3445
  • Keep gguflib input-validation asserts active in release builds by @qflen in https://github.com/ml-explore/mlx/pull/3436
  • Reuse nightly build's ccache for release by @zcbenz in https://github.com/ml-explore/mlx/pull/3458
  • Add barrier to JACCL by @Isalia20 in https://github.com/ml-explore/mlx/pull/3459
  • Add determinant and sign-log-determinant functions to mlx.core.linalg by @abhilashreddys in https://github.com/ml-explore/mlx/pull/3416
  • Define ST_F8_E8M0 by @pcuenca in https://github.com/ml-explore/mlx/pull/3448
  • Clearer error when shape dimension overflows int32 by @serenposh in https://github.com/ml-explore/mlx/pull/3425
  • [CUDA] Fix half type matmul in cutlass kernels by @zcbenz in https://github.com/ml-explore/mlx/pull/3469
  • Fix indexing bug in slice update with op by @angeloskath in https://github.com/ml-explore/mlx/pull/3483
  • Make device_count() return 0 when there is no GPU by @zcbenz in https://github.com/ml-explore/mlx/pull/3486
  • Compute contiguity from the actual occupied data by @sofinvalery in https://github.com/ml-explore/mlx/pull/3475
  • Do not use prebuilt cpu compile preamble when headers are installed by @zcbenz in https://github.com/ml-explore/mlx/pull/3463
  • [CUDA] Separate main loop into a function in qmm by @zcbenz in https://github.com/ml-explore/mlx/pull/3443
  • test: Upcast the random numbers before computing their average by @sofinvalery in https://github.com/ml-explore/mlx/pull/3488
  • Pass deployment target when linking metallib by @dhiltgen in https://github.com/ml-explore/mlx/pull/3501
  • Fix rope single token multiple sequences by @angeloskath in https://github.com/ml-explore/mlx/pull/3498
  • Fix qvm_split_k incorrect batch stride calculation by @angeloskath in https://github.com/ml-explore/mlx/pull/3497
  • Fix scatter_prod GPU hang on NaN with contention by @tillahoffmann in https://github.com/ml-explore/mlx/pull/3492
  • [jaccl] Fix race on local_staging in MeshImpl::all_reduce by @kernelpool in https://github.com/ml-explore/mlx/pull/3451
  • Add MLX_SDPA_BLOCKS env var for 2-pass vector kernel block-count override by @adurham in https://github.com/ml-explore/mlx/pull/3455
  • mlx launch clean by @nastya236 in https://github.com/ml-explore/mlx/pull/3513
  • [CUDA] Fix gather_mm by @zcbenz in https://github.com/ml-explore/mlx/pull/3503
  • [CUDA] Guard qmm_naive scale and bias loads at tile boundaries by @Lyxot in https://github.com/ml-explore/mlx/pull/3509
  • win: fix cuda build by @dhiltgen in https://github.com/ml-explore/mlx/pull/3532
  • Improve DLPack-compatible array imports by @XXXXRT666 in https://github.com/ml-explore/mlx/pull/3495
  • Apply the same thread-local approach to the CPU by @angeloskath in https://github.com/ml-explore/mlx/pull/3537
  • removed automatic prepending python in mlx launch by @nastya236 in https://github.com/ml-explore/mlx/pull/3536
  • ci: Show stack trace on crash by @zcbenz in https://github.com/ml-explore/mlx/pull/3538
  • Handle non-multiple-of-8 spatial dims in depthwise conv2d Metal path by @qflen in https://github.com/ml-explore/mlx/pull/3446
  • Remove reference to groups in Conv3D extra_repr by @GriffinMB in https://github.com/ml-explore/mlx/pull/3559
  • Add buffer caching to no_gpu CPU allocator by @dhiltgen in https://github.com/ml-explore/mlx/pull/3554
  • Fix steel GEMM safe load offset by @sofinvalery in https://github.com/ml-explore/mlx/pull/3560
  • Fix singleton lifetime issues at process exit by @dhiltgen in https://github.com/ml-explore/mlx/pull/3555
  • Fix doubled-word typos in docstrings by @LeSingh1 in https://github.com/ml-explore/mlx/pull/3561
  • Fix off_x/off_y typo in steel BaseMMAFrag::load_safe by @mdegans in https://github.com/ml-explore/mlx/pull/3565
  • Synchronize no-GPU cache eviction with CPU streams by @dhiltgen in https://github.com/ml-explore/mlx/pull/3566
  • Add JIT compiler support for Windows by @dhiltgen in https://github.com/ml-explore/mlx/pull/3556
  • [Metal] Reject tensor-scale nvfp4 in qqmm by @Brooooooklyn in https://github.com/ml-explore/mlx/pull/3551
  • Detect int32 shape-product overflow at MLX compute-shape boundaries by @qflen in https://github.com/ml-explore/mlx/pull/3524
  • Add copy keyword to mx.asarray by @eyupcanakman in https://github.com/ml-explore/mlx/pull/3510
  • Fix typos in backend code comments by @adityasingh2400 in https://github.com/ml-explore/mlx/pull/3581
  • Implement output_shapes for GatherMM and GatherQMM by @dexwritescode in https://github.com/ml-explore/mlx/pull/3485
  • Fix activation docstring math in log_softmax and gelu_approx by @adityasingh2400 in https://github.com/ml-explore/mlx/pull/3590
  • docs: expose missing Python APIs by @XXXXRT666 in https://github.com/ml-explore/mlx/pull/3598
  • Fix CUDA all-reduce planning for large inputs by @sofinvalery in https://github.com/ml-explore/mlx/pull/3603
  • Use uv in macOS CI by @zcbenz in https://github.com/ml-explore/mlx/pull/3491
  • Fix HDRS_LIST building when paths in header inclusion tree include spaces by @lancelotblanchard in https://github.com/ml-explore/mlx/pull/3607
  • Enable the Metal backend by default on iOS by @eyupcanakman in https://github.com/ml-explore/mlx/pull/3617
  • Fix int32 overflow in matvec row offset and gather-MM batch stride by @aicayzer in https://github.com/ml-explore/mlx/pull/3609
  • Fix signed-integer overflow (UB) in roll and tile shape arithmetic by @devYRPauli in https://github.com/ml-explore/mlx/pull/3604
  • Fix complex VJPs for log and exp by @CameronChurchwell in https://github.com/ml-explore/mlx/pull/3605
  • added env variables to propagate width by @nastya236 in https://github.com/ml-explore/mlx/pull/3618
  • Correct p-norm computation in triplet_loss by @pchintar in https://github.com/ml-explore/mlx/pull/3613
  • Fix threaded compile cache cleanup by @lucasnewman in https://github.com/ml-explore/mlx/pull/3628
  • Handle invalid dimensions in SinusoidalPositionalEncoding by @pchintar in https://github.com/ml-explore/mlx/pull/3615
  • Correct grammatical typo in label smoothing ValueError by @madhav1k in https://github.com/ml-explore/mlx/pull/3641
  • Roll back compile cache entry when the first trace throws by @adityasingh2400 in https://github.com/ml-explore/mlx/pull/3635
  • Raise on arange with step == 0 instead of undefined behavior by @devYRPauli in https://github.com/ml-explore/mlx/pull/3640
  • Fix data race in tracing state by making it thread-local by @aicayzer in https://github.com/ml-explore/mlx/pull/3638
  • Add missing break in bool_ switch case that would result in falling through to the uint8_t case by @psolanki in https://github.com/ml-explore/mlx/pull/3655
  • Fix axis param in nll_loss by @ishtihoss in https://github.com/ml-explore/mlx/pull/3651
  • Fix Adafactor factored update for params with more than 2 dims by @ishtihoss in https://github.com/ml-explore/mlx/pull/3652
  • Emit valid kernel source for non-finite float constants by @tillahoffmann in https://github.com/ml-explore/mlx/pull/3648
  • Validate inputs in GroupNorm and InstanceNorm by @ishtihoss in https://github.com/ml-explore/mlx/pull/3653
  • Fix flaky test_siblings_without_eval by @zcbenz in https://github.com/ml-explore/mlx/pull/3621
  • Fix intermittent wrong bias gradient in fast::layer_norm VJP (Metal WAR hazard) by @tillahoffmann in https://github.com/ml-explore/mlx/pull/3630
  • NAX requires setting MACOSX_DEPLOYMENT_TARGET=26.2 by @zcbenz in https://github.com/ml-explore/mlx/pull/3622
  • Catch error in CommandBuffer and poison the events by @zcbenz in https://github.com/ml-explore/mlx/pull/3523
  • [Improvement] CopyType::Vector in concatenate if axis=0 and contiguous by @nastya236 in https://github.com/ml-explore/mlx/pull/3663
  • Fix Q4_1 GGUF loading by @ricky-chaoju in https://github.com/ml-explore/mlx/pull/3664
  • Fix tree_map_with_path for namedtuples by @chrismicah in https://github.com/ml-explore/mlx/pull/3674
  • Fix gather_qmm NAX kernel name mismatch by @scyyh11 in https://github.com/ml-explore/mlx/pull/3632
  • Add bits and smallest_normal to finfo by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3679
  • Fix use-after-free when a custom Metal kernel is called with different dtypes in one graph by @discobot in https://github.com/ml-explore/mlx/pull/3662
  • Fix dimension count in orthogonal initializer error message by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3693
  • fix grid for large uncontiguous input by @nastya236 in https://github.com/ml-explore/mlx/pull/3666
  • Ignore numpy matmul warnings in test_blas by @zcbenz in https://github.com/ml-explore/mlx/pull/3657
  • Fix repeat zero axis shape by @chrismicah in https://github.com/ml-explore/mlx/pull/3698
  • Cache JIT-compiled CUDA kernels by @zcbenz in https://github.com/ml-explore/mlx/pull/3587
  • [CUDA] JIT-compile qmm_naive by @zcbenz in https://github.com/ml-explore/mlx/pull/3576
  • Support namedtuple and tuple subclasses in tree_merge by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3703
  • Fix mx.sort vjp to transpose the permutation by @obchain in https://github.com/ml-explore/mlx/pull/3700
  • Add isdtype, result_type, and can_cast by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3681
  • [fix] allow exporting custom Metal kernels without a Metal backend by @xthomaswang in https://github.com/ml-explore/mlx/pull/3650
  • Make step activation inclusive at the threshold by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3694
  • Add new_thread_unsafe_stream API by @zcbenz in https://github.com/ml-explore/mlx/pull/3578
  • Fix JVPs of power, divmod, and slice_update with partly traced inputs by @qflen in https://github.com/ml-explore/mlx/pull/3636
  • Add flip and unstack by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3683
  • Fix int16 overflow in NAX qmm edge-tile bounds by @scyyh11 in https://github.com/ml-explore/mlx/pull/3631
  • Make gemv JIT compilable by @angeloskath in https://github.com/ml-explore/mlx/pull/3705
  • Fix gaussian_nll_loss documented default reduction (none -> mean) by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3715
  • Fix optimizer epsilon validation message and AdaDelta eps doc by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3712
  • Add array API standard aliases for existing ops by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3678
  • Fix ConvTranspose kernel size repr by @ishtihoss in https://github.com/ml-explore/mlx/pull/3724
  • [CUDA] Disable managed memory on Tegra by @gmondada in https://github.com/ml-explore/mlx/pull/3701
  • Update nanobind to 2.13.0 by @XXXXRT666 in https://github.com/ml-explore/mlx/pull/3722
  • Fix JVPs of select, arctan2, masked_scatter, and bitwise ops by @qflen in https://github.com/ml-explore/mlx/pull/3633
  • array API: add empty, empty_like (pure aliases), astype, matrix_transpose by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3729
  • Add metal::set_metallib_path() to override the metallib search path by @olilarkin in https://github.com/ml-explore/mlx/pull/3597
  • Add Metal DLPack zero-copy sharing by @XXXXRT666 in https://github.com/ml-explore/mlx/pull/3531
  • Bump actions/checkout from 6 to 7 by @dependabot[bot] in https://github.com/ml-explore/mlx/pull/3741
  • Fix shapeless compile eliding reductions over size-1 dimensions by @discobot in https://github.com/ml-explore/mlx/pull/3672
  • [CUDA] JIT-compile qmm_sm80/qmm_sm90/gather_gemm by @zcbenz in https://github.com/ml-explore/mlx/pull/3706
  • [CUDA] Make qmv support global scale by @zcbenz in https://github.com/ml-explore/mlx/pull/3723
  • Add VJP for cumulative max and min scans by @devin-lai in https://github.com/ml-explore/mlx/pull/3599
  • Fix abs jvp for complex inputs by @obchain in https://github.com/ml-explore/mlx/pull/3745
  • Fix update_modules crash on over-length module lists by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3743
  • Add matrix_norm to array API namespace by @wgu9 in https://github.com/ml-explore/mlx/pull/3749
  • Guard scatter_axis against 64-bit outputs on the GPU by @obchain in https://github.com/ml-explore/mlx/pull/3695
  • Fix build on Apple clang 15 in cpu_nd_array_to_mlx by @obchain in https://github.com/ml-explore/mlx/pull/3751
  • metal: cache x in registers in rms_single_row to avoid redundant global read by @will-march in https://github.com/ml-explore/mlx/pull/3754
  • Document row-wise sparsity in nn.init.sparse by @Pablosinyores in https://github.com/ml-explore/mlx/pull/3752
  • [CUDA] [Improvement] Rope without copy by @nastya236 in https://github.com/ml-explore/mlx/pull/3704
  • Add small-batch quantized matvec kernel (qmv_wide) by @jessegross in https://github.com/ml-explore/mlx/pull/3764
  • Fix docstring nits by @ishtihoss in https://github.com/ml-explore/mlx/pull/3758
  • Fix logsumexp jvp to reduce along the axis by @obchain in https://github.com/ml-explore/mlx/pull/3708
  • Add vecdot to array API namespace by @wgu9 in https://github.com/ml-explore/mlx/pull/3748
  • Fix CPU dynamic slice copy bound for collapsed shapes by @Lyxot in https://github.com/ml-explore/mlx/pull/3739
  • Enable fused SDPA vector kernel for asymmetric Q/V head dims (192, 128) by @yohann-bearzi in https://github.com/ml-explore/mlx/pull/3637
  • array API: add positive, logical_xor, trunc, count_nonzero, diff, full_like by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3730
  • array API: add cumulative_sum and cumulative_prod by @katlun-lgtm in https://github.com/ml-explore/mlx/pull/3731
  • Fix complex vjps for several unary ops by @obchain in https://github.com/ml-explore/mlx/pull/3766
  • Fix Upsample align_corners singleton output by @ishtihoss in https://github.com/ml-explore/mlx/pull/3769
  • Add CI for Windows CUDA build by @zcbenz in https://github.com/ml-explore/mlx/pull/3775