MAX Nightly 26.6.0.dev2026082807 (Mojo 1.1.0.dev2026082807) Released

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

See the quickstart guide for installation instructions: Quickstart | MAX

MAX changelog updates:

  • Added a request body size limit. MAX_SERVE_MAX_REQUEST_BYTES (default
    100 MiB) caps the size of an accepted HTTP request body; a larger request is
    rejected with HTTP 413 before the body is buffered, so a client cannot
    exhaust host memory with an oversized payload. The cap is enforced both from
    an oversized Content-Length and by counting the bytes actually received, so
    a chunked or mislabeled body cannot evade it. Raise it for larger inline
    (base64) multimodal payloads, or set it to 0 to disable the limit.

  • The SM100 MLA decode dispatch now enumerates 12, 24 and 48 query heads
    alongside the powers of two it already covered, so a model whose per-device
    head count is not a power of two can bind its dispatch metadata.

  • KDA prefill now runs on the chunk-parallel pipeline. The pipeline existed as
    a Mojo kernel with no graph-op registration, so every prefill fell back to
    the token-sequential decode recurrence: O(total_seq_len) sequential steps per
    sequence, with no parallelism to spend on a long prompt. Registering
    kda_chunk as its own graph op takes that to O(total_seq_len / CHUNK_SIZE).

  • Improved MXFP8 block-scaled matmul decode latency for attention
    output-projection shapes at M=4, M=32, M=64, and M=128 on MI355.

  • Improved MXFP8 block-scaled fused QKV projection decode latency at M=4 on
    MI355.

    and down projection 18.2-19.6% (etm > 2048) and 6.9-23.3% (etm <= 2048)

  • The pipeline configs are now immutable: PipelineArgs,
    PipelineConfig, PipelineRuntimeConfig, SamplingConfig,
    MAXModelConfig, KVCacheConfig and its nested KVConnectorConfig,
    LoRAConfig, and ProfilingConfig. Assigning to a field after
    construction raises a pydantic ValidationError. Construct them with
    the values you need.

  • ModelManifest is now immutable from construction: mutating the mapping
    (item assignment, update, pop, and so on) raises a TypeError, and
    ModelManifest.resolve() is removed β€” a manifest is complete when built.
    Construct it with the component configs you need. The unused
    total_weights_size property is also removed.

  • Constructing a MAXModelConfig directly now only validates the fields
    you pass. It no longer fills in the weight and model paths or loads the
    HuggingFace config. Configs the pipeline builds are unchanged.

  • ArchConfig.calculate_max_seq_len() no longer takes pipeline_config,
    and model_config is now required.

  • KVCacheConfig.allow_kv_head_replication, the architecture registration
    field requires_kv_head_replication, and the
    --allow-kv-head-replication flag are removed. An architecture now asks
    for KV head replication in its construct_kv_params().

  • DeviceGraphBuilder.add_function[kernel](*args, ...) takes a thin
    function pointer (func: def(...) thin -> None), the same identity as
    DeviceContext.compile_function[kernel](). The capturing compile-and-add
    overloads are removed; capturing kernels use
    DeviceContext.enqueue_function() or recording_context().

Mojo changelog updates:

  • [stdlib] Add List(length, fill_with) initializer.
  • [stdlib] Add Array(fill_with=) constructor

Raw MAX diff: https://github.com/modular/modular/compare/d68e8edca0585de6ce4f1f9b37f12a6910890b04...1c9fd2e03331f77d3a1034127cb3700b7fa43c02)>
Current Mojo changelog: https://github.com/modular/modular/blob/main/mojo/docs/nightly-changelog.md