Your Mac is already an inference machine β unified memory, a GPU that shares it, and zero dollars per token. What it was missing was a server that treats it like one: answering Cursor, Claude Code, Aider, and your own scripts at the same time, over the same OpenAI wire, with no cloud account in the loop.
In this guide I show you what Rapid-MLX is and why ~3,800 developers starred it, how its MLX-native engine works in 4 steps, the verified quickstart that serves Qwen in 60 seconds at localhost:8000/v1, and β just as important β when you should NOT use it.
1. What Rapid-MLX Is: Stars, License, and the Idea
Rapid-MLX is an open-source, high-performance LLM server built exclusively for Apple Silicon Macs on top of Apple's MLX framework. One command serves an open model behind a drop-in OpenAI-compatible (and Anthropic-compatible) HTTP API, so any client that speaks the ChatGPT wire β agents, IDEs, or your own Python β can point at http://localhost:8000/v1 with no adapter and no API key. As of September 22, 2026 the repository at github.com/raullenchai/Rapid-MLX sits at roughly 3,800 stars and 418 forks under the Apache 2.0 license, with the catalog at 261 total aliases: 196 text, 11 image, 10 video, and 44 audio.
Repo Facts (verified Sept 2026)
- Repository: github.com/raullenchai/Rapid-MLX
- Stars: ~3,800 (check the live count on GitHub)
- License: Apache 2.0 β commercial use allowed
- Endpoint: http://localhost:8000/v1 (OpenAI wire) + /v1/messages (Anthropic wire)
- Models: 260+ aliases: Qwen 3.5/3.6/3.8, Gemma 4, DeepSeek, GPT-OSS, GLM, vision, TTS, video
The core bet is hardware honesty: Ollama and llama.cpp are C++ engines with a Metal backend, while Rapid-MLX runs pure MLX kernels at native unified-memory bandwidth on M1 through M5. The repo claims 4.2x faster than Ollama in its tagline while the body documents up to 3x measured throughput β treat both as repo-reported numbers you can reproduce yourself with the built-in rapid-mlx benchmark run, which is exactly what the community leaderboard at rapidmlx.com is for.
Why this matters in 2026
Coding agents got expensive and chatty: every Ctrl-K, composer run, and background agent burns tokens. A local server turns that meter off β $0 per token, your code never leaves the Mac β while keeping the exact same tools: Claude Code, Codex CLI, Aider, OpenCode, and anything OpenAI-compatible keep working, just pointed at localhost.
2. Architecture in 4 Steps: From Request to Tokens
The README documents the engine as MLX-native serving with continuous batching, a quantized live KV cache, prompt caching, and speculative decoding. Here it is, step by step:
Step 1 β MLX-native execution, no llama.cpp
Pure MLX kernels with Metal compute β no C++ fallback, no shim. The engine inherits paged KV cache, prefix cache, and continuous batching from its vLLM-MLX lineage, so one Mac answers Cursor, Claude Code, your agents, and your scripts concurrently instead of queueing them behind each other.
Step 2 β caches everywhere: prompt, prefix, quantized KV
A radix prompt cache with DeltaNet RNN snapshots plus a quantized live KV cache (int4/int8 on the continuous-batching path, TurboQuant K8V4 codec) cuts repeat work. The repo reports 0.08s cached time-to-first-token, and shared prefixes across concurrent callers stop paying prefill twice.
Step 3 β 17 tool parsers behind standard wires
Seventeen tool-call parsers (hermes default on Qwen, qwen3 reasoning parser, and family-specific envelopes) with reasoning separation, exposed over /v1/chat/completions, /v1/responses for Codex CLI, and /v1/messages for the Anthropic SDK and Claude Code. Twelve agent CLIs plus LangChain, PydanticAI, and smolagents are wire-verified against real weights every release β five of them Tier-1, blocking the release if they fail.
Step 4 β speculative decoding + one-command agent wiring
A verified MTP path (1.43x at 128 tokens up to 2.34x at 32K on Qwen3.8-27B, byte-identical output) plus opt-in DFlash speculative decoding. And rapid-mlx launch claude-code patches your agent config to route at the local server β fully local Claude Code with no manual JSON editing.
Throughput, honestly framed
Two numbers coexist on rapidmlx.com: aggregate throughput with 4 concurrent streams (Qwen3.5-4B at 261 tok/s on an M3 Ultra) and single-request decode (the same class of model at ~37 tok/s on a 16 GB M4). Both are repo-reported medians, not independent reviews β compare aggregate with aggregate and single with single, and run rapid-mlx benchmark run on your own Mac before choosing a daily driver.
3. Quickstart: Serving Qwen in 60 Seconds (Verified)
Every command below comes straight from the live README and rapidmlx.com/download β I verified each one against the repo on September 22, 2026. Pick one install path, then serve. First run downloads the weights (~3 GB for the starter model) with a progress bar; after that it is seconds.
# Option A β Homebrew (prebuilt bottle, no tap needed) brew install rapid-mlx # Option B β guided installer (detects RAM, recommends a starter model) curl -fsSL https://rapidmlx.com/install.sh | bash # Option C β pip (needs Python 3.10+; macOS ships 3.9, so brew install python@3.12 first) python3.12 -m pip install rapid-mlx # Extras: pip install 'rapid-mlx[vision]' | pip install 'rapid-mlx[audio]' | pip install 'rapid-mlx[all]'
# Chat right now (defaults to qwen3.5-4b-4bit)
rapid-mlx chat
# Or serve it for every other app
rapid-mlx serve qwen3.5-4b-4bit
# => serving on http://localhost:8000/v1
# Sanity check the wire
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"default","messages":[{"role":"user","content":"Say hello"}]}'# Point any OpenAI client at it β no key needed
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
print(client.chat.completions.create(
model="default",
messages=[{"role": "user", "content": "Say hello"}],
).choices[0].message.content)
# Claude Code / Anthropic SDK uses the same host: http://localhost:8000
# (the Anthropic messages route lives at /v1/messages)# Wire your coding agent with one command (server must be running) rapid-mlx launch claude-code # patches ~/.claude/settings.json, $0 per token rapid-mlx launch list # everything detected on this machine # Self-diagnose when something feels off rapid-mlx doctor # metal, imports, CLI, model load: PASS/FAIL rapid-mlx benchmark run qwen3.5-9b-4bit # reproducible numbers for YOUR Mac
Pick the model by your RAM with rapid-mlx recipe or rapid-mlx info <alias> β Qwen3.5/Qwen3.6 default to thinking-on, so add --no-think if decode feels slow. One honest caveat from the README itself: Cursor routes BYOK requests through its own servers, which cannot reach your localhost β Cursor needs a public HTTPS tunnel plus RAPID_MLX_API_KEY, and that stops being fully local. Claude Code, Codex CLI, Aider, and OpenCode work against localhost directly.
Tip: let the installer pick your first model
The guided installer and the Desktop app read the same RAM-tier catalog, and a CI test fails if they drift apart. On 16 GB it picks qwen3.5-4b-4bit (~6 GB peak), on 32 GB+ qwen3.8-27b-4bit (~20 GB) β start there, benchmark, and only then climb toward the 35B MoEs and the 158B DeepSeek lane.
4. Pick by RAM: What Fits Your Mac
Unified memory is the hard ceiling β the model, the KV cache, and macOS all share it. These are the repo-reported tiers and speeds (PyPI page, README tier map, and community benchmarks, September 2026):
16 GB MacBook Air/Pro β Qwen3.5-4B
rapid-mlx serve qwen3.5-4b-4bit, ~6 GB peak. Community single-request decode ~37 tok/s on M4; aggregate 261 tok/s over 4 streams on M3 Ultra. The daily driver for laptops.
32 GB Mac β Qwen3.8-27B
rapid-mlx serve qwen3.8-27b-4bit, ~20 GB peak. Verified 43.4 tok/s decode and 330.8 tok/s prefill at 8K context on M3 Ultra, with MTP enabled automatically. GPT-5.6-class open weights on a desk machine.
64β96 GB Mac β 35B MoE / 122B
Qwen3.5-35B at ~83 tok/s on 64 GB; Qwen3.5-122B at ~57 tok/s on 96 GB+. MoE shapes (few active billions per token) are why these fit where dense models cannot.
128 GB+ Studio β DeepSeek V4 Flash 158B
158B-A13B MoE at 31β56 tok/s with 1M context on 128 GB+. Frontier-level intelligence, day-zero support, still $0 per token and fully offline.
The pattern across all four: match the alias to your unified memory first, benchmark second, and remember that single-request decode and 4-stream aggregate are different sports β the number that matters is the one measured in your workload, on your chip.
5. When NOT to Use Rapid-MLX: Honest Limits
I like Rapid-MLX, but it is a Mac-only server with opinions β it has a platform gate, a memory ceiling, and a setup step. Here is my honest checklist:
β Reach for something else when
- β’ You are not on Apple Silicon β MLX requires an M1 or newer on macOS 14+. Intel Macs, Windows, and Linux servers are out; for NVIDIA/CUDA fleets use vLLM or SGLang.
- β’ You need Cursor on plain localhost β Cursorβs BYOK path cannot reach your loopback; tunneling it public breaks the fully-local story, so keep cloud models there.
- β’ You want managed scale β one Studio serves a team, not a product launch; bursty multi-user traffic belongs on hosted inference with autoscaling.
- β’ Your Mac has 8 GB β only the smallest aliases (lfm2.5-2.6b class, ~3 GB) fit, and anything above swapped memory will feel broken, not slow.
- β’ You need reproducible vendor SLAs β community benchmarks are medians on specific chips and thermals; if you must promise p99 latency, measure your own fleet first.
β Rapid-MLX is a great fit when
- β’ You code daily with Claude Code, Codex CLI, Aider, or OpenCode and want $0 per token.
- β’ Your code or prompts cannot leave the machine β offline, private, no account, no billing.
- β’ One Mac must serve several apps and agents concurrently over standard OpenAI/Anthropic wires.
- β’ You want tool calling that actually parses β 17 parsers with release-blocking agent smoke tests.
Golden rule
Size the model to the Mac, not the hype. If you cannot answer βhow much unified memory is free after the model, the KV cache at my context length, and macOSβ, run rapid-mlx recipe and benchmark before adopting anything bigger β the fastest server is the one that never swaps.
Conclusion
Rapid-MLX earns its ~3,800 stars honestly: it turns the Mac from a machine that can run models into a machine that serves them β MLX-native kernels, caches at every layer, speculative decoding, and an OpenAI-compatible surface that twelve agent CLIs already speak. The RAM-tier catalog plus the built-in benchmark harness make the usually painful βwhat fits my machineβ question a two-command answer.
Install it with brew, serve qwen3.5-4b-4bit, point one agent at localhost:8000/v1, and compare a week of local tokens against your last API bill. If the quality holds for your workload, the server pays for itself the day you stop counting tokens.
Sources
- Rapid-MLX repo (stars, license, install, quickstart, benchmarks) β github.com/raullenchai/Rapid-MLX
- Rapid-MLX homepage (throughput tables, model catalog) β rapidmlx.com
- Install options (Homebrew, guided installer, Desktop) β rapidmlx.com/download
- PyPI page (pip install, RAM/speed rows) β pypi.org/project/rapid-mlx
- Qwen family on Rapid-MLX (59 aliases, hermes parser, MTP flags)
- Cursor with a local LLM guide (localhost caveat) β rapidmlx.com/blog



