vMLX
v1.6.48 open-sourcevMLX - JANGTQ Uber Compressed MLX Models - L2 Disk Cache (survives restart) + L1 Paged (super fast ttft) + Hybrid SSM Scheduler + Cont Batching + etc!
import anthropic
client = anthropic.Anthropic(base_url="http://localhost:8000/v1", api_key="not-needed")
message = client.messages.create(
model="local",
max_tokens=4096,
thinking={"type": "enabled", "budget_tokens": 2000},
messages=[{"role": "user", "content": "Prove that sqrt(2) is irrational."}],
)
print(message.content[0].text)
curl http://localhost:8000/api/chat \
-H 'Content-Type: application/json' \
-d '{
"model": "local",
"think": "high",
"messages": [{"role": "user", "content": "Explain the halting problem."}]
}'
DSV4_ANSWER_RESERVE=0 vmlx serve <deepseek-v4-flash-model>
DSV4_ANSWER_RESERVE=0 vmlx serve <deepseek-v4-flash-model>
# Place your MCP config in the project root, then launch normally
# vMLX will auto-discover mcp.json or mcp.yaml without any extra flag
echo '{"mcpServers": {"my-server": {"command": "npx", "args": ["-y", "my-mcp-server"]}}}' > mcp.json
vmlx
max_prompt_tokens=4096 max_context_tokens=8192
vmlx --omni-backend stage2
vmlx-serve <omni-bundle>
pip install -U "vmlx[mxtq]==1.4.1"
curl -X POST http://localhost:8080/v1/images/cancel
vmlx serve --prefix-cache-max-bytes 4294967296 <model>
vmlx serve --default-enable-thinking
model_type: mistral4 Summary
vMLX is a open-source inference server that runs large language models, vision-language models, and image generation locally on Apple Silicon. It runs as a command-line tool, self-hosted on the developer's own Mac, with no third-party API keys or cloud dependency, and it also ships an OpenAI-, Anthropic-, and Ollama-compatible HTTP API so existing scripts and tools work unchanged. It is aimed at developers and ML practitioners running models on M-series Macs rather than in the cloud, and the vendor names LM Studio and Ollama directly, claiming faster time-to-first-token through prefix caching, paged KV cache, and continuous batching, features it says those tools lack. Development is active, with over 3,400 commits and 45 releases in the past year and the last one 17 days ago.
vMLX - JANGTQ Uber Compressed MLX Models - L2 Disk Cache (survives restart) + L1 Paged (super fast ttft) + Hybrid SSM Scheduler + Cont Batching + etc!
What vMLX answers
What hardware and software does this actually require?
Apple Silicon (M1 through M4) with macOS Sequoia or Tahoe, and a Python 3.10 or newer environment
What happens when a request exceeds my Mac's memory?
the server reports the real memory ceiling at startup, shrinks prefill chunks under pressure, and returns a clean error instead of crashing with an out-of-memory failure
Does it only handle text models?
no, it also serves vision-language models and image generation alongside LLMs, all running locally with no cloud call
How does it behave across a long-running or interrupted conversation?
it rewinds the cache to the last shared prefix on retry instead of reprocessing the whole prompt, and an expanded cache index keeps reuse working deep into long sessions
Can models call external tools or APIs?
native Model Context Protocol support lets a served model invoke external tools as part of an agentic workflow
Examples
Command line
No option matches that search.
| option | found in | since | description |
|---|
No option matches that search.
Values are placeholders taken from each option’s declared default. Nothing is executed here — the output shown is a recording of a run that already happened.
Release history
- v1.6.48
vMLX 1.6.48 enables vectorized GLM KDA MTP verification and makes native MTP restart cache proofs configurable
└──▷ GET THIS VERSION$ git clone --branch v1.6.48 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.48
- ›Makes native MTP restart cache proofs configurable (commit
fc88a3ea). - ›Enables vectorized GLM KDA MTP verification for GLM-family models.
- ›Adds typed prompt SSD cache support to the MTP benchmark.
- ›Attests fast gateway replays from durable request IDs.
- ›Keeps Hugging Face download progress refresh-compatible.
- ›Makes native MTP restart cache proofs configurable (commit
- v1.6.46
vMLX 1.6.46 adds GLM-5.3-Flash text support, native MTP for GLM, typed prompt caching for GLM, and a wired-limit recommendation popup in the server panel.
└──▷ GET THIS VERSION$ git clone --branch v1.6.46 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.46
- ›Adds GLM-5.3-Flash text runtime with registry row and text-route, including bundle-stamped parser ID aliases for the GLM-5 family.
- ›Enables native Multi-Token Prediction (MTP) for GLM-5.3 at the public loader, with quantization mapped onto the attached head and adaptive MTP depth policy.
- ›Adds exact typed GLM native-state prefix caching (GLM typed prompt cache) with metadata validation on live restore, memory-bounded cache snapshots, and cache persistence through native MTP finalization.
- ›Adds GLM DSA sparse indexer path, unlocking full context for GLM-5 family models.
- ›Adds GLM-5-next family row, parser dropdown entries, and alias canonicalization to the server panel UI.
+15 moreshow less
- ›Adds a visual wired-limit recommendation popup at session launch (W0-W2 core) in the server panel.
- ›Adds peak benchmark profiles to the server panel.
- ›Records request-exact MTP benchmark telemetry for observability.
- ›Exposes DSV4 indexer acceleration status and separates DSV4 indexer hits from fallbacks in engine reporting.
- ›Reports observed fused decode paths and standardizes cross-family acceleration status display.
- ›Adds source-gated affine MoE pair fusion for hybrid decode.
- ›Adds opt-in Qwen3.5 GDN decode fusion with exact gate preparation.
- ›Enables proven Qwen4 affine MoE pair decode and GLM mHC decode fusion.
- ›Fuses GLM KDA decode convolutions and state update, GLM mHC decode transform, GLM affine MoE down reduction, and GLM hyper-connection placement for fewer Metal dispatches.
- ›Fuses Qwen GDN decode convolution state update, Qwen PLE decode convolution, and small-row gated RMSNorm for hybrid decode.
- ›Groups GLM and Qwen4 affine projections and Qwen3.5 GDN decode projections at load time for fewer dispatches.
- ›Parallelizes Qwen4 PLE decode row reads.
- ›Caches completed GLM DSA pool keys to reduce redundant computation.
- ›Flushes final MLLM detokenizer bytes to streams and reconciles terminal MLLM and visible stream suffixes.
- ›Tahoe/macOS 26 is now the default build; Sequoia is the compatibility build.
- v1.6.45
vMLX 1.6.45 adds prefix-cache fetch provenance to
/healthand/v1/cache/stats, plus per-request native-MTP adaptive telemetry.└──▷ GET THIS VERSION$ git clone --branch v1.6.45 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.45
- ›Per-request native-MTP telemetry now reports the adaptive profile seed and workload key.
- ›Engine-owned lifecycle load progress is now surfaced across every panel view, generation-guarded against stale attempts.
- v1.6.42
vMLX 1.6.42 adds Qwen3.8 Flash Next support with SSD-backed n-gram caching, multimodal input, and adaptive MTP depth control.
└──▷ GET THIS VERSION$ git clone --branch v1.6.42 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.42
- ›Adds support for the Qwen3.8 Flash Next model, covering its hybrid QSA/Gated DeltaNet architecture, native reasoning tiers, and in-model MTP head.
- ›Adds Electron settings for detected native MTP mode and adaptive or fixed D1-D3 depth policy, with persisted launch-argument parity.
- ›Adds file-backed, row-addressed PLE bigram/trigram tables on SSD, avoiding materializing the full n-gram table in unified memory.
- ›Adds request-local MTP rollback/commit state with adaptive depth probing based on confirmed tokens per wall second.
- ›Adds mixed image and video input support for Qwen3.8 Flash Next, preserving modality order, processor scaling, embeddings, cache keys, and request-local MTP state.
+1 moreshow less
- ›Fuses Gated DeltaNet projections and hyper-connection execution while preserving the checkpoint's mixed-precision JANG contract.
- v1.6.35
vMLX 1.6.35 ships SSD-first prompt caching by default, disk-proportional cache budgets, and full-precision stored prefix caches.
└──▷ GET THIS VERSION$ git clone --branch v1.6.35 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.35
- ›SSD prompt cache is now the default; the in-memory paged cache is OFF by default, keeping memory consumption close to the loaded model size rather than growing with conversation length.
- ›SSD cache budget is now expressed as a percent of available disk (10% by default) instead of a flat gigabyte value, scaling proportionately across drive sizes.
- ›One unified budget now covers all cache types vMLX writes — plain KV blocks, typed companion state, native composite records, rotating sliding-window state, and multimodal blocks — across every model and session, with oldest prompts evicted first.
- ›Stored prefix caches are now full precision for every model family; TurboQuant stored-KV encoding measured under 1% improvement on time-to-first-token, so exactness is preferred.
- ›Session Settings surfaces the RAM-tier trade-off at the top — notes the ~2% time-to-first-token gain and the memory cost — and links directly to the setting.
+4 moreshow less
- ›The 'Clear SSD cache for this session' button now reports which cache tiers were actually cleared and which were still in use, rather than claiming success either way.
- ›Cache eviction protects the prefix currently being actively reused and removes idle ones first, across models including models that are not currently running.
- ›Prompt caches now survive a hard kill and restart across five cache architectures: DeepSeek-V4 composite, rotating sliding-window with images, SSM/GatedDelta companion, dots3 DSA, and MiniMax sparse MSA.
- ›The engine now emits an explicit warning when a cache budget is smaller than a single prompt's block chain, instead of silently storing nothing.
└──▷ BREAKING ON UPGRADE- !The in-memory paged cache is now OFF by default; any setup relying on the RAM tier being active will need to re-enable it explicitly via Session Settings.
- v1.6.34
vMLX 1.6.34 brings native MTP overhaul, DFlash2 session prefix reuse, and Qwen3.5-family video input support.
└──▷ GET THIS VERSION$ git clone --branch v1.6.34 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.34
- ›Native MTP (speculative decoding) overhaul for Qwen3.8 and dots3-note: aligned draft-head context cache plus generalized skip-replay means rejected drafts no longer replay through the main model at any depth; warm in-app decode on Qwen3.8-27B rises from ~22 to 38–48 t/s, dots3-note reaches ~41 t/s.
- ›DFlash2 session prefix reuse via end-of-turn cache checkpoints, draft hidden-state gap splice, and prompt-boundary snapshots drops warm multiturn TTFT ~20x; sustains 60+ t/s on Qwen3.8 with DFlash2 (68.7 t/s measured); the DFlash runtime now ships in the bundle.
- ›Stream interval defaults to 8, preventing the renderer from backpressure-stalling the engine emit loop on long conversations; legacy sessions are lifted automatically.
- ›Removed the RAM preflight that refused large model loads — estimates now advise rather than refuse, enabling a 101GB dots3-note bundle to load on a 128GB Mac.
- ›Native MTP now actually engages by default: bundle-temperature auto-detection (which had kept it permanently off) is replaced with compatible-only detection using a deterministic-defaults sampling policy.
+2 moreshow less
- ›Qwen3.5-family video input now supported — videos route as sampled frames so temporal questions answer correctly.
- ›Prefill admission rejections now include a wired-limit advisory naming the exact
sysctl, the macOS ~84%-of-RAMdefault, and the reset-on-reboot behavior.
- v1.6.29
vMLX 1.6.29 delivers hybrid prefix caching for up to 20x faster follow-up turns and stable 100k-context multiturn sessions.
└──▷ GET THIS VERSION$ git clone --branch v1.6.29 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.29
- ›Hybrid prefix cache cuts follow-up turn latency on long documents by up to 20x (43.7k-token document follow-ups drop from 107s to 5s, byte-identical at temperature 0).
- ›100k-context multiturn sessions now proven stable: 97.6k-token conversations retrieve planted facts with 99.9% cache reuse and no memory faults.
- ›Chunked SSM re-derive ships enabled by default, restoring long-context cache reuse from 0% to 99.9% above 12.5k tokens on hybrid model families.
- ›Extends verified support across 12 model families, including DSV4 Flash native composite caching, Gemma 4 mixed-SWA with audio, Qwen 3.6/3.8 hybrid lines with native MTP, and TurboQuant KV bundles.
- v1.6.29
vMLX 1.6.29 brings hybrid prefix caching for 20x faster follow-up turns and stable 100k-token multiturn context.
└──▷ GET THIS VERSION$ git clone --branch v1.6.29 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.29
- ›Adds hybrid prefix cache support that accelerates follow-up turns on long documents up to 20x (43.7k-token document follow-ups drop from 107s to 5s, byte-identical at temperature 0).
- ›Proves stable 100k-context multiturn: 97.6k-token conversations retrieve planted facts with 99.9% cache reuse and no memory faults.
- ›Ships chunked SSM re-derive enabled by default, restoring long-context cache reuse from 0% to 99.9% above 12.5k tokens on hybrid SSM model families.
- ›Expands verified per-family cache, parser, and generation-default support across 12 model families, including DSV4 Flash native composite caching, Gemma 4 mixed-SWA with audio, Qwen 3.6/3.8 hybrid lines with native MTP, and TurboQuant KV bundles.
- v1.6.28
vMLX v1.6.28 adds Qwen3.6-27B bundle support with automatic multi-token prediction, delivering a 33% throughput gain.
└──▷ GET THIS VERSION$ git clone --branch v1.6.28 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.28
- ›Supports the Qwen3.6-27B bundle line (and upcoming Qwen 3.8): the
qwen3_codertool-parser name now resolves to the XML-function parser, capability-only stamps route through the stock loader, and the bundled multi-token prediction head is constructed, quantized per per-module overrides, and engaged automatically at the stamp's trained speculative depth — yielding 23.3 to 31 tokens/sec (+33%) on the 4-bit bundle with no flags required.
- ›Supports the Qwen3.6-27B bundle line (and upcoming Qwen 3.8): the
- v1.6.28
vMLX v1.6.28 adds Qwen3.6-27B bundle support with automatic multi-token prediction, delivering a measured 33% throughput gain.
└──▷ GET THIS VERSION$ git clone --branch v1.6.28 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.28
- ›Supports the Qwen3.6-27B bundle line (and upcoming Qwen 3.8 line): the
qwen3_codertool-parser name now resolves to the XML-function parser, capability-only stamps route through the stock loader instead of the JANG codec, and the bundled multi-token prediction head is automatically constructed, quantized per per-module overrides, and engaged at the stamp's trained speculative depth — delivering 23.3 to 31 tokens/sec (+33%) on the 4-bit bundle with no flags required.
- ›Supports the Qwen3.6-27B bundle line (and upcoming Qwen 3.8 line): the
- v1.6.27
vMLX 1.6.27 adds Muse Glimmer 30B with vision/video support, a 262,144-token prefix cache, and working Anthropic/Ollama reasoning controls.
└──▷ GET THIS VERSION$ git clone --branch v1.6.27 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.27
- ›Adds support for Anthropic
thinking.budget_tokensto actually cap the reasoning chain length at runtime (previously the budget was set only as a template hint and never consumed). - ›Adds support for Ollama
thinkstring levels ('low','medium','high') — clients sending these values now enable thinking and select the correct effort level instead of being silently ignored. - ›Adds Muse Glimmer 30B support across all three bundles (
JANG_2D/4M/6M), including its text tower, windowed vision tower, recipient-routed reasoning rail, and ATEM tool dialect. - ›Adds single- and multi-image prompt handling for Muse Glimmer 30B, correctly identifying distinct visual elements within the same turn.
- ›Adds temporal-order video frame reading for Muse Glimmer 30B, so a clip fading from red to blue is answered 'red blue' rather than reversed.
+3 moreshow less
- ›Exposes four reasoning depth levels —
Low / Medium / High / Extra High— in Chat Settings for Muse Glimmer 30B, replacing the previous binary Auto/On toggle. - ›Expands the prefix cache index from ~64,000 tokens to 262,144 tokens, enabling long conversations to get cache reuse instead of falling off the end of the index; existing sessions are migrated automatically.
- ›Aligns paged RAM usage between the app and the command line for vision models, so both code paths now share the same cache behavior.
- ›Adds support for Anthropic
- v1.6.27
vMLX 1.6.27 adds Muse Glimmer 30B with vision/video, fixes prefix cache to cover 262,144 tokens, and wires up Anthropic
thinking.budget_tokensand Ollamathinkstring levels.└──▷ GET THIS VERSION$ git clone --branch v1.6.27 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.27
└──▷ USE ITCap reasoning token spend when calling vMLX via the Anthropic SDK — useful for cost/latency control on long agentic tasks.import anthropic client = anthropic.Anthropic(base_url="http://localhost:8000/v1", api_key="not-needed") message = client.messages.create( model="local", max_tokens=4096, thinking={"type": "enabled", "budget_tokens": 2000}, messages=[{"role": "user", "content": "Prove that sqrt(2) is irrational."}], ) print(message.content[0].text)Set reasoning effort from an Ollama-compatible client to get measurably different think depth without changing the model.$ curl http://localhost:8000/api/chat \ -H 'Content-Type: application/json' \ -d '{ "model": "local", "think": "high", "messages": [{"role": "user", "content": "Explain the halting problem."}] }'
- ›Ollama
thinkstring levels ('low'|'medium'|'high') now enable thinking and select effort depth — previously these values were silently ignored and thinking never engaged. - ›Anthropic
thinking.budget_tokensnow caps the reasoning chain at runtime — previously it set only a template hint that no runtime consumed, so the budget had no effect. - ›Prefix cache index expanded from ~64,000 tokens to 262,144 tokens; existing sessions are migrated automatically, so long conversations now get reuse instead of reporting a cold-start miss.
- ›Adds Muse Glimmer 30B support across all three JANG bundles (
JANG_2D/4M/6M), including its text tower, windowed vision tower, recipient-routed reasoning rail, and ATEM tool dialect. - ›Muse Glimmer 30B reasoning depth is now selectable in Chat Settings as Low / Medium / High / Extra High — previously only the Auto/On thinking toggle was exposed, leaving three depths unreachable.
+3 moreshow less
- ›Muse Glimmer 30B now correctly handles single- and multi-image prompts and reads video clips in temporal order.
- ›Each reasoning depth in Muse Glimmer 30B maintains its own prefix cache lineage; switching back to a previously used depth resumes that chain rather than starting cold.
- ›Vision models no longer use a slower cache path in the app — paged RAM is now enabled consistently between the app and the command line, restoring KV reuse for vision sessions.
- ›Ollama
- v1.6.25
vMLX 1.6.25 delivers a new indexed-attention prefill kernel for DeepSeek V4 Flash, live KV cache rewind on retry, and honest 413 errors for over-ceiling context requests.
└──▷ GET THIS VERSION$ git clone --branch v1.6.25 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.25
- ›New indexed-attention prefill kernel (on by default) boosts DeepSeek V4 Flash prompt processing from 347 to ~449 tokens/s at 15k context (+29%) and from 199 to ~316 tokens/s at 40k context (+58%), unlocking practical use of very long prompts.
- ›Aborting and retrying a long prompt now rewinds the live KV cache to the shared prefix instead of re-prefilling from scratch, cutting retry time-to-first-token at 15k context from 46s to 2.3s.
- ›Two-pass answer path now reuses the first pass's KV cache, eliminating full prompt re-prefill overhead on second-pass generation.
- ›KV pool quantization keeps cache RAM under 8 GB even near the model's maximum context length.
- ›Engine now advertises the true hardware context ceiling at startup, shrinks prefill chunks adaptively under Metal memory pressure, and returns a clean 413 instead of a Metal OOM for over-ceiling requests — eliminating the flat request timeout that killed healthy very-long prefills.
- v1.6.25
vMLX 1.6.25 brings a 29–58% prefill speedup for DeepSeek V4 Flash long-context, KV cache rewind on retry, and honest 413 errors for over-ceiling requests.
└──▷ GET THIS VERSION$ git clone --branch v1.6.25 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.25
- ›New indexed-attention prefill kernel (on by default) lifts DeepSeek V4 Flash prompt processing from 347 to ~449 tokens/s at 15k context (+29%) and from 199 to ~316 tokens/s at 40k context (+58%), sustaining 33+ tokens/s decode at both lengths.
- ›Engine rewinds the live KV cache to the shared prefix on abort/retry instead of re-prefilling from scratch — retry time-to-first-token at 15k context drops from 46s to 2.3s.
- ›Two-pass answer path now reuses the first pass's KV cache, eliminating full prompt re-prefill on the second pass.
- ›KV pool quantization keeps cache RAM under 8 GB even near the model's maximum context window.
- ›Engine now advertises the true hardware memory ceiling at startup, shrinks prefill chunks adaptively under Metal memory pressure, and returns a clean 413 for over-ceiling requests instead of crashing with a Metal OOM.
- v1.6.23
vMLX 1.6.23 adds
DSV4_ANSWER_RESERVEenv var to guarantee visible answers from DeepSeek V4 Flash with thinking enabled.└──▷ GET THIS VERSION$ git clone --branch v1.6.23 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.23
└──▷ TRY ITDisable the answer budget split entirely if you want DeepSeek V4 Flash to use the full token budget for reasoning.$ DSV4_ANSWER_RESERVE=0 vmlx serve <deepseek-v4-flash-model>- ›Adds
DSV4_ANSWER_RESERVEenvironment variable to control how many tokens are reserved for the answer portion of DeepSeek V4 Flash output — set to0to disable the budget split entirely. - ›DeepSeek V4 Flash now automatically reserves part of the output budget for the answer when thinking mode is active, using a bounded reserve (up to 2048 tokens) rather than a percentage — so long reasoning is not penalized at large token budgets.
- ›Adds
- v1.6.23
vMLX 1.6.23 adds
DSV4_ANSWER_RESERVEenv var to guarantee visible answers from DeepSeek V4 Flash with thinking enabled.└──▷ GET THIS VERSION$ git clone --branch v1.6.23 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.23
└──▷ TRY ITDisable the answer budget split entirely if you want DeepSeek V4 Flash to use the full token budget for reasoning.$ DSV4_ANSWER_RESERVE=0 vmlx serve <deepseek-v4-flash-model>- ›Adds
DSV4_ANSWER_RESERVEenvironment variable to control how many tokens are reserved for the answer portion of DeepSeek V4 Flash output — set to0to disable the budget split entirely. - ›DeepSeek V4 Flash now automatically reserves part of the output budget for the answer when thinking mode is active, using a bounded reserve (up to 2048 tokens) rather than a percentage — so long reasoning is not penalized at large token budgets.
- ›Adds
- v1.6.20
vMLX 1.6.20 adds native DeepSeek V4 Flash runtime support with hardened cache, tool, and Activation-QAT controls
└──▷ GET THIS VERSION$ git clone --branch v1.6.20 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.20
- ›Adds native DeepSeek V4 Flash (DSV4) runtime support including DSML tool support, sampling guidance, cache-tier capabilities, and pool-quantization behavior derived from the selected bundle.
- ›Adds explicit Activation-QAT control for DSV4 sessions, with effective state reported in the application.
- ›Server and Chat settings now distinguish native DSV4 compiled decode and pooled-cache state from generic TurboQuant and unsupported whole-model cache modes.
- ›Native DSV4 cache handling now preserves short append checkpoints, lossless L2 writes, valid eviction ancestry, partial-tail replay, SSD-only operation, and RAM-to-SSD refault.
- ›Health output now distinguishes the served model from the currently loaded model.
+3 moreshow less
- ›Explicit visible-final instructions after tool use now enter a no-more-tools continuation pass, with terminal abort cleanup drained before the runtime returns to idle.
- ›Electron settings now warn when a DSV4
top-pvalue differs from bundle guidance and preserve remote model tool contracts. - ›Release packaging now attests the native Python DSV4 encoder, nested affine defaults, mixed module quantization metadata, and the clean JANG runtime source, with separate Sequoia and Tahoe packaging/notarization contracts bound to one source revision.
- v1.6.20
vMLX 1.6.20 adds native DeepSeek V4 Flash runtime support with hardened cache, tool, and Activation-QAT controls
└──▷ GET THIS VERSION$ git clone --branch v1.6.20 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.20
- ›Adds native DeepSeek V4 Flash (DSV4) runtime support including DSML tool support, sampling guidance, cache-tier capabilities, and pool-quantization behavior derived from the selected bundle.
- ›Adds explicit Activation-QAT control for DSV4 sessions, with effective state reported in the application.
- ›Server and Chat settings now distinguish native DSV4 compiled decode and pooled-cache state from generic TurboQuant and unsupported whole-model cache modes.
- ›Native DSV4 cache handling now preserves short append checkpoints, lossless L2 writes, valid eviction ancestry, partial-tail replay, SSD-only operation, and RAM-to-SSD refault.
- ›Health output now distinguishes the served model from the currently loaded model.
+3 moreshow less
- ›Explicit visible-final instructions after tool use now enter a no-more-tools continuation pass, with terminal abort cleanup drained before the runtime returns to idle.
- ›Electron settings now warn when a DSV4
top-pvalue differs from bundle guidance and preserve remote model tool contracts. - ›Release packaging now attests the native Python DSV4 encoder, nested affine defaults, mixed module quantization metadata, and the clean JANG runtime source, with separate Sequoia and Tahoe packaging/notarization contracts bound to one source revision.
- v1.6.19
vMLX 1.6.19 adds native-MTP diagnostics, model-owned sampler hydration, and macOS Tahoe packaging.
└──▷ GET THIS VERSION$ git clone --branch v1.6.19 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.19
- ›Native-MTP health and profiling now expose bounded cache-lifecycle, acceptance, and phase-timing telemetry for Qwen MTP models.
- ›Ollama requests now preserve an explicitly supplied
top_k, including0, instead of silently dropping it during request translation. - ›Automatic prompt limits are now derived from the configuration of the model that is actually loaded, bounded by the model's declared context ceiling and current memory budget.
- ›Separate Apple-silicon downloads are now provided for macOS Tahoe and for Sequoia-compatible systems.
- ›New and restored Electron chats now hydrate temperature, Top P, Top K, repetition penalty, and output limits from the selected model bundle.
+6 moreshow less
- ›MiniMax M2-family automatic cache storage uses the correctness-first q8 policy, with bundle-owned calibrated TurboQuant settings and explicit user selections remaining authoritative.
- ›Cache namespaces for compatible looped-transformer bundles now include the effective repeated-layer layout, preventing reuse between incompatible loop counts.
- ›Persistent cache payload encoding is moved off the inference-completion path after tensors are safely detached from MLX, reducing synchronous CPU work at the end of a request.
- ›New settings and compatibility messages are localized in the shipped English, Spanish, Japanese, Korean, and Chinese interfaces.
- ›Compatible Nanbeige looped-transformer JANG bundles now validate their loop count, effective cache-slot count, and runtime metadata before generation, rejecting inconsistent bundles rather than running with a silently short cache.
- ›Bounded Electron tool workflows now better enforce requested exactly-once tool calls while leaving other explicitly requested tools available until their results have been returned.
- v1.6.19
vMLX 1.6.19 adds model-bundle-owned sampler defaults, native-MTP diagnostics, and separate macOS Tahoe vs Sequoia builds.
└──▷ GET THIS VERSION$ git clone --branch v1.6.19 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.19
- ›Ollama requests now preserve an explicitly supplied
top_k, including0, instead of silently dropping it during request translation. - ›Automatic prompt limits are now derived from the configuration of the model that is actually loaded, bounded by the model's declared context ceiling and current memory budget.
- ›Native-MTP health and profiling expose bounded cache-lifecycle, acceptance, and phase-timing telemetry without changing generation policy.
- ›MiniMax M2-family automatic cache storage now uses the correctness-first q8 policy, with bundle-owned calibrated TurboQuant settings and explicit user selections remaining authoritative.
- ›MiniMax M3 native sparse-cache blocks are now scoped to the prompt-prefill shape and its N-1 prompt-boundary contract, preventing a token-identical prefix produced under a different prefill shape from restoring numerically different Lightning Indexer state.
+9 moreshow less
- ›Compatible Nanbeige looped-transformer JANG bundles now validate their loop count, effective cache-slot count, and runtime metadata before generation, rejecting inconsistent bundles rather than running with a silently short cache.
- ›DeepSeek-V4 Flash preserves ratio-zero SWA rings and lossless q8 CSA/HCA pool segments through prompt snapshots and SSD reconstruction.
- ›Cache namespaces for compatible looped-transformer bundles now include the effective repeated-layer layout, preventing reuse between incompatible loop counts.
- ›Persistent cache payload encoding is moved off the inference-completion path after tensors are safely detached from MLX, reducing synchronous CPU work at the end of a request.
- ›Bounded Electron tool workflows now better enforce requested exactly-once tool calls while leaving other explicitly requested tools available until their results have been returned.
- ›New settings and compatibility messages are localized in shipped English, Spanish, Japanese, Korean, and Chinese interfaces.
- ›Separate Apple-silicon downloads are now provided for macOS Tahoe and for Sequoia-compatible systems.
- ›New and restored Electron chats now hydrate temperature, Top P, Top K, repetition penalty, and output limits from the selected model bundle without presenting missing values as saved zero-valued overrides.
- ›Text-only prompt accounting now follows the tokenizer's beginning-of-sequence behavior.
- ›Ollama requests now preserve an explicitly supplied
- v1.6.18
vMLX 1.6.18 adds a process-wide SSD cache budget with LRU eviction and detailed cache reporting.
└──▷ GET THIS VERSION$ git clone --branch v1.6.18 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.18
- ›Adds a process-wide SSD cache budget with coordinated LRU eviction and off-request-path publication, plus reporting of attempted prefixes, applied reuse, uncached suffixes, reconstruction, fallback prefill, and aggregate disk usage.
- ›Validates and atomically pins the exact ordered cache chain before reuse, preventing recycled paged-cache block IDs from receiving stale prefix credit.
- ›Accepts MiniMax tool arguments emitted as request-schema XML children without exposing native tool markup as visible answer text.
- ›Retains media across Responses tool continuations and permits local attachment playback in the Electron app.
- ›Derives fresh-session sampling, parser, output, template, and native MTP settings from the selected model bundle without converting inherited values into hidden saved overrides.
+1 moreshow less
- ›Aligns Auto reasoning with each model bundle's native policy unless a request supplies an explicit supported thinking budget, keeping reasoning-marker aliases out of visible content.
└──▷ BREAKING ON UPGRADE- !This release requires JANG 2.5.34; earlier JANG versions are no longer supported.
- v1.6.18
vMLX 1.6.18 adds process-wide SSD cache budgeting with LRU eviction and expands MiniMax, Laguna, and LFM tool-handling coverage.
└──▷ GET THIS VERSION$ git clone --branch v1.6.18 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.18
- ›Adds a process-wide SSD cache budget with coordinated LRU eviction and off-request-path publication, plus detailed reporting of attempted prefixes, applied reuse, uncached suffixes, reconstruction, fallback prefill, and aggregate disk usage.
- ›Accepts MiniMax tool arguments emitted as request-schema XML children without exposing native tool markup as visible answer text.
- ›Retains media across Responses tool continuations and permits local attachment playback in the Electron desktop app.
- ›Derives fresh-session sampling, parser, output, template, and native MTP settings from the selected model bundle without converting inherited values into hidden saved overrides.
- ›Aligns Auto reasoning with each model bundle's native policy unless a request supplies an explicit supported thinking budget, while keeping reasoning-marker aliases out of visible content.
+3 moreshow less
- ›Hardens Laguna tool-result history, incomplete terminals, mixed-SWA cache reuse, and affine-JANG JIT policy.
- ›Improves KaTeX, Markdown, HTML, XML, currency, code-fence, and in-progress reasoning rendering, and stabilizes localized UI context during development reloads.
- ›Strengthens Sequoia/Tahoe packaging so bundled Python, JANG dependencies, release metadata, and artifacts remain tied to one source revision.
└──▷ BREAKING ON UPGRADE- !This release requires JANG 2.5.34.
- v1.6.14
vMLX v1.6.14 ships a signed-runtime checkpoint covering multimodal conversation-state isolation, progressive reasoning/content streaming, structured tool continuation, and architecture-aware KV cache behaviors.
└──▷ GET THIS VERSION$ git clone --branch v1.6.14 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.14
- ›Adds multimodal conversation-state isolation, enabling independent context tracking across modalities in a single session.
- ›Adds progressive reasoning and content streaming, delivering incremental output during multi-step inference.
- ›Adds structured tool continuation, allowing tool-call sequences to resume and chain within a single inference pass.
- ›Adds architecture-aware KV cache behavior covering prefix, paged, block-disk, and TurboQuant cache policies, with model-family gates keeping cache settings explicit and model-safe.
- ›Both macOS Sequoia and Tahoe release artifacts are Developer ID signed, notarized, stapled, and Gatekeeper-accepted for out-of-the-box installation without security prompts.
- v1.6.14
vMLX v1.6.14 ships a signed-runtime checkpoint covering multimodal conversation-state isolation, progressive reasoning/content streaming, structured tool continuation, and architecture-aware KV cache behaviors.
└──▷ GET THIS VERSION$ git clone --branch v1.6.14 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.14
- ›Adds multimodal conversation-state isolation, enabling independent context tracking across modalities in a single session.
- ›Adds progressive reasoning and content streaming, delivering incremental output during multi-step inference.
- ›Adds structured tool continuation, allowing tool-call sequences to resume and chain within a single inference pass.
- ›Adds architecture-aware KV cache behavior covering prefix, paged, block-disk, and TurboQuant cache policies, with model-family gates keeping cache settings explicit and model-safe.
- ›Both macOS Sequoia and Tahoe release artifacts are Developer ID signed, notarized, stapled, and Gatekeeper-accepted for out-of-the-box installation without security prompts.
- v1.6.12
vMLX 1.6.12 adds block-disk L2 as a usable prefix tier, hardens q4 TurboQuant KV storage, and fixes gateway lifecycle on client disconnect.
└──▷ GET THIS VERSION$ git clone --branch v1.6.12 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.12
- ›Enables block-disk L2 as a usable prefix tier even when paged RAM is disabled, while preserving the RAM-first then disk-refault hierarchy when both tiers are active — covering partial-prefix restore, eviction, immediate-stop durability, and restart refault.
- ›Hardens q4 TurboQuant storage for eligible KV components and hybrid attention paths, keeping JANG affine, JANGTQ/MXTQ Hadamard-codebook, and base MLX MXFP as distinct formats; architecture-specific cache policies for DSV4, openPangu, MiniMax-M3, Gemma mixed-SWA, and other typed/native cache paths are preserved.
- ›Extends media ownership and cache-key coverage to Step and Nemotron Omni image, video, and audio paths while keeping MiniMax-M2.7 as text-only.
- ›Tightens progressive reasoning, content, and tool streaming plus terminal/usage ordering across Qwen, HY3, Step, MiniMax, Anthropic, Ollama, and Responses routes, including no-tool prompts and rejected/incomplete native tool markup.
- ›Improves model-derived UI accuracy for quant labels, parser/reasoning/cache settings, single-model swaps, session PID/sleep lifecycle, eager Start materialization, port/LAN rollback, and missing-model repoint/removal.
- v1.6.11
vMLX 1.6.11 adds progressive streaming across Responses, Chat Completions, and Electron, plus extended L2 cache reuse for hybrid/mixed-attention model families.
└──▷ GET THIS VERSION$ git clone --branch v1.6.11 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.11
- ›Streams post-reasoning and post-tool answers progressively across Responses, Chat Completions, and Electron UI instead of withholding output until completion.
- ›Extends architecture-typed prefix, paged, and block-disk L2 cache reuse to hybrid and mixed-attention model families.
- ›Adds media and cache routing support for Qwen, Bonsai, Gemma, Step, and MiniMax-M3 model families (MiniMax-M2.7 remains text-only).
- ›Hardens multi-turn tool continuation, terminal events, cancellation and recovery, and reasoning/content separation.
- ›Ships two separate macOS DMG builds:
vMLX-1.6.11-sequoia-arm64.dmg(macosx_14_0_arm64, macOS 14.5+) andvMLX-1.6.11-tahoe-arm64.dmg(macosx_26_0_arm64).
- v1.6.10
vMLX 1.6.10 adds JANG affine 1-bit/ternary bundle loading, paged block-disk L2 cache on by default, and Responses API as the Electron chat default.
└──▷ GET THIS VERSION$ git clone --branch v1.6.10 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.10
- ›Enables paged block-disk L2 cache by default in the Electron UI, with an explicit opt-out available.
- ›Loads schema-2 JANG affine 1-bit and ternary text/VLM bundles with per-module quantization overrides.
- ›Keeps local Electron chat on the OpenAI
/v1/responsesAPI by default, with chat sampler defaults derived from the model bundle configuration. - ›Preserves Qwen 3.5 hybrid GDN/SSM + attention cache routing, VL/video tensors, TurboQuant attention KV, and async SSM rederive.
- v1.6.7
vMLX 1.6.7 enables paged KV cache by default for major text model families and turns reasoning on by default for all reasoning-capable models.
└──▷ GET THIS VERSION$ git clone --branch v1.6.7 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.6.7
- ›Enables paged KV cache ON by default for autodetected text model families (Qwen3.5/3.6, Zaya, Nemotron-H, LFM2.5, Laguna, Hy3, Step-3.7) when continuous batching and prefix cache are active;
--use-paged-cache/--no-paged-cacheflags always take precedence. - ›Turns reasoning ON by default for every reasoning-capable model family, with
max_thinking_tokenshonored on both streaming and non-streaming paths. - ›Reconciles the Electron panel cache toggle, the
--use-paged-cachelaunch flag, and the engine's effective cache policy so all three reflect the same state for every model family.
- ›Enables paged KV cache ON by default for autodetected text model families (Qwen3.5/3.6, Zaya, Nemotron-H, LFM2.5, Laguna, Hy3, Step-3.7) when continuous batching and prefix cache are active;
- v1.5.66
vMLX v1.5.66 adds MiniMax-M3 autodetection, native MSA prefix-cache handling, and Metal wired-memory guidance for Apple Silicon.
└──▷ GET THIS VERSION$ git clone --branch v1.5.66 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.66
- ›Adds MiniMax-M3 autodetection with reasoning/tool parser wiring and model-owned generation defaults, including native MSA prefix-cache handling.
- ›Surfaces model-owned max output behavior in both UI and CLI settings for MiniMax-M3 launch defaults.
- ›Adds user-facing Metal wired-memory guidance when a model launch fails due to Insufficient Memory on Apple Silicon.
- ›Retains Gemma 4 VL settings and media stress harness coverage for the scoped release path.
- v1.5.65
vMLX 1.5.65 adds MiniMax-M3 and Gemma 4 VL compatibility with reasoning mode, VL image input, and multi-API support.
└──▷ GET THIS VERSION$ git clone --branch v1.5.65 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.65
- ›Adds MiniMax-M3 (MM3) model support with startup configuration: prefix cache enabled, paged cache disabled, disk prompt cache enabled, JIT disabled, native MSA/Lightning sparse cache storage, and generic TurboQuant KV disabled.
- ›Supports MM3 reasoning mode in three states: off, on, and auto, across UI and API paths.
- ›Supports visible content emission and exact tool calls for MM3 across UI and API paths.
- ›Extends API compatibility to cover Responses, Chat Completions, Anthropic-compatible, and Ollama-compatible endpoints for MM3.
- ›Adds streaming support for MM3 across all covered API paths.
+3 moreshow less
- ›Adds VL image input support for MM3.
- ›Adds prefix-cache reuse telemetry for MM3.
- ›Updates
latest.jsonto point to the notarized 1.5.65 Sequoia and Tahoe DMGs.
- v1.5.64
vMLX 1.5.64 adds MiniMax-M3 and Gemma 4 VL model support with streaming reasoning fixes and cache configuration defaults.
└──▷ GET THIS VERSION$ git clone --branch v1.5.64 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.64
- ›Adds MiniMax-M3 (MM3) model support across live UI, Chat Completions, Responses, Anthropic-compatible, Ollama-compatible, and streaming tool/image paths.
- ›MiniMax-M3 startup defaults: prefix cache enabled, paged cache disabled, disk prompt cache enabled, JIT disabled, native MSA/Lightning sparse cache storage enabled, generic TurboQuant KV disabled.
- ›Adds Gemma 4 E2B, E4B, 12B, 26B, and 31B
JANG_4MVL variants with live UI, API, and cache coverage, plus 26B and 31B MXFP4 visual row support. - ›Streaming reasoning-only responses now produce a bounded visible-answer pass for supported reasoning models, preventing blank output when the model emits hidden reasoning only.
- ›Updates
latest.jsonto point to the notarized 1.5.64 Sequoia and Tahoe DMGs, which are Developer ID signed, Apple notarized, stapled, and Gatekeeper accepted.
- v1.5.63
vMLX v1.5.63 adds MiniMax-M3 and Gemma 4 E2B/E4B/12B MXFP4 vision/text compatibility with multimodal routing and reasoning controls.
└──▷ GET THIS VERSION$ git clone --branch v1.5.63 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.63
- ›Adds MiniMax-M3 compatibility with multimodal routing, reasoning controls (off/on/auto), tool calls, and prefix-cache hit stability across Chat/Responses/Anthropic/Ollama endpoints.
- ›Adds Gemma 4 E2B, E4B, and 12B MXFP4 vision/text compatibility with reasoning controls, image input, tool calls, and cache hits across Chat/Responses/Anthropic/Ollama and streaming surfaces.
- ›Preserves model-owned generation defaults for supported startup paths.
- ›MiniMax-M3 enforces its native MSA/Lightning sparse cache policy: paged cache disabled, TurboQuant KV skipped for native MSA, and JIT disabled for the dynamic sparse-cache path.
- v1.5.56
vMLX 1.5.56 preserves
VMLX_VLM_IMAGE_PREFILL_BUFFER_GBoverrides while switching to dynamic Metal working-set-based buffer sizing.└──▷ GET THIS VERSION$ git clone --branch v1.5.56 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.56
- ›Retains
VMLX_VLM_IMAGE_PREFILL_BUFFER_GBas a hard override for users who need an explicit VLM image prefill buffer guard. - ›Defaults Gemma 4 unified chat/image requests to visible-answer mode unless thinking is explicitly requested.
- ›Retains
- v1.5.52
vMLX 1.5.52 reads greedy generation defaults (temperature, top-p, top-k) directly from JANG model metadata and ships Sequoia- and Tahoe-compatible DMGs.
└──▷ GET THIS VERSION$ git clone --branch v1.5.52 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.52
- ›Reads and applies model-owned greedy generation defaults (
temperature 0.00,top_p 1.0,top_k off) declared in JANG bundle metadata, so sampling behaviour is driven by the model file rather than hidden app-side assumptions. - ›Updates the local Step-3.7-Flash JANG metadata path so startup settings (default
temperature=0.0,top_p=1.0,top_k=0) derive from model files; explicit request parameters still override model defaults. - ›Builds both public DMG flavors from the same source: Sequoia-compatible
macosx_14wheels and Tahoe-nativemacosx_26wheels, with Developer ID signing, notarization, stapling, and Gatekeeper acceptance.
- ›Reads and applies model-owned greedy generation defaults (
- v1.5.47
vMLX 1.5.47 adds Tahoe-native DMG for macOS Tahoe, tightens parser boundaries across model families, and expands DSV4 release guards.
└──▷ GET THIS VERSION$ git clone --branch v1.5.47 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.47
- ›Adds a Tahoe-native DMG (
vMLX-1.5.47-tahoe-arm64.dmg) for macOS Tahoe users who want nativemacosx_26MLX wheels, alongside the existing Sequoia-compatible DMG (vMLX-1.5.47-sequoia-arm64.dmg). - ›Adds stronger parser boundaries so non-reasoning families such as Qwen2 and Qwen2-VL no longer silently inherit reasoning parsers, while MiniMax, DSV4, ZAYA, Hy3, Gemma, and GLM parser rows remain covered.
- ›Adds DSV4-specific release guards for stale native-MTP launch args, cache/prefix policy, and JANG source parity.
- ›Adds a Tahoe-native DMG (
- v1.5.45
vMLX 1.5.45 adds MCP config auto-discovery, chained tool calls across multi-round chats, and localized What's New notices.
└──▷ GET THIS VERSION$ git clone --branch v1.5.45 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.45
└──▷ TRY ITLet vMLX auto-discover your MCP configuration without specifying a launch flag — just place your config in the working directory.$ # Place your MCP config in the project root, then launch normally # vMLX will auto-discover mcp.json or mcp.yaml without any extra flag echo '{"mcpServers": {"my-server": {"command": "npx", "args": ["-y", "my-mcp-server"]}}}' > mcp.json vmlx- ›MCP config auto-discovery now loads
mcp.jsonormcp.yamlfrom the working directory or user config paths without requiring a launch flag, and MCP policy flows through sessions and gateway routes. - ›Built-in coding tools and MCP tools can now chain across multi-round chats using structured
tool_calls, with a text-chat watchdog that clears stuck 'Generating tool call' states. - ›Adds support for Qwen3.6 native MTP, JANG/JANGTQ group-size detection, DSV4 cache policy, and TurboQuant/L2/paged cache telemetry with stricter release gates.
- ›The in-app What's New notice is now localized in English, Spanish, Japanese, Korean, and Chinese, covering MCP, MTP, cache, and updater safety notes.
- ›MCP config auto-discovery now loads
- v1.5.39
vMLX v1.5.39 adds native MTP health reporting with depth, scope, tensor counts, and gating reasons, plus Qwen 3.6 and Kimi K2.6 runtime support.
└──▷ GET THIS VERSION$ git clone --branch v1.5.39 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.39
- ›Native MTP health/status now reports depth, scope, tensor counts, and gating reasons.
- ›Supports Qwen 3.6 MTP artifacts defaulting to D3, with opt-in model-local tuning sidecars.
- ›Qwen 3.6 MTP+VL app detection preserves multimodal behavior for artifact-backed affine-JANG MTP+VL bundles when indexed MTP and vision tensors are present.
- ›Adds Source/PyPI runtime patch parity for Kimi K2.6 MLA and Gemma 4 vision pixel-value handling.
- v1.5.37
vMLX 1.5.37 adds
max_prompt_tokens,max_context_tokens, andmax_contextaliases for prompt context admission across OpenAI, Anthropic, Ollama, and gateway paths.└──▷ GET THIS VERSION$ git clone --branch v1.5.37 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.5.37
└──▷ TRY ITCap how much prompt context is admitted per request when calling through the OpenAI-compatible gateway, to stay within model token limits.$ max_prompt_tokens=4096 max_context_tokens=8192- ›Adds
max_prompt_tokens,max_context_tokens, andmax_contextaliases for controlling request/session prompt context admission across OpenAI, Anthropic, Ollama, and gateway paths. - ›Applies model-declared generation defaults at session startup, removing panel-side sampling fallbacks.
- ›Scopes sampling overrides to the current chat or API request instead of carrying stale per-model state across requests.
- ›Adds
- v1.4.7
vMLX v1.4.7 promotes
VMLX_OMNI_BACKENDto a CLI flag, unlocking a fast native MLX Stage-2 path for Nemotron-Omni.└──▷ GET THIS VERSION$ git clone --branch v1.4.7 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.4.7
└──▷ TRY ITOpt in to the Stage-2 native MLX backend for significantly faster Nemotron-Omni inference on M4 Max without setting an environment variable.$ vmlx --omni-backend stage2
- ›Promotes
VMLX_OMNI_BACKENDfrom an environment variable to a CLI flag, allowing the panel and Swift Settings UI to switch the Nemotron-Omni multimodal path between Stage-1 (bit-exact PyTorch bridge, default) and Stage-2 (native MLX RADIO + Parakeet, ~15–21x faster encoders and ~82 tok/s decode on M4 Max). - ›Adds Stage-2 native MLX backend for Nemotron-Omni, delivering ~15–21x faster encoders and ~82 tok/s decode on M4 Max hardware (off by default pending Wave-4 quality validation).
- ›Confirms Qwen 3.6 VL is fully wired on both the Python and Swift sides.
- ›Promotes
- v1.4.2
vMLX v1.4.2 adds Laguna and Mistral-Medium-3.5 loaders, extends multimodal routing to
/v1/responses and/v1/messages, and fixes Omni bundle boot.└──▷ GET THIS VERSION$ git clone --branch v1.4.2 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.4.2
└──▷ TRY ITServe an Omni bundle that previously crashed on boot, then send an image via the OpenAI Responses endpoint using the newly supportedinput_imagetype.$ vmlx-serve <omni-bundle>- ›Extends
OmniMultimodalDispatchermultimodal routing (RADIO + Parakeet encoders) to/v1/responsesand/v1/messages, joining/v1/chat/completions— all 6 modality surfaces (text, image, audio, video) now dispatch correctly for Nemotron-3-Nano-Omni. - ›Adds
_MEDIA_TYPESentries in_responses_input_to_messagesfor OpenAI Responses canonical typesinput_image,input_video,input_audio, andinput_text, normalizing them to chat-completions envelopes. - ›Adds
loaders/load_laguna.pyrouting throughjang_tools.laguna.runtime.loadfor Laguna (poolside) 33B/3B agentic-coding MoE (hybrid SWA+full attention, 256 routed experts top-8 + 1 shared, dual-RoPE); registered as a silver-tier model. - ›Adds
loaders/load_mistral3.pyfor Mistral-Medium-3.5-128B (ministral3 inner), a dense GQA 96/8 model with 256K YaRN context and PIXTRAL vision; registered as a silver-tier model.
- ›Extends
- v1.4.1-swift
vMLX v1.4.1-swift adds MCP HTTP/SSE transport and NemotronHOmni VLM support alongside UI and cache improvements.
└──▷ GET THIS VERSION$ git clone --branch v1.4.1-swift https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.4.1-swift
- ›Adds MCP HTTP/SSE transport (real implementation) via mlxstudio#31, enabling Model Context Protocol over HTTP and Server-Sent Events.
- ›Adds NemotronHOmni VLM factory wiring and capability detector, bringing support for the NemotronHOmni vision-language model.
- ›Adds 'Delete model files…' context menu item in the chat picker for in-app model file management.
- v1.4.1
vMLX v1.4.1 adds model deletion API, image-gen cancellation, MCP HTTP+SSE transport, and
vmlx[mxtq]install extras.└──▷ GET THIS VERSION$ git clone --branch v1.4.1 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.4.1
└──▷ TRY ITInstall vMLX with MXTQ/JANG/DSV4/Nemotron-Omni bundle support in one step.$ pip install -U "vmlx[mxtq]==1.4.1"
Abort a running image generation job server-side — useful when the client disconnects or the user clicks Stop.$ curl -X POST http://localhost:8080/v1/images/cancel
- ›Adds
POST /api/deleteendpoint for model deletion with model-directory bounding (refuses paths outside the model root and path-traversal attempts). - ›Adds
POST /v1/images/cancelendpoint and ImageGenEngine.cancel() method, plus a disconnect-watchdog so browser close or the Stop button truly aborts image generation instead of OOM-after-cancel. - ›Adds
[mxtq]and[jang]install extras (pip install vmlx[mxtq]) for JANG/MXTQ/DSV4/MiniMax-JANG/Nemotron-Omni bundles. - ›Accepts Anthropic-style
reasoning: {effort: ...}andreasoning: {type:'enabled', budget_tokens:N}request bodies, normalizing them intoreasoning_effort/enable_thinkinginternally. - ›Replaces the stdio-only MCP guard with a full HTTP+SSE transport implementation on the Swift side: streaming via URLSession.bytes(for:), legacy
endpoint-eventhandling, and Streamable-HTTP inline-JSON-RPC fallback.
+2 moreshow less
- ›Adds 'Delete model files…' context menu in the Swift app chat picker, backed by the new
POST /api/deleteendpoint. - ›Registers NemotronH-Omni in VLMModelFactory and the processor registry; auto-promotes
nemotron_h→nemotron_h_omniwhenconfig_omni.jsonis present alongsideconfig.json.
└──▷ BREAKING ON UPGRADE- !macOS 14.4.x is no longer supported — the bundled MLX wheel requires libc++ symbols added in macOS 14.5 (Sonoma/Sequoia/Tahoe); running on 14.4.x will exit with an actionable error.
- ›Adds
- v1.3.34
vMLX v1.3.34 adds deferred SSM re-derive for hybrid thinking models, cutting multi-turn cache misses on Nemotron and Qwen3.5-VL.
└──▷ GET THIS VERSION$ git clone --branch v1.3.34 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.3.34
- ›Adds deferred SSM re-derive: after generation completes on hybrid SSM + thinking models (Nemotron, Qwen3.5-VL), the scheduler queues an idle-time prefill pass on prompt tokens only, storing clean SSM state so the next conversation with the same prompt prefix gets KV + SSM cache hits instead of a full re-prefill.
- ›Adds _ensure_mx_array() for dtype normalization:
input_idsis cast tomx.int32andpixel_valuestomx.array, enabling batched VLM inference on Mistral 3 / Pixtral. - ›mx.compile() now targets
language_model.modelonly for VLM engines, preserving the wrapper's.configattribute and fixing JIT + MLLM compatibility. - ›_get_n_kv_heads() now scans
cfg.text_configas a nested fallback, resolving 100% prefix-cache miss on Gemma 4 VLM wherenum_key_value_headslives insidemodel.config.text_config.
- v1.3.31
vMLX v1.3.31 adds cross-session cache sharing, Aho-Corasick stop matching, Gemma 4 support, and a public
/v1/cachestats endpoint.└──▷ GET THIS VERSION$ git clone --branch v1.3.31 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.3.31
└──▷ TRY ITCap prefix cache memory consumption to avoid OOM on long-context workloads.$ vmlx serve --prefix-cache-max-bytes 4294967296 <model>
- ›Adds
--prefix-cache-max-bytesCLI flag to enforce a byte-budget eviction limit on the prefix cache. - ›Exposes
sizeandmax_entriesfields on the/v1/cachestats endpoint for live cache introspection. - ›Adds
cache_typecolumn and per-type bucket eviction to the disk SQLite cache, with priority eviction and last-fetch type round-trip in L1 backfill. - ›Extracts
SSMCompanionCachetovmlx_engine/utils/ssm_companion_cache.pywith a per-entryis_completeflag for SSM companion cache lifecycle tracking. - ›Adds compute_model_cache_key() for content-derived cache identity that survives JIT reload and prevents cross-config pollution.
+13 moreshow less
- ›Adds
_compute_segment_boundarieshelper toengine/batched.py, firing segment boundaries on memory-aware and paged schedulers (not just legacy). - ›Adds
is_hybrid_ssm_cache,is_hybrid_ssm_model, andis_hybrid_ssm_configpolymorphic helpers for hybrid SSM model detection. - ›Adds
is_mla_modelcentralized helper that walkstop → text_config → language_config → llm_configfor MLA model detection. - ›Adds Gemma 4 native text MoE local-port shim with forward-compat that defers to upstream when available.
- ›Sets
trust_remote_code=Trueas the default inutils/tokenizer.py, unblocking custom tokenizers without manual configuration. - ›Enables LRU+Trie cross-session prefix sharing on
MemoryAwarePrefixCache(production default) with system → user → assistant priority eviction. - ›Adds
cache_typeLRU and per-type bucket eviction onBlockAwarePrefixCachefor paged and hybrid auto-switch scenarios. - ›Surfaces SSM companion cache stats (nbytes_mb) to the CachePanel UI.
- ›Backports
BatchMambaCache.lengths,advance,prepare, andfinalizefrom mlx-lm 0.31.2. - ›Caches is_mllm_model() result in
api/utils.pyto eliminate repeated INFO log spam. - ›Adds
scheduler.deep_resetwiring of reset_factory_cache() on shutdown. - ›Bumps mlx-lm dependency from 0.30.2 to 0.31.2.
- ›Removes orphan disk-streaming artifacts (
ssd_generate,streaming_wrapper,weight_index) superseded by the memory_cache and disk_cache architecture.
└──▷ BREAKING ON UPGRADE- !Orphan disk-streaming artifacts
ssd_generate,streaming_wrapper, andweight_indexhave been removed; setups relying on them must migrate to the memory_cache + disk_cache architecture.
- ›Adds
- v1.3.25
vMLX v1.3.25 adds full Gemma 4 support with reasoning/tool parsers and a new
--default-enable-thinkingCLI flag.└──▷ GET THIS VERSION$ git clone --branch v1.3.25 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.3.25
└──▷ TRY ITStart the vMLX server with thinking mode enabled by default for all Gemma 4 reasoning requests.$ vmlx serve --default-enable-thinking
- ›Adds
--default-enable-thinkingCLI flag to control thinking mode at server startup. - ›Adds Gemma 4 tool parser supporting the native
<|tool_call>call:name{args}<tool_call|>format for function-calling workflows. - ›Adds Gemma 4 reasoning parser handling the
<|channel>thought...<channel|>protocol with Auto/On/Off thinking modes. - ›Adds
<turn|>as a stop token alongside<eos>for Gemma 4 generation. - ›Adds
<|tool_call>to tool call marker detection for streaming responses.
- ›Adds
- v1.3.6
vMLX v1.3.6 adds disk streaming for RAM-oversize models, Mistral Small 4 (119B) support, and universal MoE JANG gate dequant.
└──▷ GET THIS VERSION$ git clone --branch v1.3.6 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.3.6
└──▷ USE ITConfigure a Mistral Small 4 session in a vMLX config file to use the new model type with MoE routing.model_type: mistral4
- ›Adds
--stream-from-diskflag to load models larger than available RAM by leveraging macOS SSD paging (~7.4 GB/s); automatically disables all caching, and exposes a virtual memory budget slider in the session settings UI. - ›Adds
model_type: mistral4config value to support Mistral Small 4 (119B) with MLA attention, 128-expert MoE, and YaRN interleaved RoPE, routed through the mlx-lm text path and mistral3 VLM wrapper. - ›Extends JANG gate dequantization to any model with
n_routed_experts > 0(Mistral 4, DeepSeek V3, etc.), previously limited to Nemotron only.
- ›Adds
- v1.3.0
vMLX v1.3.0 adds Nemotron-H support with hybrid SSM caching and session status banners with smooth token streaming.
└──▷ GET THIS VERSION$ git clone --branch v1.3.0 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.3.0
- ›Adds Nemotron-H JANG engine support with gate dequant (8→2 bit), fc1/fc2 rename, and MTP filter (42 GB GPU, 46 tok/s).
- ›Extends hybrid SSM full cache — prefix, paged, and disk caching — to Qwen3.5-A3B and Nemotron-H models.
- ›Adds session status banners showing loading, sleeping, and stopped states in chat UI.
- ›Adds renderer-side typewriter animation via requestAnimationFrame (rAF) for smooth token streaming.
└──▷ BREAKING ON UPGRADE- !Think-completion seed injection has been removed entirely.
- !The
STREAM_THROTTLE_MSconfiguration, _is_vlm_config() function, and vestigial weights parameter have been removed.
- v1.0.7
vMLX v1.0.7 adds full mflux model support, img2img variation generation, and an Iterate UI for prompt-based image refinement.
└──▷ GET THIS VERSION$ git clone --branch v1.0.7 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.0.7
- ›Adds support for Klein 4B/9B, Kontext, Fill, Qwen Image, and FIBO mflux models in the model picker with correct class dispatch.
- ›Enables img2img variation generation for Generate models via source image and strength parameter.
- ›Adds 'Iterate' UI action on any generated image to create variations with modified prompts.
- ›Persists settings — steps, size, guidance, strength, and negative prompt — across restarts.
- ›Adds 'Code tab' placeholder (marked Coming Soon) to the UI.
- v1.1.0
vMLX v1.1.0 adds speculative decoding, embedding model preloading, and server-wide generation defaults
└──▷ GET THIS VERSION$ git clone --branch v1.1.0 https://github.com/jjang-ai/vmlx.git # already have the repo? check out this version: $ git checkout v1.1.0
- ›Adds
/v1/embeddingsendpoint support via a pre-loadable separate embedding model, enabling semantic search and RAG workflows without a separate server. - ›Adds speculative decoding configuration with draft model and
num-draft-tokenscontrols for 20–90% generation speedup. - ›Adds server-wide default temperature and top-p sliders for generation defaults.
- ›Adds a dismissible auto-update checker banner that notifies when a new version is available.
- ›Adds