MAX Nightly 26.8.0.dev2026102914 (Mojo 1.3.0.dev2026102914) Released

:astronaut: A new nightly version has been released! :astronaut:

See the quickstart guide for installation instructions: Quickstart | MAX

MAX changelog updates:

  • FLUX.2 models now generate more than one image per request, so
    num_images above 1 in max serve and num_images_per_prompt in
    generate_images() and AutoModel.generate() work for them. Such a
    request used to fail in the first denoising step.

  • Serving metric names now use max.* instead of maxserve.*. Batch
    instruments use max.batch.*, such as max.batch.size. Prometheus
    exposes the corresponding max_* families. Update collector allowlists,
    dashboards, and alerts with the deployment; existing metric history stays
    under its previous names. Units, labels, histogram boundaries, and
    benchmark result fields are unchanged.

  • max serve now rejects an image generation request that asks for more
    than 4 images with a 422 error naming num_images, the same response as
    other out-of-range image options. generate_images() and
    AutoModel.generate() raise a ValueError for num_images_per_prompt
    above 4 before any prompt runs. A request had no upper limit before.

  • The eager Module framework moved from max.experimental.nn to max.nn,
    and the graph-based layers that max.nn held moved to max.nn.legacy.
    max.nn.legacy is deprecated and will be removed in MAX 27.1. Code that
    uses it gets a DeprecationWarning naming the line that used it. To keep
    using the graph-based layers until then, change from max.nn import ... to
    from max.nn.legacy import ....

  • max.nn.legacy.Transformer, DistributedTransformer,
    logits_postprocess() and distributed_logits_postprocess() return a
    max.nn.legacy.graph_groups.DecoderOutputs of named groups instead of a
    tuple.
    max.functional’s matmul() require both inputs to share a dtype, which
    the result keeps, so max.nn.legacy.Linear raises when its input and weight
    dtypes differ. max.nn.Linear casts its input to the weight’s dtype, so a

  • Added max.driver.Buffer.memset(value) to fill a contiguous buffer or
    slice in place with a byte value, without allocating a source buffer.

    ops.resize_linear, ops.resize_nearest, and their max.functional
    counterparts take them for coordinate_transform_mode and

  • Removed max.nn.legacy.FusedMLP. Use max.nn.legacy.MLP, which takes the
    separate gate_proj and up_proj weights a checkpoint ships and fuses their
    matmuls in the graph.

  • Removed the per_layer_buffers KV cache option, which gave each layer its
    own buffer to get past a device’s per-allocation size limit, along with the
    kv_blocks_per_layer and kv_scales_per_layer fields of
    KVCacheInputsPerDevice. A KV cache is again one buffer per device, capped
    at that limit.

  • Enabled automatic fusion of eligible bfloat16 matrix multiplications and
    SwiGLU activations on NVIDIA B200 GPUs.

  • Added DeviceContext.device(), which returns a Device view of the
    accelerator with an id field and get_name(), get_attribute(),
    is_host_unified(), get_arch() and can_access_peer() methods.
    DeviceContext.id(), name(), get_attribute(), is_host_unified() and
    can_access() are deprecated: write ctx.device().id,
    ctx.device().get_name(), ctx.device().can_access_peer(peer.device())
    and so on.

  • The free memory that CPU and Apple GPU devices report now accounts for
    memory used by other processes. Before, MAX could start a model that didn’t
    fit in memory, which on macOS could exhaust swap and crash the machine.

Mojo changelog updates:

  • [External] [Stdlib] Add os.path.normpath (#107338)
  • [External] [mojo][stdlib] Re-enable ConvertibleToPython conformance for builtin types (#106687)
  • [stdlib] Remove the Powable, CeilDivableRaising, and _Expable traits
  • [stdlib] Make FileHandle own its descriptor through FileDescriptor

Raw MAX diff: https://github.com/modular/modular/compare/cb987e0e4f4df28d19f04dd586dc76713751cf65...8ed65fc6ac15950ce62da1f8e8d50c2c7c528065
Current Mojo changelog: https://github.com/modular/modular/blob/main/Mojo/docs/site/nightly-changelog.md