Change8

max/v26.3.0

Breaking Changes
📦 mojo-languageView on GitHub →
2 breaking10 features🐛 1 fixes1 deprecations🔧 9 symbols

Summary

The Modular 26.3 release introduces video generation and advanced multi-GPU sharding to MAX, while Mojo 1.0 beta 1 brings significant compile-time type refinement and removes negative indexing.

⚠️ Breaking Changes

  • Negative indexing on standard collections has been removed; use bounds-checked indexing instead.
  • The `fn` keyword now emits a deprecation warning and will become a hard error in the next release.

Migration Steps

  1. Replace negative indexing on standard collections with appropriate bounds-checked indexing.
  2. If using the `fn` keyword in Mojo, prepare to update code as it will be removed in the next release.

✨ New Features

  • Video generation support added to MAX using Wan 2.1 / 2.2 diffusion models (image-to-video and video-to-video).
  • New multi-GPU Python API via `max.experimental.sharding` supporting DeviceMesh distribution with Replicated, Sharded, and Partial placement primitives.
  • NVFP4 grouped matmul kernels now outperform FlashInfer on B200 for Kimi K2.5.
  • New model support for Gemma 4 (with multimodal vision), Qwen3 and Qwen3-VL (including MoE variants), MiniMax-M2 (with 4×H100 multi-GPU serving), and FLUX.2 (with TaylorSeer and TeaCache denoising caches).
  • Mojo 1.0 beta 1 introduces type refinement from compile-time assumptions: `conforms_to(T, Trait)`, `comptime if`, and `comptime assert` now narrow types automatically.
  • Stateless Mojo closures auto-lift to function pointers.
  • Mojo supports the `ref` capture convention for closures.
  • Mojo introduces the new thin function effect to distinguish function pointer types from closure traits.
  • Mojo now has cheap CPU bounds checks enabled by default for indexing.
  • Mojo `UnsafePointer` is non-null by design; nullability must now be expressed using `Optional[UnsafePointer[...]]`.

🐛 Bug Fixes

  • Manual `trait_downcast` calls are no longer necessary in the standard library due to automatic type narrowing from compile-time assumptions.

Affected Symbols

⚡ Deprecations

  • The `fn` keyword is deprecated and will be removed in a future release.