This is a large performance and reliability + bug fix release for Unsloth
Highlights
- AMD uses Vulkan by default - 20% perf boost for prefill, decoding vs ROCM
- Windows llama-server.exe is now signed, reducing false positives for SAC
- AMD gibberish issues in Strix, iGPUs fixed in (upstream - reported to AMD)
- Over 200+ bug fixes, 50% smaller binaries and performance improvements
- Updated PyTorch to 2.11 from 2.10 - 2.14 will be soon. MLX improvements
- Default to gpt-6-astra for Codex logins and improve OpenAI API processing
- MLX fixed when self healing / updating, causing slowdowns for inf + training
- Fix AppImage being very laggy. Fixed RAG upload issues stuck at 28% and API issues
- New Docker image published at https://hub.docker.com/r/unsloth/unsloth for Studio and notebooks
AMD + Windows
- Strix Halo and Strix Point now default to Vulkan for faster inference.
- Up to 23% faster prompt processing and 8% faster generation on Strix Halo.
- AMD iGPUs without ROCm now use Vulkan instead of CPU on Linux.
- Windows llama.cpp binaries are now signed to reduce Smart App Control blocks.
- Windows now clearly explains when code integrity blocks model loading.
- Reinstalling Unsloth on Windows keeps your supported PyTorch version.
MLX + Apple Silicon
- Gated-delta models now train up to 25% faster on Apple Silicon.
- Quantized MLX KV caches use up to 74% less prompt memory than before.
- Fresh Mac installs keep MLX training and exports working.
- Fine-tune with DoRA and more DPO loss types on Apple Silicon.
- Batched MLX generation now streams and samples each chat independently.
- More multimodal models can be fine-tuned using text-only datasets.
Studio + API
- RAG and document uploads are faster, show clearer progress and no longer appear stuck.
- Studio menus, Find and Settings now open more smoothly.
- GPT-6 Astra is available for Codex logins with Low through Max reasoning controls.
- Improved OpenAI-compatible API streaming, audio input and model loading.
- AppImage builds are more reliable with a pinned release toolchain.
Installs + Docker
- PyTorch 2.11 is now the default across supported installers.
- New NVIDIA Docker images for training and Studio, from Turing to Blackwell.
- Native AMD64 and ARM64 images are available from Docker Hub.
- The Unsloth Python package is now 44% smaller.
Docker: https://hub.docker.com/r/unsloth/unsloth
Download Unsloth Desktop
Unsloth Desktop is free and open source. Download it for:
- Windows
- macOS
- Linux
What's Changed
- Publish only the wheel to PyPI, not the sdist by @danielhanchen in #10202
- Bump install.sh / install.ps1 pin to unsloth>=2026.9.2 by @danielhanchen in #10203
- Add DeepSeek Harness to unsloth start by @NilayYadav in #10097
- Studio: stop generating when the client goes away by @NilayYadav in #10096
- Studio: keep what you typed with an image when a chat is shortened by @NilayYadav in #10165
- Order the Ollama stop-token scan instead of leaving it to a set by @vineethsaivs in #10101
- Studio: replay a web_search result the way the client sent it by @Lyxot in #10131
- Studio: say when a chat is too long instead of showing a raw error by @NilayYadav in #10090
- Restore the comment tails the trim cut off by @danielhanchen in #10205
- Studio: accept subtitle, caption and the rest of the common attachment formats by @shimmyshimmer in #9738
- Studio: count only this adapter's engines in the Windows AMD GPU utilization by @LeoBorcherding in #9317
- Fix diffusion offload host RAM retention by @wasimysaid in #10184
- Let audio models load into CPU RAM instead of the GPU by @shimmyshimmer in #10054
- Stop the zoo digest pin living in two places by @danielhanchen in #10206
- Format test_video_backend.py the way the pinned ruff wants by @danielhanchen in #10235
- Security audit: re-approve the four torch findings that 2.14.0 opened by @danielhanchen in #10233
- unsloth_cli tests: stop the mklink kwargs assertion breaking on an unrelated keyword by @danielhanchen in #10231
- Pin the multi-turn determinism probe to a backend that can be deterministic by @danielhanchen in #10234
- CI: stop grep -c || echo 0 producing a two-line count by @danielhanchen in #10232
- Security audit: re-approve the huggingface-hub backoff loop for 1.30.0 by @danielhanchen in #10244
- Stop the stall-window comparison being decided by one noisy sample by @danielhanchen in #10246
- Studio: report a cut off /v1/responses turn as incomplete by @NilayYadav in #10225
- Studio: keep a still-advancing llama.cpp prefill from timing out by @oobabooga in #10172
- Studio: bring the Llasa top_p default inside the range the API accepts by @danielhanchen in #9194
- CLI: pass --hf-token to the export checkpoint load by @NilayYadav in #10218
- Pin AppImage plugin to a versioned release by @wasimysaid in #10201
- Studio: thread hf_token through load_and_format_dataset by @KrishPatel1905 in #8924
- Studio: stop the update banners floating off the corner by @oobabooga in #10229
- fix(studio): stop handing a wildcard bind's public IP to LAN peers by @amanyagami in #9912
- Studio: report free memory on Mac as what is actually free by @NilayYadav in #10224
- Studio: match the update banner tests on classes, not on file substrings by @danielhanchen in #10267
- Studio: size a Deep Research run to the model it actually runs on by @NilayYadav in #10220
- Studio: fall back when a page declares a charset we do not know by @NilayYadav in #10221
- Studio: pin which rejection site the confirm-stream tests assert by @danielhanchen in #10284
- Studio: turn the generation prompt off on the final answer continuation by @NilayYadav in #10219
- Studio: let the API load settings panel forget an entry by @NilayYadav in #10160
- Windows torch release preservation and a torch 2.11 default across installers by @danielhanchen in #7256
- Add cu128/cu126/cu130 torch 2.11.0 extras (torch2110) with xformers 0.0.35 by @danielhanchen in #6955
- Studio: assert the write ordering, not what the write resolves to by @danielhanchen in #10289
- Kaggle: fix the nightly, which has never once got as far as Kaggle by @danielhanchen in #10270
- Keep probing for a usable nvidia-smi before falling back to ROCm on Windows by @danielhanchen in #4958
- Trim comments in studio/frontend chat, model picker and media features by @danielhanchen in #10114
- Add a dispatch-only Docker Hub credential probe by @danielhanchen in #10291
- Fix Studio find-in-page correctness and typing by @wasimysaid in #10209
- Studio: stop exports timing out while they are still working by @NilayYadav in #10258
- Stop unsloth chat from reloading a model the server already has by @NilayYadav in #10257
- Studio: stop hiding every model pulled with ollama pull by @NilayYadav in #10222
- Anchor studio source slices on declarations, not on comment text by @danielhanchen in #10297
- Studio: fix Restore settings breaking preset saving by @NilayYadav in #10256
- Lazy-load Studio entry surfaces by @wasimysaid in #10236
- Restore persisted Studio resource monitor by @wasimysaid in #10237
- fix(frontend): render data-URI images in chat markdown by @CelesteHeartsong in #10269
- Fix Hub GGUF fit estimates for companion files by @Imagineer99 in #10249
- Pin the auth mount gate to its behaviour, not one spelling of the guard by @danielhanchen in #10307
- Trim comments in tests, scripts, CI helpers and unsloth_cli by @danielhanchen in #10113
- Add Unsloth Docker images (base + Studio) for any NVIDIA GPU host, Ampere through Blackwell by @danielhanchen in #5748
- Restore the facts the frontend comment trim reworded away by @danielhanchen in #10292
- Install the cublas wheel NVIDIA actually publishes for the bundle's CUDA major by @danielhanchen in #10324
- Studio: fix whisper prebuilt pairing on linux-arm64 with a GPU llama runtime by @danielhanchen in #10278
- Docker publish: verify the merged manifest against the arches' children by @danielhanchen in #10333
- Docker: describe the shipped images on Docker Hub and in the README by @danielhanchen in #10334
- Stop asserting the titlebar navigation padding from source by @danielhanchen in #10326
- Restore facts the comment trim cut from the unsloth package by @danielhanchen in #10328
- Restore facts the comment trim cut from the Studio backend by @danielhanchen in #10329
- Restore facts the comment trim cut from the studiobench harness by @danielhanchen in #10331
- fix(studio): align desktop titlebar buttons by @mahiatlinux in #10321
- Docker publish: sync the Hub page with DOCKER_API_KEY on the namespace route by @danielhanchen in #10343
- Revert "Studio: keep a Downloads entry when the list is empty" by @Etherll in #10298
- Make the credential probe actually delete its throwaway tag by @danielhanchen in #10294
- Docker: print the Studio admin password in docker logs, add UNSLOTH_STUDIO_PASSWORD by @danielhanchen in #10344
- Docker: retry the deadsnakes PPA add so a Launchpad 504 does not fail the build by @danielhanchen in #10363
- Docker publish: keep the tag list to core, latest, studio, releases and dated nightly pins by @danielhanchen in #10364
- Studio: take GGML_CUDA_ENABLE_UNIFIED_MEMORY only when the weights outgrow the APU carve-out by @danielhanchen in #10351
- Studio: prefer the self-contained MTP head so llama-server's --fit can measure it by @danielhanchen in #10342
- Studio: measure the real size of attached documents instead of guessing by @NilayYadav in #10318
- Bump the npm-frontend-security group across 1 directory with 5 updates by @dependabot[bot] in #10194
- Chat: keep the payload when a provider streams arguments as a decoded object by @lonexreb in #10275
- deps: bump setuptools build pins and raise the ip-address override to 10.3.1 by @danielhanchen in #10138
- studio: stop find in page matching part way through a grapheme by @danielhanchen in #10200
- Studio: unsloth chat loads the model you picked, not another GGUF in the same folder by @NilayYadav in #10357
- Studio: keep the overlay rail honest about what it reserves by @danielhanchen in #10372
- Kaggle T4: fail a batched row that generates nothing while its single does not by @danielhanchen in #10367
- Docker: one command sets up the NVIDIA Container Toolkit on the host by @danielhanchen in #10366
- Kaggle T4: describe the batched-generation expectation as a precision property, not a pending fix by @danielhanchen in #10377
- Studio: keep an API key from borrowing the operator's Hugging Face token (#10126) by @harshaygadekar in #10142
- Use hybrid uv cache migration for Studio installs by @wasimysaid in #10204
- feat(chat): render on-disk sandbox images in chat markdown by @CelesteHeartsong in #10361
- Point unsloth start openclaw memory search at the Unsloth embeddings API by @NilayYadav in #10320
- Studio: serve /v1/embeddings from the configured embedding model when the loaded GGUF cannot by @NilayYadav in #10315
- Studio: stop converting the model twice when exporting GGUF to the Hub by @NilayYadav in #10317
- Studio: return an error when tools are sent to a model that cannot use them by @NilayYadav in #10314
- Local Agent Guides CI: judge a finished turn the CLI would not exit from by @danielhanchen in #10399
- Docker toolkit installer: stop pipefail turning a grep match into a miss by @danielhanchen in #10402
- Fix composer send and stop icon centering across display scales by @shimmyshimmer in #10407
- Give push_to_ollama the arguments create_ollama_modelfile takes by @vineethsaivs in #10304
- Kaggle CI: dispatch the kernel and collect it later, instead of holding a runner by @danielhanchen in #10183
- Studio: make the chat and sidebar menus open without freezing the page by @NilayYadav in #10262
- Studio: unbreak the frontend suite and the icon alignment check by @danielhanchen in #10413
- Studio smoke: report a transport failure instead of crashing on one by @danielhanchen in #10420
- Give
unsloth studio updatethe same uv cache the backend already uses by @danielhanchen in #10386 - Studio installer: torch 2.11 on Linux CPU, Vulkan for AMD without ROCm, gfx1033 gate, and three install fixes by @danielhanchen in #8412
- Studio: four load and update messages that told the user the wrong thing by @danielhanchen in #10383
- Studio: keep the llama-server prompt cache on a shared-memory GPU by @danielhanchen in #10382
- Studio: retry as one sequence when llama.cpp refuses a unified KV cache by @danielhanchen in #10371
- Publish Docker on the daily schedule, and move layer cache off the Actions quota by @danielhanchen in #10429
- Studio: report a throughput the engine could have produced by @danielhanchen in #10384
- Stop shipping the frontend source tree and desktop crate in the wheel by @danielhanchen in #10426
- Studio: optimize video galleries by removing per-card media pipelines by @oobabooga in #10228
- Studio: do not crash a model load when shutdown tears the server down under it by @danielhanchen in #10369
- Studio: route AMD integrated GPUs to the Vulkan llama.cpp prebuilt by @danielhanchen in #10381
- Studio: give a local GGUF one variant identity, so an API load applies its saved settings by @Lyxot in #10238
- Studio: reuse MLX vision-language prompt prefixes between turns by @Lyxot in #10239
- Studio: share one Hub model_info read across the model-config probes by @Lyxot in #10230
- Keep the LoRA GGUF and compressed-tensors converters off the operator's Hugging Face token by @Souravrajvi0 in #10263
- Studio: load the speech model an audio API request asks for by @NilayYadav in #10217
- Studio: stop rejecting provider API keys longer than 190 bytes by @Lyxot in #10421
- Studio: dial the bound address for in-process API calls, not a loopback literal by @Lyxot in #10140
- Studio: admit a bearer that carries no token under keyless API access by @Lyxot in #10423
- Studio: convert pasted images when tools are turned on by @NilayYadav in #10094
- Fix GGUF catalog snapshot selection by @Imagineer99 in #10210
- Studio: accept the standard input_audio message part by @NilayYadav in #10255
- Studio: use the eval dataset for TTS and codec audio training by @NilayYadav in #10259
- studio: use the hermes and deepseek logos in the agents picker by @mahiatlinux in #10266
- Studio: use every thinking level a local model offers by @NilayYadav in #10458
- Bind the amp helpers on the MLX runtime too by @vineethsaivs in #9447
- OpenAI stream: gate UI control frames behind X-Unsloth-Events opt-in by @denys-bushuliak in #10362
- Clean up Hub runtime/config coupling by @Sneakr in #9886
- Stop unsloth start codex and openclaw from inheriting provider API keys by @NilayYadav in #10316
- Studio: add GPT-6 Astra to the fallback catalog and reasoning controls by @shimmyshimmer in #10475
- Studio: let Deep Research write longer reports on saved connections by @NilayYadav in #10254
- Fix the red Cross-platform parity run: decode PowerShell stdout as UTF-8 by @danielhanchen in #10476
- Studio: name the llama.cpp backend in the install log, and stop labelling Windows ROCm torch as CPU by @danielhanchen in #10370
- notebook_validator: read shell the way bash does, and state the torch/torchcodec contract by @danielhanchen in #10414
- Docker Studio: build the labextension with @jupyter/builder so it never reaches for GitHub by @danielhanchen in #10483
- Drop late inference responses after their request is released by @ianderse in #10388
- Studio: stop re-fetching every llama.cpp release from the GitHub API by @NilayYadav in #10461
- Do not self-heal MLX into a --no-torch install by @shimmyshimmer in #10409
- Pin tokenizers with transformers so Apple Silicon keeps Train and Export by @danielhanchen in #10431
- Make the venv-hardening decode strict, and say which codepoints differed by @danielhanchen in #10432
- Stop unsloth train from ignoring config keys it does not know by @NilayYadav in #10452
- Apply the load settings unsloth start dsh is given by @NilayYadav in #10451
- Studio: keep an Ollama Modelfile SYSTEM prompt in force when the date line is on by @HughScott2002 in #10463
- Studio: fix sending an image with no caption on Anthropic by @NilayYadav in #10455
- Studio: keep the uploaded eval dataset for Whisper and audio VLM runs too by @danielhanchen in #10482
- torchcodec: cover torch 2.11 in the compatibility guard and pin per torch minor by @danielhanchen in #7474
- fix(tokenizer): enable add_bos_token for Gemma 4 base models by @Souravrajvi0 in #10312
- Studio: make the Min P and Repetition Penalty sliders work by @NilayYadav in #10456
- Studio: show mlx-community models as MLX in the model picker by @NilayYadav in #10457
- Recognise Windows code integrity blocks, and require the runtime we ship by @danielhanchen in #10404
- Assert the release publishing path uploads the wheel only by @danielhanchen in #10419
- Studio: harden the codec-audio eval config added in #10259 by @danielhanchen in #10477
- Scan release bundles for potentially unwanted applications too by @danielhanchen in #10478
- Refactor setup.sh into modular functions and restructure main execution flow by @xerrni in #5408
- fix: private dataset splits/metadata not loading in Studio UI by @Shivamjohri247 in #4965
- Feat: add unsloth skill, fix cli by @TimPietrusky in #4443
- bump trl version by @danielhanchen in #4248
- Add persistent wiki-RAG pipeline with vendored Graphify, lint-driven enrichment, and debug/maintenance APIs by @zohairshafi in #5103
- Fix Windows setup access-denied on existing llama-server ACLs by @aiSynergy37 in #4881
- [WIP] Apple Silicon (MPS/Metal) Support by @danielhanchen in #4259
- docs: improve documentation on exporting models from Colab by @danielhanchen in #4247
- Add Qwen3-Omni Support with Optimized MTP Fine-Tuning by @danielhanchen in #4235
- Studio: allow DoRA training on Apple Silicon by @Lyxot in #7508
- Studio: ask for a password on a raw
-H 0.0.0.0bind too by @danielhanchen in #10485 - fix(studio): refresh profile stats and mode-aware activity summary by @Souravrajvi0 in #9402
- Studio: keep queued prompts when generation is stopped by @claxman in #10445
- Fix the red parity gate: run_pwsh has to set the writing end of the pipe too by @danielhanchen in #10484
- Studio: say when a file cannot be read instead of ignoring it by @NilayYadav in #10261
- Studio: recover saved context when switching back to a snapshot path by @claxman in #10447
- Studio: install the supported MLX stack on fresh macOS installs by @shimmyshimmer in #10403
- Cache janitor: sweep every two hours, drop dead buildkit blobs on sight, keep one CodeQL overlay base by @danielhanchen in #10488
- Studio: stop installing flash-linear-attention and tilelang, unsloth_zoo vendors the GDN kernels by @danielhanchen in #10487
- Docker Hub README: xformers is amd64 only, GB10 runs through PTX, canonical docs link by @danielhanchen in #10492
- Docker Studio: keep the base image's CUDA llama.cpp instead of the CPU prebuilt by @danielhanchen in #10495
- Make the formatter refuse a ruff it is not pinned to, and re-format the four files that drifted by @danielhanchen in #10512
- Tests: let the xFormers pin guards hold on both main and pip by @danielhanchen in #10514
- Studio: fix document upload stalls, races and text decoding by @shimmyshimmer in #10496
New Contributors
- @KrishPatel1905 made their first contribution in #8924
- @amanyagami made their first contribution in #9912
- @harshaygadekar made their first contribution in #10142
- @denys-bushuliak made their first contribution in #10362
- @ianderse made their first contribution in #10388
- @HughScott2002 made their first contribution in #10463
- @xerrni made their first contribution in #5408
- @Shivamjohri247 made their first contribution in #4965
- @TimPietrusky made their first contribution in #4443
- @zohairshafi made their first contribution in #5103
- @claxman made their first contribution in #10445
Full Changelog: v0.1.806-beta...v0.1.807-beta