Thanks for the support for Qwen3.8-27B and Unsloth Desktop last week! For this release, we merged 200+ PRs to introduce many new features, fixes including:
- Auto Compaction (Experimental) for longer chats beyond context limits
- Remote & LAN Access (Preview) for easy network access without Cloudflare links
- Faster Chat - Improved streaming performance, reduced UI lag, and smoother long conversations.
- Support for custom llama.cpp builds. Toggles for Cache RAM, Mmap, Mlock, Checkpoints, Spe Decoding KV Cache, Vision On / Off
- Unsloth Dynamic v3.0 is released. New Qwen3.8-27B Dynamic v3.0 GGUFs deliver >10% higher top-1 accuracy compared to everyone else. Works with Unsloth.
Auto compaction (Experimental)
You can now do long chats and surpass a model's context limit, with evicted turns
remaining searchable.
- Long local chats can continue past the context limit by rolling older turns out of
active context. - Auto compaction creates fresh context epochs instead of permanently trimming replies.
- Evicted conversations remain searchable, with improved fact recall.
- Context window information is shown before chat begins.
How it works
- Entire oldest turns are removed only when needed, never mid-message. The saved transcript stays unchanged.
- Evicted turns are indexed into a per-thread searchable archive using Unsloth's existing RAG pipeline (store, chunker, embedder, retrieval). Lexical search is prioritized because chat recall is usually exact matches like names, numbers, or IDs.
- A recall is forced during eviction instead of relying on the model to search itself. Later retrieval uses
search_conversation. - The archive persists across epochs, allowing future compactions to recover previously evicted context.
- No summarization: it showed little benefit and added ~190s per compaction.
Remote & LAN access (Preview)
Access Unsloth from another device on your network, managed from settings.
- New dedicated Settings section for remote access.
- Enable or disable LAN access without restarting.
- Supports connection addresses, QR codes, and optional auto-start.
- LAN access is disabled by default and requires changing the generated admin password.
Chat + Functionality improvements
- Long chats are faster with optimized streaming and thread handling.
- Projects organize chats, files, and workspaces together.
- Chats remember composer settings, system prompts, and model sampling options.
- Added prompt queueing and customizable keyboard shortcuts.
- Added
edit_filetool for partial file modifications. - Improved tool calling and MCP behavior.
Hardware + inference improvements
- Support for custom llama.cpp builds.
- Toggles for advanced settings - Cache RAM, Mmap, Mlock, Checkpoints, Speculative Decoding KV Cache, Vision On / Off
- Better validation for missing GPU support and oversized GGUF models.
- Improved MTP performance and VRAM handling.
- Better compatibility across ROCm, xFormers, and flash-attention setups.
- Added Intel XPU support.
API + serving
- Responses API supports structured output formatting.
- Improved recovery when llama-server crashes.
- Added OpenCode V2 support for
unsloth start.
Hub + Desktop + training
- Hub supports more image/video workflows.
- Faster and improved GGUF downloads.
- Desktop packaging and permissions improved.
- Training scheduler and preprocessing improvements.
| Platform | Link |
| Windows | Download |
| macOS | Download |
| Linux / Ubuntu (deb) | Download |
| Linux (AppImage) | Download |
| Linux (Arm64) | Download |
What's Changed
- Bump install.sh / install.ps1 pin to unsloth>=2026.8.18 by @danielhanchen in #8836
- Give the llama-flag fixtures the parallelSlotsClamped they now require by @vineethsaivs in #8837
- Studio: preserve pre-tool reasoning inside the GGUF tool loop by @losuler in #8581
- docs: fix dead Linux .deb download link by @yzxcj797 in #8891
- Model hub: show the Meta mark on the Unsloth re-upload of Muse Glimmer by @shimmyshimmer in #8949
- Studio: speed up the local model inventory and keep it off the API loop by @oobabooga in #8770
- Studio: reuse the cached GGUF work a load request has already done by @oobabooga in #8771
- studio: keep each tool-call round separate when the delta index restarts by @mahiatlinux in #8754
- studio: route bare tool-call fragments to the call that owns the index now by @mahiatlinux in #8755
- studio: opt-in model auto-switch for the image and video apis by @mahiatlinux in #8766
- Studio: keep project chats in Recents, add a Projects sidebar section by @shimmyshimmer in #8932
- Studio: find the real Documents folder on Windows for project workspaces by @shimmyshimmer in #8955
- fix(unsloth studio): only preprocess the rows a max_steps run will actually use instead of preprocessing validated datasets by @LeoBorcherding in #8890
- Studio: stop the chat UI falling behind a fast stream by @oobabooga in #8845
- studio: keep each chat's composer pills and settings with the chat by @mahiatlinux in #8686
- studio: allow a per-connection max tokens limit on every provider by @mahiatlinux in #8944
- Crash guard: read dumpability in order, and stop losing crashes to scope and naming by @danielhanchen in #8808
- Studio: size the max_steps row bound for the data-parallel world by @danielhanchen in #8958
- Studio: make the paste-to-attachment threshold a chat setting by @shimmyshimmer in #8963
- Fix CI on main: stale test doubles, a stale router stub, and two source defects by @danielhanchen in #8956
- Make the startup profile a gate, with budgets from its own measurements by @danielhanchen in #8965
- Keep xFormers working when flash-attn 4 is installed, and guard the varlen int32 overflow by @danielhanchen in #8957
- Stop six backend tests waiting on the clock instead of on a signal by @danielhanchen in #8975
- CI: stop three workflows paying for work they throw away by @danielhanchen in #8976
- Give the pasted-text import an extension so the node test runner can load it by @danielhanchen in #8981
- Make the packed-boundary guard reachable on the fused cross-entropy path by @danielhanchen in #8959
- Studio: Fix embedded MTP performance under partial GPU offload by @oobabooga in #8875
- Studio: tokenize the dataset online for plain-text single-pass runs by @danielhanchen in #8960
- Studio: keep K and V equal when the flash-attention retry resets the V cache by @danielhanchen in #8827
- Studio: hold the Auto-layers context exemption only while --fit runs by @danielhanchen in #8825
- Studio: stop a sent prompt staying in the chat composer by @shimmyshimmer in #8849
- Chat: queue prompts with Cmd/Ctrl+Enter and drag to reorder the queue by @shimmyshimmer in #8952
- Studio: repin the permission-mode contract to behaviour, not a declaration by @danielhanchen in #8986
- Cut Repo tests (CPU) roughly in half: stop the synthetic vLLM tests reaping a fake server by @danielhanchen in #8993
- Core: sweep every transformers model_type across a process pool by @danielhanchen in #8995
- Repair the Tauri retry test against the download-marker pipeline by @danielhanchen in #8996
- Studio: read every launcher world size when resolving a step-capped run's passes by @danielhanchen in #9000
- Repair the prompt-queue contract test against the queueing refactor by @danielhanchen in #9026
- studio: stop prompting to stop chats for a model already loaded by @mahiatlinux in #8943
- Studio: remember chat parameters per model by @shimmyshimmer in #8757
- Studio: share attached files across a project by @shimmyshimmer in #8756
- Fix a 500 on dictation Unload before any backend is resident by @danielhanchen in #9013
- Run the repo CPU test suite on all four runner cores by @danielhanchen in #9019
- Scan package archives across cores instead of one at a time by @danielhanchen in #9024
- Stop TestProbeGating asserting a tier the mapping check is meant to upgrade by @danielhanchen in #9029
- Stub the implicit STT load in the disconnect-cancellation test by @danielhanchen in #9031
- Stop test_begin_load_never_refuses_auto racing the thread it is asserting about by @danielhanchen in #9034
- Measure the streaming stripper against CPU time, not wall clock by @danielhanchen in #9035
- Fix silent lr_warmup_steps no-op under the default constant scheduler by @Eoin-Houstoun in #8464
- Repair the contract tests #8943 left behind on main by @danielhanchen in #9067
- Take the loaded-models indicator suite off the UI job's critical path by @danielhanchen in #9060
- Keep the killed-by-signal exit status when release() fails by @danielhanchen in #9072
- Put the event-loop latency bound between the two things it separates by @danielhanchen in #9077
- Stub unsloth in test_safetensors_reasoning_stream so it can run first by @danielhanchen in #9027
- Report what the launcher logged when a signal test fails by @danielhanchen in #9079
- Studio: let Allow microphone recover from a saved "Don't allow" on Windows by @shimmyshimmer in #9006
- Run both ends of the interpreter matrix on a pull request, all four on main by @danielhanchen in #9080
- fix(studio): enable microphone/camera access in Linux WebKitGTK webview by @rsd-darshan in #8720
- Studio: budget the JavaScript that runs before the first screen by @danielhanchen in #8964
- fix(studio): derive disk percentage from displayed usage by @dyuan311 in #9021
- Studio: stop rereading the whole reply on every streamed arrival by @danielhanchen in #9012
- Studio: stop every message part re-rendering on each streaming chunk by @danielhanchen in #9014
- Studio: stop a LaTeX rewrite throwing away the whole retained markdown prefix by @danielhanchen in #9017
- Studio: stop later code spans changing whether an earlier one is escaped by @danielhanchen in #9028
- Chat: stop a message delete from re-rendering the whole thread by @danielhanchen in #9042
- Chat: stop a keystroke in the composer costing one pass over the thread by @danielhanchen in #9054
- Let every main run finish instead of cancelling it before it starts by @danielhanchen in #9082
- One multi-turn smoke script for all three operating systems by @danielhanchen in #9086
- Studio: give a CRLF reply the same incremental rendering as an LF one by @danielhanchen in #9088
- Studio: sweep the streaming markdown corpus at every prefix by @danielhanchen in #9085
- Do not let the signal handler's own logging stop it dying by @danielhanchen in #9083
- Stop the media switch test racing a 0.3s budget against 2s of cold path by @danielhanchen in #9097
- Studio: honor the Responses API text.format structured output by @NilayYadav in #8846
- Studio: stop the streaming prefix checks scanning the whole reply by @danielhanchen in #9038
- Studio: stop the streamed reply being flattened on every arrival by @danielhanchen in #9049
- Studio: strip the trailing template placeholder once, on the finished reply by @danielhanchen in #9101
- Studio: fix the Windows-only path failures in the frontend test suite, and catch the shape from Linux by @danielhanchen in #8980
- Studio: run the frontend unit tests on Windows in CI by @danielhanchen in #9099
- Run the Backend CI matrix in parallel, like its sibling job already does by @danielhanchen in #9095
- Pair the diffusion warmup presets with a scheduler that uses them by @vineethsaivs in #8593
- Make the models a defaults file claims actually load it by @vineethsaivs in #8726
- Derive warmup steps from a model default that gives a ratio by @vineethsaivs in #8723
- Studio: let the hub run non-GGUF image and video models by @NilayYadav in #8855
- Restore crypto.randomUUID before the Studio bundle evaluates by @Lyxot in #9075
- studio: refuse a gguf that cannot fit in free vram plus available ram by @mahiatlinux in #8883
- studio: add settings-managed LAN access by @mahiatlinux in #8951
- Ask the repo, not sys.path, whether a stubbed name is third-party by @danielhanchen in #9133
- Stop the sidecar tests writing into the real Studio install by @danielhanchen in #9131
- Delete a test that never ran, and stop another appearing by @danielhanchen in #9135
- Make a hung kaggle launcher say where it is stuck by @danielhanchen in #9104
- Stop the banner layout suite waiting out the update timer on every boot by @danielhanchen in #9105
- Give each xdist worker its own torch.compile cache directory by @danielhanchen in #9134
- One interpreter leg on a pull request, and a floor lint that reads more than syntax by @danielhanchen in #9100
- Split Chat UI Tests into four shards on the Studio boundaries by @danielhanchen in #9132
- Bundle Unsloth GGUF CI onto one runner, matching Windows and macOS by @danielhanchen in #9139
- Give the small Windows checks one box per image instead of one box per check by @danielhanchen in #9143
- Let tests skip the settle wait between retried VRAM reads by @danielhanchen in #9141
- Studio: keep the streaming render harness the perf PRs kept rebuilding by @danielhanchen in #8969
- Studio: pin why a Streamdown remount keeps its highlighted code by @danielhanchen in #9048
- Chat: cover which messages a delete takes with it by @danielhanchen in #9087
- Studio: pin what the trailing-placeholder window does with nested placeholders by @danielhanchen in #9091
- Studio: stop a settings module reading a chat store key before it exists by @danielhanchen in #8979
- Studio: load the settings tab panels when they are shown, not at launch by @danielhanchen in #8966
- Name the encoding when reading wslinfo's output by @danielhanchen in #9142
- Studio: keep pandas out of the backend startup import graph by @danielhanchen in #8962
- Run the three loaded-models-indicator engines at once by @danielhanchen in #9158
- Unblock Mac Studio GGUF CI, red on every main run since #8883 by @danielhanchen in #9155
- Drop the Exa preset from the MCP menu by @shimmyshimmer in #9160
- Studio: stop the overlay rail going click-through while it is scrolling by @danielhanchen in #9150
- Open the connection form when Settings > Connections has nothing to list by @shimmyshimmer in #9157
- Security audit: pin openai, and re-review the four digest-pinned entries by @danielhanchen in #9148
- Say why a Xet download sits at 0% until it finishes by @shimmyshimmer in #9159
- Stop running every macOS workflow on every commit to main by @danielhanchen in #9174
- Time the install from CI, without changing the installers by @danielhanchen in #9153
- Studio: measure where a heavy thread stalls, across engines and thread size by @danielhanchen in #9016
- Studio CI: make a failing browser smoke say why, and stop it skipping the build gates by @danielhanchen in #8983
- Stop spending the Actions cache budget on caches nothing reads by @danielhanchen in #9151
- Fix low VRAM mmproj fallback in Studio by @wasimysaid in #9173
- Run two short jobs as background lanes of Lint CI, not on their own runners by @danielhanchen in #9176
- Studio: fail fast when the installed llama.cpp prebuilt has no kernels for this GPU by @NilayYadav in #8841
- Studio: bulk chat management multi-select move/pin/archive/export/delete by @NilayYadav in #8745
- hide app-only MCP tools from the model and explain why local commands are disabled by @NilayYadav in #8739
- Studio: remember last used model in the backend, not per-browser by @NilayYadav in #8587
- Studio: show MCP server display names instead of internal ids by @NilayYadav in #8557
- Studio: make the chat thread stop getting slower as it fills by @danielhanchen in #8992
- Studio: recover marked reports across reasoning channels by @alkinun in #9119
- show the local model's context window before the first token count by @mahiatlinux in #8882
- studio: stop nudging a turn that asks the user for a missing detail by @mahiatlinux in #8946
- Say both load fallbacks when both fire, and repair the two suites that guard it by @danielhanchen in #9189
- Run the Mac GGUF inference phases in the Mac UI job, not on a second runner by @danielhanchen in #9213
- Print what the server said when an inference smoke request 4xx's by @danielhanchen in #9202
- Allowlist huggingface-hub's http_backoff loop so Security audit stops failing by @danielhanchen in #9252
- Count a capped overlay stack by what it reads, not by how the cap is spelled by @danielhanchen in #9253
- Studio: support llama.cpp semantic version output by @oobabooga in #9127
- Bound every apt step in CI, and fix the retry that never ran by @danielhanchen in #9256
- Make apt fail fast, so the retry has something to retry by @danielhanchen in #9260
- Record the venv own requirement digests, not the installers by @danielhanchen in #9263
- Stub all three fields the snapshot reads, not two of them by @danielhanchen in #9274
- Ask whether Playwright system libraries are missing before installing them by @danielhanchen in #9273
- Stop blaming the recipe for a turn that never came back by @danielhanchen in #9266
- Move the two version-incidental macOS jobs onto the emptier pool by @danielhanchen in #9277
- Give the Colab freeze a pip cache, like the job beside it already has by @danielhanchen in #9276
- Wait for the Compare nav instead of sampling for it by @danielhanchen in #9264
- Install the browser engines each Chat UI shard actually drives by @danielhanchen in #9283
- Update README to include Intel XPU support description for unsloth studio by @JoshuaL3000 in #9250
- Allow unlimited Deep Research time budgets by @alkinun in #9078
- Stop the orphan-scan tests asking the host whether an invented PID is alive by @danielhanchen in #9280
- Repair the tests main is currently red on by @danielhanchen in #9192
- Re-type the native default, not whatever the input happens to show by @danielhanchen in #9282
- Studio: confirm an Audio model swap instead of dead-ending on the backend 409 by @shimmyshimmer in #9092
- fix(studio): refuse a hand-set context unified memory cannot hold by @danielhanchen in #9172
- Studio: size Xet download buffers from free RAM, not total by @shimmyshimmer in #9052
- Studio: make the partial download affordance tell the truth by @shimmyshimmer in #8982
- Cache uv's downloads, which is now the largest single cost in CI by @danielhanchen in #9271
- Studio: incrementally tokenize streaming code fences by @oobabooga in #8935
- Desktop: ship a complete Linux AppImage by @oobabooga in #9113
- Studio: link the Read aloud TTS row to Audio and show the preview generate wait by @shimmyshimmer in #9093
- studio: show the model a chat was started on, and offer it back by @shimmyshimmer in #9081
- Desktop: make every drop zone take a drop again (#9036) by @shimmyshimmer in #9056
- Studio: say when a scan folder cannot be read instead of showing no models by @shimmyshimmer in #9053
- Studio: recover the OpenAI passthrough from a crashed llama-server by @shimmyshimmer in #8999
- Studio: stop the desktop health watchdog killing a backend that is busy generating by @shimmyshimmer in #8990
- Studio: add a keyboard shortcuts page and make the existing chords rebindable by @shimmyshimmer in #8948
- Scroll into view before a forced click by @danielhanchen in #9291
- studio: keep each chat's sampling params and system prompt with the chat by @shimmyshimmer in #9055
- Run the zoo suite in parallel, minus the two files that cannot share a worker by @danielhanchen in #9285
- Cache the .deb set webkit needs, so a dead mirror costs a miss not a shard by @danielhanchen in #9289
- Revert "Say why a Xet download sits at 0% until it finishes" by @shimmyshimmer in #9293
- Default preserve thinking on for Qwen3.8 by @Imagineer99 in #9096
- Studio: price a partial GGUF by what is left to fetch by @shimmyshimmer in #8989
- Studio: add an edit_file tool so agents stop rewriting whole files by @shimmyshimmer in #8753
- fix(studio): img2img/inpaint on GGUF image models — from_pipe fallback with no recast (#9186) by @yzxcj797 in #9193
- Install Studio on a Windows host whose C# compiler cannot run by @danielhanchen in #9178
- fix(AMD): retry ROCm llama-server with bundled HIP on HIP/ROCR mismatch by @indrajeetapache in #9002
- Studio: use a custom llama.cpp build by @Etherll in #9292
- Studio: keep health checks responsive during Anthropic generation by @Imagineer99 in #9201
- Studio: propagate required backend version to repair pipeline (#8610) by @karan68 in #8670
- Keep a sampler's std and uuid format across a save and reopen by @vineethsaivs in #9225
- Studio: never pick a macOS AppleDouble sidecar as a GGUF by @sts-change in #8919
- Studio: follow up #9201 across non-streaming sibling paths by @oobabooga in #9312
- Studio: take common SQLite reads off the event loop thread by @oobabooga in #9234
- Keep xFormers attention masks on the GPU running each layer by @oobabooga in #8516
- Studio: add rolling context windows for local GGUF chat by @alkinun in #8961
- Studio: keep and search the turns rolling context evicts by @danielhanchen in #9074
- Studio: recall the latest version of a fact, not the most quotable one by @danielhanchen in #9161
- Studio: compact a chat by resetting the epoch, not by trimming it forever by @danielhanchen in #9162
- Support OpenCode V2 in unsloth start by @pascalandr in #9275
- Keep path_utils off PEP 604, which the 3.9 floor gate rejects by @danielhanchen in #9335
- Stub the two helpers the sliced harnesses started importing by @danielhanchen in #9342
- Put back the AppleDouble GGUF filters #9074 reverted, and guard them by @danielhanchen in #9353
- Fix the two backend guards that #9292 turned red on the 3.13 leg by @danielhanchen in #9348
- Drain the sampling debounce long enough for the node CI actually runs by @danielhanchen in #9332
- Take two ubuntu jobs off their own runners: absorb one, delete the other by @danielhanchen in #9360
- Studio: stop docked composer from squeezing download panel by @oobabooga in #9334
- Drain the sampling suites on the store's write chains, not on node's loader by @danielhanchen in #9367
- Say which runtime components an AppImage is missing before its env hygiene by @danielhanchen in #9370
- Drop the HunyuanImage GGUF the Hub no longer serves by @danielhanchen in #9369
- Studio: fix two intermittently failing tests by @danielhanchen in #9200
- Acknowledge the Colab rotation the oracle snapshot is measuring by @danielhanchen in #9376
- Studio: carry a restated instruction once, not eight times by @danielhanchen in #9368
- Stop 13 jobs rebuilding the same frontend on every commit by @danielhanchen in #9375
- Stop 19 test files racing on one PowerShell startup cache by @danielhanchen in #9371
- Stop the pip cache key duplicating itself on every Python patch bump by @danielhanchen in #9377
- Studio: list Ollama models in the chat picker and load their manifest refs by @lonexreb in #9237
- Stop the Studio temp probe leaving anything behind by @danielhanchen in #9298
- Stop the dist cache key hashing 457 files the rebuild check never reads by @danielhanchen in #9380
- Studio: overturn a chat-only MLX verdict the stack contradicts (#9120) by @yzxcj797 in #9124
- Put the managed Node bin dir on PATH when spawning stdio MCP servers by @NilayYadav in #9304
- Studio: normalize replayed tool-call ids for external providers by @NilayYadav in #9116
- Don't select Flash Attention 2 for float32 model loads by @NilayYadav in #9110
- Studio: keep every cached revision's quants on the on-device card by @Lyxot in #9381
- Studio: put Remote and LAN access on their own settings tab by @shimmyshimmer in #9389
- Run six pinned-symbol jobs on one runner instead of six by @danielhanchen in #9385
- Studio: take the model name back off the chat rows by @shimmyshimmer in #9395
- Stop five Windows jobs rebuilding the same frontend on every commit by @danielhanchen in #9387
- Run the Windows UI suites in two parallel lanes instead of five in sequence by @danielhanchen in #9391
- Studio: keep a downloaded model listed when upstream moves on by @oobabooga in #9347
- Studio: offer only the Codex models the ChatGPT plan can actually reach by @NilayYadav in #9302
- Studio: place the vision projector on the CPU only when it does not fit in VRAM by @danielhanchen in #9063
- Fix Qwen3.8 presence penalty defaults by @Imagineer99 in #9372
- Studio: Forward thinking controls and return reasoning on /v1/messages and /v1/responses by @NilayYadav in #9107
- Studio: keep the working llama.cpp install when a prebuilt update can't move it aside by @NilayYadav in #9221
- Studio: add a Disable Vision toggle to a model's Advanced Settings by @danielhanchen in #9383
- Studio: stop the scroll stabilizer invalidating style for the whole thread by @danielhanchen in #9328
- Studio: never offer a calibration imatrix as a GGUF variant by @danielhanchen in #9409
- Stop Codex cancelling its own first turn while llama-server reads the prompt by @danielhanchen in #9403
- Studio: stop a reset dropping the task when the user types short prompts by @danielhanchen in #9379
- Studio: finish a reply that hit Max Tokens instead of asking whether to by @danielhanchen in #9382
- Format the mmproj placement policy tests so pre-commit stops failing every PR by @danielhanchen in #9414
- Studio: scope the sidebar drag's custom-property writes off the thread's ancestors by @danielhanchen in #9400
- Studio: size a large tool result to the window the model is running with by @danielhanchen in #9384
- Report what the model server actually said when a stream fails by @danielhanchen in #9390
- Admit generations against the KV cache, not just the slot count by @danielhanchen in #9392
- Studio: add Mmap/Mlock, draft KV cache dtype, Checkpoints and Cache RAM to Run settings by @danielhanchen in #9410
New Contributors
- @losuler made their first contribution in #8581
- @yzxcj797 made their first contribution in #8891
- @Eoin-Houstoun made their first contribution in #8464
- @dyuan311 made their first contribution in #9021
- @indrajeetapache made their first contribution in #9002
- @karan68 made their first contribution in #8670
- @sts-change made their first contribution in #8919
- @pascalandr made their first contribution in #9275
- @lonexreb made their first contribution in #9237
Full Changelog: v0.1.800-beta...v0.1.801-beta