What changed in Ollama 0.40

The v0.40.0 release notes (dated 25 September 2026 on GitHub) make one change on Apple Silicon: any model architecture that Ollama’s MLX runtime supports now runs on MLX automatically. The notes name Qwen 3.8, Gemma 4, Qwen 3.6 and Qwen 3.5, plus the Nimble, tev1 and Clef decision models and the embeddinggemma-2 embedding model. Earlier releases had already moved other families onto the MLX engine one at a time: Command A and the North family in v0.30.10, Laguna in v0.32.4, Muse Glimmer in v0.32.7 and Qwen3.8-Flash-Next in v0.33.1.

A model tag on ollama.com can hold more than one build. Ollama’s own source (v0.40.6) ranks the runners per platform: an Apple Silicon Mac tries mlx first, then llamacpp, then ggml; every other platform puts llama.cpp first. That is why the library shows a size range for some tags: qwen3.6:35b-a3b is listed at 23–24 GB, gemma4:e4b at 6.6–9.5 GB.

Two follow-ups matter on a Mac. v0.40.2 upgrades models downloaded with older versions in the background the first time you run them and keeps the original as a backup, so disk use can jump for a while. v0.40.6 (16 October 2026), the current stable release, adds the q2_0 GGUF type that Ternary Bonsai 2 needs; a v0.40.7 release candidate followed on 18 October.

How to check which runner a model uses

Load the model, then ask Ollama what is running:

ollama run qwen3.6:35b-a3b "hello" >/dev/null
ollama ps

In v0.40.x ollama ps prints NAME, ID, SIZE, PROCESSOR, CONTEXT, RUNNER and UNTIL. RUNNER reads mlx or llamacpp (ggml for older GGUF imports). PROCESSOR should read 100% GPU; a CPU share means the model did not fit in the memory the GPU can use.

To see the choice before loading anything, ollama show prints a runner row and an available runners row for tags that carry several builds:

ollama show qwen3.6:35b-a3b

The server log says the same thing in plain words. The MLX runner logs starting mlx runner subprocess; the llama.cpp path logs waiting for llama-server to start responding:

grep -E "starting mlx runner|llama-server" ~/.ollama/logs/server.log | tail -n 3

The tag name is a good guide too:

Tag patternExample on ollama.comRuns on
Plain size tagqwen3.6:35b-a3b (23–24 GB)MLX on Apple Silicon when the tag has an MLX build, otherwise llama.cpp
-mlx, -mlx-bf16qwen3.8:27b-mlx (18 GB)MLX only
-nvfp4, -mxfp8gemma4:12b-nvfp4MLX only (Ollama runs these formats on its MLX engine)
-q4_K_M, -q8_0qwen3.6:35b-a3b-q4_K_M (24 GB)llama.cpp (GGUF)

To compare the two engines on your own Mac, pull the GGUF tag next to the default one and send the same prompt to both with --verbose. They are separate downloads, so check free disk space first.

Which Macs and macOS versions qualify

What speed difference to expect

Token generation on a Mac is limited mostly by memory bandwidth, so changing engines moves the number far less than changing Macs. The cleanest same-machine comparison the LLMCheck index draws on is a January 2026 paper (arXiv 2601.19139) that ran the same 4-bit models on one M4 Max with 128 GB through mlx-lm and through llama.cpp:

Model (4-bit, M4 Max)mlx-lm (MLX)llama.cppMLX vs llama.cpp
Qwen3-30B-A3B (MoE)sourced107.4 tok/ssourced89.9 tok/s+19%
Qwen3-8Bsourced79.9 tok/ssourced76.9 tok/s+4%
Gemma 3 4Bsourced105.4 tok/ssourced123.2 tok/s−14%

All six figures are published (Table 1 of the paper). The paper’s own server, vllm-mlx, reached sourced109.7 tok/s on Qwen3-30B-A3B on the same M4 Max (the figure the index’s MLX row for that model uses), and its headline “21% to 87%” gain is that server against llama.cpp, not plain mlx-lm.

A second pair, on an M5 Max: Qwen 3.6-35B-A3B decoded at community125.8 tok/s community-measured in oMLX (MLX 4-bit, 1k-token prompt, MTP off) and sourced118 tok/s published by Liquid AI on llama.cpp (Q4_K_M, 4K-token input). Different tools and prompt lengths, so read the 7% gap as indicative only.

What the LLMCheck index expects a model to do on a given Mac, independent of the engine, is below. The figures are filled from the index at build time and carry their provenance.

ModelMac mini M6Mac mini M5 ProMac Studio M5 Max
Gemma 4 12B (needs 9 GB)estimated~17 tok/s 16 GBestimated~34 tok/sestimated~64 tok/s
Qwen 3.6-35B-A3B (needs 24 GB)community64 tok/s 32 GBestimated~92 tok/ssourced118 tok/s
Qwen3.8-27B (needs 19 GB)community9 tok/s 24 GBestimated~15 tok/sestimated~29 tok/s
Provenance key
sourced
Published figure — vendor or press review
estimated
community
Linked individual run — blog, forum or submission

Where MLX does change the experience is prompt processing on M5 chips. In Apple’s own MLX tests an M5 MacBook Pro reached the first token up to about 4× faster than an M4, while generation improved only about 1.2×. With long prompts, as in coding agents or RAG, the wait before the first token is the difference you notice.

Why Ollama’s tok/s may not be plain decode

ollama run <model> --verbose prints an eval rate. That rate can include speculative decoding: when a model ships a draft head, the runner proposes several tokens at once and keeps the ones the full model accepts. Ollama’s MLX engine started using Qwen 3.5’s multi-token-prediction head automatically in v0.32.6, added DFlash drafts with Muse Glimmer in v0.32.7, and v0.40.4 made MLX speculative decoding more reliable. Some llama.cpp builds carry a draft model too: the gemma4:12b and gemma4:e4b manifests include a draft layer.

To see whether a run drafted, look for this line in the server log after it finishes. It reports drafted and accepted tokens and the acceptance rate:

grep "speculative decode stats" ~/.ollama/logs/server.log | tail -n 1

The LLMCheck index records plain decode only. MTP, DFlash and other speculative figures appear in prose, labelled, and never as rows, because they depend on the prompt: acceptance is high on repetitive code and low on open-ended chat. For a plain-decode number on your Mac, use mlx-lm’s benchmark, which runs no draft model (-p prompt tokens, -g generated tokens, -n trials):

pip install -U mlx-lm
mlx_lm.benchmark --model mlx-community/Qwen3.5-9B-4bit -p 512 -g 128 -n 5

Nemotron 3.5 in Ollama 0.40.5: Super runs on a Mac, Bolt does not

v0.40.5 (14 October 2026) added NVIDIA’s Nemotron 3.5 Super and Nemotron 3.5 Bolt. Bolt’s library page says Apple Silicon and Metal are not currently supported. Underneath, stock llama.cpp loads Bolt but segfaults on Metal on the first request, during prompt processing (issue #30610), and the fix, PR #30699, was still open on 18 October 2026. On a Mac, Bolt runs only through community MLX ports, which is why the index lists Nemotron 3.5 Bolt 74B-A9B with a runtime caveat.

Nemotron 3.5 Super is different: its tag list has MLX builds (120b-a12b-mlx-bf16, -nvfp4, -mxfp8) alongside GGUF q4_K_M and q8_0 tags. The index lists it as Nemotron 3.5 Super VL 120B-A12B, from 72 GB of unified memory.

“mlx runner failed … failed to load MLX dynamic library”

Error: 500 Internal Server Error: mlx runner failed: Error: MLX not available: failed to load MLX dynamic library (searched: […]) (exit: exit status 1) Error: 500 Internal Server Error: mlx runner failed: Error: failed to initialize MLX: libmlxc.dylib not found (exit: exit status 1)

Cause: Ollama could not load its MLX library, libmlxc.dylib. GGUF models keep working, which is the tell. Reports in Ollama’s tracker trace it to Homebrew ollama installs whose binary could not find the library (#15433, #15480), to a 0.20.4 app update that shipped Intel-only MLX libraries, and to running Ollama under Rosetta or on an Intel Mac, where MLX cannot load at all.

Fix
# 1. Native Apple Silicon? This must print arm64
uname -m

# 2. Which install, which version?
which ollama && ollama --version

# 3. Simplest fix: install the official app over it
#    (if you also have Homebrew's ollama, run: brew uninstall ollama)
curl -fsSL https://ollama.com/install.sh | sh

# 4. Homebrew formula only: the workaround from issue #15433
ln -s "$(brew --prefix mlx-c)/lib/libmlxc.dylib" "$(brew --prefix ollama)/bin"

The Homebrew ollama formula (0.40.6 on 18 October) depends on Homebrew’s mlx-c, so brew upgrade may be enough on its own. Until MLX loads, a GGUF tag such as qwen3.6:35b-a3b-q4_K_M runs on llama.cpp and avoids the error entirely. More Ollama errors are covered in the Ollama errors guide.

“this model requires MLX support, but the MLX runtime is not available”

Error: this model requires MLX support, but the MLX runtime is not available

Cause: Ollama raises this while pulling. The build it selected is MLX-only (safetensors weights) and this copy of Ollama cannot load MLX: an Intel Mac, Rosetta, or the library failure above.

Fix
# On Apple Silicon: fix MLX loading as above, then retry
ollama pull qwen3.6:35b-a3b

# On an Intel Mac (or to skip MLX): pull a GGUF tag
ollama pull qwen3.5:9b-q4_K_M

“pull model manifest: 412: this model requires macOS”

Error: pull model manifest: 412: this model requires macOS

Cause: ollama.com will not serve an MLX-only tag (nvfp4, mxfp8, mlx-bf16 and several -coding- tags) to a computer that cannot run MLX, usually a Linux or Windows machine. Ollama’s maintainers explain it in #15141 and #15854: these formats run on the MLX engine, and the MLX engine needs macOS.

Fix
# Pull a GGUF build of the same model instead
ollama pull qwen3.6:27b-q4_K_M        # not qwen3.6:27b-coding-nvfp4

# Seeing it on a Mac? Check the CPU and the version
uname -m            # must print arm64
ollama --version    # 0.40 or later