In April 2026 no Mac runtime could run a model's MTP heads; neither MLX nor GGUF had it. I wrote MTPLX from the papers and the CUDA reference code. I made the first commit on 27 April 2026 and had exact speculative sampling running the same day, the first release shipped on 2 May, and the same engine has since reached 81.74 tokens per second on a 27B model and 262k-token contexts on a Mac.
Probability-ratio acceptance with residual correction from the first day. Output matches plain decoding at any temperature, and there has never been a greedy-only path.
MTPLX v0.1 shipped on 2 May 2026 with native multi-token prediction and exact speculative sampling on Apple Silicon.
Prefix caching and speculative decoding run at the same time on hybrid GatedDeltaNet models, since 6 July 2026. A 100k-token session restores in about two seconds.
Youssof Altoukhi starts MTPLX alone, working from the Leviathan–Chen papers and the CUDA reference implementation. First commit da0d338.
Commit 7293ecb: probability-ratio acceptance with residual correction. 50/50 match against single-token decoding at temperature 0.6.
47.3 tok/s at depth 4 on Qwen 3.6 27B, 192-token coding bench, temp 0.6. Draft acceptance by depth 97.6 / 95.2 / 88.1 / 75.6 percent. Clean runs the next morning: 49.8 and 52.4 tok/s at depth 3.
60.169 tok/s at temp 0.6, depth 3, 192-token coding bench, fans pinned. No-MTP control on the same prompt: 23.59 tok/s. Two days after the first commit.
For the first time in history, MTP technology on a Mac. Tool calls for agents followed three days later.
PR #990 adds residual sampling to mlx-lm's MTP pull request, eight days after MTPLX's exact-sampling commit. The pull request is still open.
First public number: 63.056 tok/s at depth 3 against 28.156 tok/s plain decode. Qwen 3.6 27B, M5 Max, temp 0.6, top-p 0.95, top-k 20.
Peak memory at 32k context drops from 98.6 GB to 27.5 GB on Ivan Fioravanti's M5 Max benchmark.
v0.2.0 publishes the full curve on an M5 Max: 32k context at 620.6 tok/s prefill, 39.1 decode and 22.1 GB peak; 64k at 504.3 / 31.2 / 27.2 GB; 128k at 372.1 / 25.3 / 37.5 GB.
v0.3.2 adds mtplx start opencode: the first coding agent running on a local MTP server, nine days after v0.1.
oMLX commit c19a4f5d adds support for MTPLX-format models, nine days after v0.1.
PR #22673 merges MTP into llama.cpp, two weeks after MTPLX v0.1.
v0.3.7 runs Claude Code's full tool loop on the Anthropic-compatible /v1/messages route. Setup is one command: mtplx connect claude-code.
The native Mac app and the CLI ship as one product. Gemma 4, Qwen 3.6 35B-A3B and Qwen 3.5 4B and 9B join the 27B. Warm-prefix KV reuse in RAM and an SSD session cache. Image input with MTP intact follows in 1.0.3 the same day.
81.74 tok/s at depth 3, 2.69x over 30.37 plain decode. Qwen 3.6 27B Optimized Speed, 192-token bench, thinking off, temp 0.6, fans verified above 7,800 RPM, twin runs. Same day, same config, an uncapped 11,390-token Flappy Bird with reasoning on: 62.95 tok/s. Logs.
MTPLX 2.0.0 makes the turbo verify kernels the default: 27B Optimized Speed from about 45 to 58-60 tok/s in the chat lane, Optimized Quality from 31-36 to 43-44. Prefix caching runs alongside speculation on hybrid GatedDeltaNet models, with KV and recurrent state restored at commit boundaries; a 100k-token session restores in about two seconds.
oMLX, the widely used MLX server, ships Lightning MTP in 0.5.0 with MTPLX kernels doing the speculative decoding. Its README credit: "powered by MTPLX by Youssof Altoukhi."
MTPLX passes 1,000 GitHub stars, eleven weeks after the first commit.
PR #25589 brings MTP to Qwen3-Next hybrid GatedDeltaNet models in llama.cpp, three months after MTPLX ran them.
MTPLX 2.6.0 decodes for two agents at once with speculation on: 1.6 to 2.25x per lane over the previous batch route, sampled at shipped settings. Embeddings and rerank endpoints ship the same day.
MTPLX 2.7.0 ships Qwen 3.8 27B one day after Qwen released it. Bare Speed decodes 65.2 tok/s and Optimized Speed 58.7 on the coding task at Qwen's official sampling; the installed app runs 64.4 tok/s cold at 17.0 GB peak.
MTPLX 2.10.0 runs Qwen 3.8 Flash-Next, a 125B MoE, with its MTP head: 61 tok/s plain, 63 to 76 with MTP. The 27B speeds up at every context length: 3k from 55.9 to 64.3 tok/s, 88k from 23.6 to 30.4, 147k from 12.0 to 18.4. The cache-copy rewrite lane reaches 87.6 tok/s.
MTPLX 2.10.1 ships block-sparse prefill on Flash-Next: a 262,144-token cold prompt completes in 355 s at 87.4 GB peak, and 131k prompts prefill at 810 tok/s.
MTPLX passes 2,000 GitHub stars while on GitHub's monthly Trending list, 826 stars in the month. The Qwen 3.8 packs pass 119,000 Hugging Face downloads in thirty days.
MTPLX 2.11 decodes Qwen 3.8 Flash-Next at 68.4 tok/s at 16k context, 60.9 at 100k and 44.2 at 206k on an M5 Max with 128 GB, temperature 1, against 53.2, 47.5 and 32.2 on 2.10.2. The 27B gets a flash-decoding verify kernel. Agent tool turns lose their dead time: a turn after a file write re-prefills 20 tokens in 0.12 s instead of 3,535 in 3.7 s. The app ships a light appearance and twelve languages.