Streaming chat
Replies stream in with live speed, tool calls appear as pills you can open, and every conversation is kept on your Mac.
Chat with open models, let them write code with real tools, make and edit images, and serve them to every app you use through one local API. Nothing leaves your Mac. Free and open source.
Free · 589 MB · signed and notarized · macOS 14.5 or later · Apple silicon (M1 or later)
Source on GitHub · MLX Node comes inside
Simple enough to open and start talking. Deep enough to show you what the model is doing, and why.
Replies stream in with live speed, tool calls appear as pills you can open, and every conversation is kept on your Mac.
Reasoning shows in a block you can fold away. Turn thinking on, off or leave it to the model, and set its effort where the model allows.
Drop a photo, a video, a voice note or a text file into the chat. Models that take them see them; others are told so.
Dictate with Whisper and hear replies read aloud with Kokoro. Both run on your Mac too.
Chat with the models on your Mac, or connect a remote OpenAI-compatible endpoint and use it in the same window.
The app speaks English, Español, 日本語, 한국어 and 中文, and follows your Mac’s light or dark appearance.
Reasoning is read for Qwen 3, DeepSeek R1, GLM, MiniMax M2 and M3, gpt-oss, Mistral, Gemma 4, Muse Glimmer, Inkling, any <think> model.
Turn on built-in tools in a chat, pick a working folder, and the model can read and edit code, search it, run commands and check git, on your machine. Switch any group off, and add MCP servers for more.
read_fileRead a file with line numberswrite_fileCreate or overwrite a fileedit_fileReplace exact textpatch_fileApply a unified diffbatch_editSeveral edits in one callinsert_textInsert text at a linereplace_linesReplace a range of linesapply_regexRegex replace across filescopy_fileCopy a filemove_fileMove or renamedelete_fileDelete a file or empty foldercreate_directoryMake folderslist_directoryList a folderread_imageRead an image fileread_videoAttach a video for a vision modelsearch_filesSearch contents with ripgrepfind_filesFind files by nameget_treeProject tree, minus .gitignorefile_infoSize, type, dates, permissionsdiff_filesDiff two files, or against git HEADget_diagnosticsTypeScript, ESLint or Python checksrun_commandRun a command, 60-second limitspawn_processStart a dev server or watcherget_process_outputRead a background processrun_applescriptAutomate Mac appsddg_searchWeb search, no key neededweb_searchBrave Search, with your keyfetch_urlRead a page as textgitStatus, diff, log, commit and more; force-push and other destructive commands are blockedget_current_datetimeDate, time and time zoneclipboard_readRead the clipboardclipboard_writeWrite to the clipboardcount_tokensEstimate tokens in a textask_userStop and ask you a questionPrefer your own coding agent? Point it at MLX Harness’s local API. MLX Harness sets up Claude Code, Codex CLI, OpenCode, OpenClaw and Hermes Agent in one click, and puts their settings back when you remove it.
The local API →Tool calls are read in 26 model formats (Qwen, XML function calls (Qwen3 Coder, MiMo), Llama, Mistral, Hermes, DeepSeek, DeepSeek V4 (DSML), Kimi, GLM-4.7, MiniMax, MiniMax M3, Gemma 3, Gemma 4, Granite, Nemotron, xLAM, Functionary, Step 3.5, Spark 2.5, LFM2, MiniCPM 5, openPangu, Hunyuan, ZAYA, Muse Glimmer, dots), or detected automatically. Commands time out after 60 seconds, background processes stop after 5 minutes, and Brave Search needs your own key.
16 image models, downloaded when you first use them. Give it a prompt, or a photo and a prompt to restyle it, paint a mask to change one part, or upscale the result. No credits, no uploads.
From a prompt, or from a photo and a prompt.
| Model | Steps | Size |
|---|---|---|
| Flux SchnellThe fastest | 4 | 6–24 GB |
| Z-Image TurboFast turbo generation | 4 | 6–24 GB |
| Flux DevHigh quality | 20 | 6–24 GB |
| FLUX.2 Klein 4BFast and small | 20 | 4–8 GB |
| FLUX.2 Klein 9BMedium quality | 20 | 8–18 GB |
| Qwen ImageStrong prompt understanding | 20 | 20–40 GB |
| Qwen Image 2.1also editsGeneration and reference editing | 40 | 10–32 GB |
| Qwen Image 2.1 Turboalso editsDistilled, 8 steps | 8 | 32 GB |
| Ideogram 4Typography and structured captions | 20 | 14–28 GB |
| FIBOfrom a folderJSON prompts | 20 | 9 GB at 4-bit |
Change a photo with words, or paint a mask and fill it.
| Model | Steps | Size |
|---|---|---|
| Qwen Image EditInstruction-based editing | 28 | 54 GB |
| Flux KontextKeeps the subject consistent | 24 | 6–24 GB |
| Flux FillInpainting with a mask | 20 | 24 GB |
| FLUX.2 Klein 4B EditReference image editing | 20 | 4–8 GB |
| FLUX.2 Klein 9B EditReference image editing | 20 | 8–18 GB |
Sharper, larger versions of an image.
| Model | Steps | Size |
|---|---|---|
| SeedVR2 3Bfrom a folderNative image upscaling | 1 | 7 GB |
Sizes are the app’s own estimates: a range runs from the 4-bit build to full precision. “From a folder” models open from a copy already on your Mac. Images run on mflux, and the same models answer the API at /v1/images/generations and /v1/images/edits.
MLX Harness is the app: the chat window, the tools, the model browser. Underneath runs vMLX’s open-source inference engine by JANGQ AI, the same one you can install on its own. It is built to keep long conversations and many agents fast on Apple silicon.
The parts of a prompt you’ve already sent are computed once and reused, so a long chat doesn’t get slower with every turn.
The cache lives in fixed-size blocks that conversations share, so many chats and agents fit in memory side by side.
Prompt caches are written to your SSD and survive a restart: come back to a warm start instead of computing it all again.
Store the cache at 8 bits (about half the memory) or 4 bits (about a quarter), which is what lets very long contexts fit.
Several requests share one loaded model: one by default, up to 1,024 at once if you raise the limit for a session.
A small draft model proposes tokens the big one checks, prompt lookup speeds up repetitive output, and models with built-in MTP heads use them.
Mamba, Jamba, RWKV, Nemotron-H, Falcon-H1 and Qwen3-Next keep their own state caches, not a transformer’s.
Streams a mixture-of-experts model’s expert weights from the SSD as they are needed, so models bigger than memory can run.
Vision-language models, Whisper speech-to-text, Kokoro text-to-speech, embeddings and reranking, all on the same server.
Each model family gets its own cache, tool-call and reasoning settings: 90 families with tuned profiles, covering 131 Hugging Face model types.
baichuanbailing_hybridbailing_moe_v2_5chatglmcodestralcodestral_mambacogvlmcogvlm2coherecohere2deepseekdeepseek2deepseek_v2deepseek_v3deepseek_v32deepseek_v4deepseek_vldeepseek_vl2deepseek_vl_v2devstraldots3_noteexaoneexaone3falcon_h1falcon_mambaflorence2gemmagemma2gemma3gemma3_textgemma3ngemma3n_textgemma4gemma4_textglmglm4glm4_moeglm4_moe_liteglm5_nextglm5_next_textglm_moe_dsagot_ocr2gpt_ossgranitegranite_moegranitemoehybridhermeshy_v3idefics2idefics3internlminternlm2internlm3internlm_xcomposer2internvl_chatjambakimi_k2kimi_k25lagunalfm2lfm2_moellamallama4llavallava_nextmambamamba2mimo_v2minicpmvminicpmv4_7minimaxminimax_m2minimax_m2_5minimax_m3minimax_m3_vlministral3mistralmistral3mistral4mixtralmolmomuse_glimmernaive_n05_flashnanbeigenemotronnemotron_hnemotron_h_v2olmoolmo2openpangu_v2paligemmapaligemma2phiphi3phi3smallphi3vphi4phi4_reasoningphi4flashphi4mmpixtralqwenqwen2qwen2_5_vlqwen2_moeqwen2_vlqwen3qwen3_5qwen3_5_moeqwen3_5_moe_textqwen3_moeqwen3_nextqwen3_vlqwen3_vl_moeqwen4_expqwen4_exp_textqwen_mambarwkvrwkv5rwkv6rwkv7smolvlmspark2_5stablelmstarcoder2stepstep1vstep3p5step3p7zayazaya1_vlEach model you load gets its own server, and one gateway at http://127.0.0.1:8080 routes every request to the model it names, loading it if it’s stopped. It speaks OpenAI, Anthropic Messages and Ollama, so Claude Code, the OpenAI and Anthropic SDKs and apps built for Ollama connect unchanged.
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-8B-4bit",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'Any OpenAI-compatible client works the same way. Use the model’s name as Servers & API shows it, or list them at /v1/models.
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="not-needed")
reply = client.chat.completions.create(
model="Qwen3-8B-4bit",
messages=[{"role": "user", "content": "Hello!"}],
)
print(reply.choices[0].message.content)No key is needed unless you set one for the session; the SDK just wants a value.
import anthropic
client = anthropic.Anthropic(base_url="http://127.0.0.1:8080", api_key="not-needed")
message = client.messages.create(
model="Qwen3-8B-4bit",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}],
)
print(message.content[0].text)The Anthropic SDK adds /v1/messages itself, so the base URL stops at the port.
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8080",
"ANTHROPIC_MODEL": "Qwen3-8B-4bit",
"ANTHROPIC_API_KEY": "mlxstudio"
}
}Merge the env block into your settings, or let MLX Harness do it: Servers & API → API → Coding tools → Auto-configure. Removing it there restores what you had.
export OLLAMA_HOST=http://127.0.0.1:8080
ollama list
ollama run Qwen3-8B-4bitApps and tools built for Ollama talk to the same gateway through its /api endpoints.
pip install vmlx
vmlx serve mlx-community/Qwen3-8B-4bit
# http://127.0.0.1:8000/v1Just the server, without the app: vMLX’s engine from PyPI, by JANGQ AI. It serves the same OpenAI, Anthropic and Ollama endpoints on port 8000.
/v1/chat/completionsChat, streaming and tool calls/v1/responsesResponses API/v1/completionsPlain text completion/v1/embeddingsEmbeddings/v1/images/generationsMake an image/v1/images/editsEdit an image/v1/audio/transcriptionsSpeech to text/v1/audio/speechText to speech/v1/modelsLoaded models/v1/messagesMessages API, streaming and tools/api/chatChat/api/generateGenerate/api/embedEmbeddings/api/tagsModelsSessions take ports from 8000 up; the gateway listens on 8080 on 127.0.0.1 unless you change it. No key is needed unless you set one. MCP tools are served at /v1/mcp/tools and /v1/mcp/execute.
Search Hugging Face and download from inside the app. Inspect a model, run a health check on it, or convert one yourself instead of waiting for someone to publish it.
Search Hugging Face by name, see what’s already on your Mac, and download with progress you can pause and resume.
Turn a Hugging Face model into MLX: Compact (3-bit), Balanced (4-bit), Quality (8-bit), your own bit width, or one of JANG’s mixed-precision profiles.
Model Inspector reads a model’s metadata; Model Doctor checks its config, weights and architecture, and can test it.
Mixed precision by JANGQ AI: attention keeps more bits than the MLP layers, so a model shrinks where it hurts least.
| Profile | Mix | Avg. bits |
|---|---|---|
| 1L Max quality 2-bit | 8-bit attention and embeddings, 2-bit MLP | ~2.4 |
| 2S Tight | 6-bit attention, 4-bit embeddings, 2-bit MLP | ~2.3 |
| 2M Balanced | 8-bit attention, 4-bit embeddings, 2-bit MLP | ~2.5 |
| 2L Quality | 8-bit attention, 6-bit embeddings, 2-bit MLP | ~2.7 |
| 3S Compact | 6-bit attention, 3-bit everything else | ~3.1 |
| 3M Recommended | 8-bit attention, 3-bit everything else | ~3.2 |
| 3L Protected | 8-bit attention, 4-bit embeddings, 3-bit MLP | ~3.4 |
| 4S Light | 6-bit attention, 4-bit everything else | ~4.1 |
| 4M Standard | 8-bit attention, 4-bit everything else | ~4.2 |
| 4L Premium | 8-bit attention, 6-bit embeddings, 4-bit MLP | ~4.5 |
| 6M Near lossless | 8-bit attention, 6-bit everything else | ~6.2 |
GGUF files aren’t supported: start from the model’s Hugging Face weights instead.
Memory decides which models fit. Bandwidth decides how fast they write. Here are the best five for your Mac, from the same numbers as mlx.app/compare.
Estimates, not measurements: the fit comes from each model’s size at the precision shown and 75% of the Mac’s memory; the speed from its memory bandwidth, at the 45–80% of the ceiling that real runs reach. One chat at a time.
Every model on this Mac →MLX Harness runs the models you choose. MLX Node, which MLX Harness carries inside and installs on first run, lends your Mac’s idle time to MLX Network and mines MLX Tokens for verified AI work. MLX Harness’s Network tab shows the network live, whether MLX Node is running, and what your wallet is mining. MLX Harness itself never mines.
Local first, like a BitTorrent peer: your Mac serves you, lends its idle time, and can ask the network when it needs more. How it works
Step by step, on mlx.app.
MLX Harness is a fork of vMLX by JANGQ AI under the Apache License 2.0, and our changes are open under the same license, alongside the source of MLX Node and MLX.app for iPhone. Read it at github.com/MLXapp/studio.
Free, open source and private by design.
Built on vMLX by JANGQ AI · MLX Harness and MLX Network are independent and not affiliated with Apple.