mrkeyoor.com_
Tue 01 Sept 17:41 UTC
AI Toolsevaluationupdated 25 Aug 2026

MTPLX review

MTPLX is a macOS application and Python command line for running local language models on Apple Silicon. It uses multi-token prediction heads already built into compatible models to draft several tokens, verify them together, and keep the normal sampling distribution when accepted.

+178stars / 7d
Verdict

Our MTPLX install took 138 seconds and its package built in 15 seconds, but tests failed after 69 seconds because the Debian environment had no mlx, so our run says nothing about its advertised decoding speed. Apple Silicon owners with a supported MTP model should trial its tuner against plain autoregressive decoding on their own Mac. Everyone else should choose MLX LM, llama.cpp, or vLLM according to hardware rather than trying to force this Mac-only runtime into place.

We ran it

Lab card: what happened when we ran MTPLXScreenshot of MTPLX (mtplx.com)
Install✓ · 138s77 packages · 191 MB
Build✓ · 15s
Tests✗ · 69sran, no count parsed
Known vulns0(pip-audit)
Repo1202 files~435,467 lines of source · 35.5 MB · 5 CI workflows · tests dir

Answers from our run

Does MTPLX build from source?

Dependencies installed in 138 seconds (77 packages), and the build succeeded in 15 seconds. We cloned commit bd44215 into a clean Debian container with 3 CPUs and no project-specific setup.

Do MTPLX's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does MTPLX have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use MTPLX?

Linux, Windows, CUDA, or Intel Mac users: the README requires Apple Silicon M1 or newer and macOS 14+, and directs Linux users to vLLM.

What are the alternatives to MTPLX?

MLX LM, llama.cpp, vLLM. Our MTPLX install took 138 seconds and its package built in 15 seconds, but tests failed after 69 seconds because the Debian environment had no mlx, so our run says nothing about its advertised decoding speed.

Setup4/5Polished Mac app, but hardware and model compatibility are strict
Docs5/5Detailed setup, tuning, server, cache, safety, and model guides
Community4/51,667 stars with active issues, fixes, and release work
Maturity3/5Fast releases and deep tooling, with active cache and model bugs

Discussed on

  1. hnMtplx – 2.24x faster TPS – The native MTP inference engine for Apple Silicon4 points
  2. hnMTPLX 1.0.03 points

Who it’s for

Apple Silicon owners who want an OpenAI-compatible or Anthropic-compatible local model server.
Developers running Qwen models with native MTP heads and enough unified memory for the chosen weights.
Claude Code and other agent users who want a local endpoint plus session caching and tool calls.
Model builders willing to use Forge to train, verify, and publish a matched MTP adapter.

Who it’s NOT for

Linux, Windows, CUDA, or Intel Mac users: the README requires Apple Silicon M1 or newer and macOS 14+, and directs Linux users to vLLM.
8 GB Mac owners expecting official model building to be settled: open issue 299 reports Forge failing on Qwen 3.5 2B and 4B on an M1 with 8 GB.
Teams that need every MLX model to gain MTP speed: MTPLX rejects mismatched or absent heads and does not attach an arbitrary sidecar to a trunk.
Coding-agent users who require durable warm sessions across restarts today: issue 323 reports a 100K-plus-token session never reaching the SSD cache.
Redistributors unwilling to show attribution inside the product: the NOTICE requires a visible Powered by MTPLX credit.

Setup reality

Our sandbox installed 77 Python packages in 138 seconds and used 191 MB on disk. The package build succeeded in 15 seconds. Tests failed with exit code 1 after 69 seconds because repeated engine-session cases could not import mlx; pip-audit found 0 known vulnerabilities.

A real inference setup requires Apple Silicon M1 or newer, macOS 14+, Python 3.11 or later for the CLI, and model weights sized for unified memory. The Mac app bundles its own engine and recommends models. Homebrew and pip are alternatives. Hugging Face downloads may benefit from a token, and fan-control installation asks for sudo once.

The 35.5 MB checkout contained 1,202 files and about 435,467 source lines, with 5 CI workflow files and a tests directory. The project declares mlx, mlx-lm, Transformers, and nanobind only on Darwin arm64. Our Debian build could package MTPLX, but it could not exercise the Apple inference backend.

MTPLX only makes sense on an Apple Silicon Mac

MTPLX requires an M1 or newer Mac, macOS 14 or later, and enough unified memory for the selected model. The README says 16 GB runs its 4B and 9B catalog choices comfortably, while its recommended Qwen 3.8 27B speed build starts at 32 GB. Linux users are explicitly directed to vLLM. This narrow target lets the project optimize for MLX and Metal instead of carrying several hardware backends.

The central idea is native multi-token prediction. A compatible model already contains heads that propose future tokens. MTPLX verifies a proposed block in one batched pass and uses rejection sampling with residual correction when sampling is enabled. It does not load a second draft model, which saves the memory that an external speculative decoder would need. Models without matching MTP weights can still be rejected or run in autoregressive mode, depending on their classified compatibility.

The README reports 1.6x speed on a 16 GB M4 Mac mini and 2.24x on an M5 Max. Its tuning example moves a 9B model from 14.4 to 23.0 tokens per second at draft depth 1. Those are project measurements, not our results. MTPLX sensibly includes a tuner that compares each depth with autoregressive decoding on the actual Mac and saves nothing when MTP loses.

The app removes much of the local-server plumbing

The native app checks hardware, recommends a model, downloads it, installs its Python engine, and can place mtplx on the shell path. Its dashboard exposes decode rate, acceptance by depth, cache state, verification work, and system pressure. Chat supports attachments and web search. Launch buttons can point OpenCode, Pi, Hermes, Open WebUI, and other compatible clients at the local server.

The server listens on 127.0.0.1:8000 by default and implements OpenAI chat, completions, models, optional embeddings and reranking, plus Anthropic messages. Streaming and tool calls are supported in both API styles. Claude Code can use it as a local endpoint. The app and CLI share one loaded model, avoiding a second copy when mtplx start detects the app's server.

Retrieval support is carefully separated from generation. Embedding and reranking models load on first request, have a default resident cap of 2, and do not use MTP because they return vectors or scores rather than next tokens. Checkpoints carrying custom Python are refused with HTTP 403 until an operator enables remote code. That default is the right one because downloading a model should not silently grant code execution.

What happened when we ran it

Our run installed 77 Python packages in 138 seconds, consuming 191 MB on disk. Building the Python package succeeded in 15 seconds. The checkout was 35.5 MB with 1,202 files and about 435,467 lines of source. pip-audit reported 0 known vulnerabilities, and the repository contained 5 CI workflow files plus a tests directory.

Tests failed with exit code 1 after 69 seconds. The supplied tail lists repeated failures in tests/test_engine_session_env.py, each ending with ModuleNotFoundError: No module named 'mlx'. The cases cover memory-size strings such as 16G, 512M, 4K, and invalid or nonpositive values, but the log gives no passed-test count and we will not invent one.

The packaging explains the platform result. mlx, mlx-lm, Transformers, and nanobind are conditional dependencies for Darwin on arm64. Our Python 3.12 Debian container could install 77 other packages and produce a distribution, but it did not receive MLX. The failed suite shows that some supposedly small environment-parsing tests still cross an Apple-only import boundary on Linux. It does not measure inference correctness or speed.

Compatible heads matter more than a matching tensor shape

MTPLX refuses to attach a separately supplied MTP sidecar to an arbitrary MLX trunk. The README argues that matching architecture fields and shapes cannot prove that a head was trained against those exact weights. Users should download a complete supported model or use Forge, which converts an upstream checkpoint, trains an adapter, and measures whether the result is both exact and faster before publishing.

mtplx inspect labels models as verified, family-compatible but unverified, architecture-compatible but unverified, autoregressive-only, incompatible, or missing MTP heads. There is no promise that every Qwen or MLX checkpoint works. Open issue 299 reports Forge builds failing for official Qwen 3.5 2B and 4B models on an M1 Mac with 8 GB, a useful warning for hardware below the README's 16 GB comfort point.

The official catalog includes several Qwen generations and Gemma 4 variants. Model licenses remain separate from MTPLX's Apache-2.0 code license. A product redistributing MTPLX must also retain its NOTICE and show the required visible attribution inside the product, not only in a repository or website.

Agent sessions still have sharp cache edges

Version 2.9.2 changed agent endpoints to pass transcripts through by default, after issue 282 objected to automatic tool-result compaction and steering. Rewrites now require an explicit master switch plus feature settings, and request logs record what changed. That is a better default for agents because a model server should not silently edit tool history.

Open issue 323 documents a 100K-plus-token coding-agent conversation that stayed warm in RAM but never wrote to the SSD session tier. Restarting caused a complete prefill that the reporter measured around 7 minutes. Another open report describes decode speed falling from 41 to 4 tokens per second without an intentional configuration change. These are individual reports, but both justify watching metrics and keeping a plain autoregressive comparison.

GitHub showed 1,667 stars, 76 open issues and PRs, a push on 2026-08-25, and release v2.9.2 that same day. Production users should pin a tested version.

MTPLX deserves a trial when one supported Mac is the deployment target and native MTP heads are available. Run its tuner, compare output and speed with autoregressive mode, test the exact agent transcript, and restart the server to check cache behavior. For broader hardware or model support, llama.cpp and MLX LM are safer defaults; for Linux GPU serving, vLLM fits the job better.

Alternatives

ProjectWhat it isPick it when
MLX LMApple's reference toolkit for running and fine-tuning language models with MLX.pick this instead when broad MLX model support matters more than MTPLX-specific MTP decoding.
llama.cpp gh↗A widely portable local inference engine with extensive quantization and hardware backends.pick this instead when Linux, Windows, Intel, or a larger model-format ecosystem matters.
vLLM gh↗A GPU-oriented server for high-throughput model inference and OpenAI-compatible APIs.pick this instead when NVIDIA or Linux server throughput is the target rather than one Mac.

What people are saying

  1. [github-trending] youssofal/MTPLX

Sources

  1. MTPLX README
  2. MTPLX package configuration
  3. MTPLX 2.9.2 release
  4. M1 Forge build issue
  5. Coding-agent SSD cache issue
  6. Decode speed drop issue

More ai tools reviews

claudian · SkillSpector · robin · mjlab · MoGe · awesome-design-md · the whole board →