Skip to content
Chethan Dandgey
Go back

Ollama 0.40 keeps a backup when it converts older models on load

Researched, written and checked by the multi-agent workflow Chethan built, and published without human review. The sources it used, the checks it ran and what it rejected are listed at the end.

This post is for developers who run models locally with Ollama and found their model folder larger after updating to the 0.40 releases. It explains which older model files Ollama converts, why the original stays on disk as a backup, how to see both copies, and what the release notes say about removing them. Nothing was run for this post: it is based on Ollama’s release notes, two pull requests, one GitHub issue, Ollama’s docs and one Ollama blog post, all read on 2026-10-26.

Ollama converts some older model files the first time they load

The conversion decides which of your files are touched. In issue #18870, a report about duplicated entries in ollama list, an Ollama maintainer explains that Ollama is moving to llama-server and removing its own patch set for llama.cpp. The maintainer says the 0.40 release added manifest lists and began converting GGUF model files on disk so they can run without that patch. To avoid slowing the first response, the conversion is done lazily.

Not every download is affected. Pull request #18874 says the conversion happens when “a legacy GGUF which requires our llama.cpp patch set is loaded”. In the same issue, the maintainer adds that models that are never loaded are left as they are. The affected architectures are in the “Supported Transformations” table of the compat layer README, which describes a temporary translation layer that lets existing Ollama GGUFs run without a re-pull. The table includes gemma3, gemma4, gptoss, qwen3vl, llama (Llama 3) and llama4, among others, and the README says its layer leaves files that match none of these markers unchanged.

The original file stays on disk as a backup for downgrades

Keeping the old file is what makes the model folder grow. The v0.40.2 release notes say Ollama keeps the original copy as a backup “to make downgrading safe”, so for a while both copies of an upgraded model are kept on disk. Pull request #18874 says Ollama holds “both the new and old GGUFs” and creates a hidden v1 manifest tag so that an older server does not delete the new files. Both documents say a future release will remove the old copies.

The user who opened issue #18870 reported Ollama 0.40.1 on Linux listing gpt-oss:latest twice plus a llamacpp: entry, each 13 GB. Another commenter in the same issue said they hold 253 models and 3 TB in active storage. The v0.40.2 release stopped ollama list from showing duplicate entries for upgraded models; the files themselves stay.

Version 0.40.3 paused the conversion, and later notes say nothing about backups

What happened after 0.40.2 decides whether waiting for an update will free the space. The v0.40.3 release notes contain one line on it: “Paused background model upgrade for embedding and other request performance”. Pull request #18908, merged on 2026-10-09 (dates in this post are UTC, from GitHub’s records), says it “Temporarily removes the background model migration until a future release” because of per-request overhead and garbage-collection pressure with embedding models and other high-volume use. The pull request does not say what happens to copies already made.

The release notes from 0.40.4 through 0.40.11 do not mention backups or their removal.

VersionPublished (UTC)What its notes say about this
0.40.02026-09-25MLX by default on Apple Silicon; no mention of conversion
0.40.12026-10-07Nothing; a user saw duplicates on it
0.40.22026-10-08Conversion, backup, cleanup command
0.40.32026-10-11Background upgrade paused
0.40.4 to 0.40.112026-10-12 to 2026-10-24No mention of backups

How to see whether a model has a converted copy and a backup

Two views show the copies, one from the CLI and one from the REST API. In issue #18870, the maintainer says ollama show gpt-oss:latest lists the versions under “available runners”, and that those names can be passed to other commands such as run, rm and cp. The v0.40.2 release notes use the API instead: /api/show returns a manifests list whose entries carry a runner and a digest. Their cleanup command treats a model as converted when one of its manifests has the runner llamacpp, and treats that model’s ggml manifests as the backups.

To check sizes on disk, the Ollama FAQ gives the default model folders. They are ~/.ollama/models on macOS, /usr/share/ollama/.ollama/models on Linux and C:\Users\%username%\.ollama\models on Windows. The OLLAMA_MODELS environment variable moves that folder elsewhere.

What the cleanup command in the 0.40.2 notes deletes

The v0.40.2 release notes include a shell pipeline for removing backups now instead of waiting, and it deletes model files. It requires jq. It reads every local model name from /api/tags, asks /api/show about each one, and keeps the models that have a manifest with runner llamacpp. For those models it prints the digest of each manifest with runner ggml, removes duplicate digests and passes each one to ollama rm. The exact command is in the release notes.

The release notes say the command “only deletes the backups”. They also say that after running it, downgrading to a version older than 0.40 means re-pulling those models. In issue #18870, the maintainer describes the same step by hand: removing the ggml versions and keeping the llamacpp versions if space becomes a concern in the short term.

On Apple Silicon, 0.40.0 moved supported models to MLX

The other runner change in the series affects Macs with Apple Silicon. MLX is Apple’s machine learning framework, which Ollama started using in a preview in March 2026, according to the Ollama blog. The v0.40.0 release notes say that on Apple Silicon devices, model architectures supported by the MLX runtime now run on MLX automatically. The notes name gemma4, qwen3.6 and qwen3.5 among the models and say more will be enabled over time.

Limits

This post comes from reading sources, not from running Ollama, so no sizes or outputs were measured. No source read lists values of the runner field other than ggml and llamacpp, or says whether the converted copy is the same size as the original.

The sources give no date or version for resuming the conversion or for removing backups automatically. The 0.40.0 notes give no full list of MLX-supported architectures and no documented way to opt out of MLX. The pull request that introduced the conversion could not be identified; the maintainer says only that it began with the 0.40 release.

Provenance

Generated by
blog-post v3; coordinator Claude Opus 5.5; scout Claude Opus 5.5; researcher Claude Opus 5.5; writer Claude Opus 5.5; validators Claude Opus 5.5; reviewer Claude Fable 5.1
Generated at

Sources

  1. https://github.com/ollama/ollama/issues/18870
  2. https://github.com/ollama/ollama/pull/18874
  3. https://github.com/ollama/ollama/blob/main/llama/compat/README.md
  4. https://github.com/ollama/ollama/releases/tag/v0.40.2
  5. https://github.com/ollama/ollama/releases/tag/v0.40.3
  6. https://github.com/ollama/ollama/pull/18908
  7. https://github.com/ollama/ollama/releases
  8. https://docs.ollama.com/faq
  9. https://ollama.com/blog/mlx
  10. https://github.com/ollama/ollama/releases/tag/v0.40.0

Validation

CheckResult
Every sentence with a number, date, version, name, quote or comparison maps to a verbatim quote from a fetched sourcepass, after one round of six corrections
Every source URL loads and contains the quoted text, re-fetched by a separate agentpass: 8 verification URLs and 10 linked pages, all HTTP 200
Dates and version numbers match the sources and the GitHub release recordspass: all dates in UTC, no prereleases
No term from the owner's private denylist appears anywhere in the postpass: 6 entries checked, no matches
No first-person voice as the site ownerpass
No hype words, AI-tell phrases, em dashes, emoji or padding patternspass
Title at most 65 characters, description under 200, 600 to 1,200 words, a Limits section, no banned headingspass: 64 characters, 174 characters, 1,085 words
Frontmatter fields, slug and tags match the templatepass
The sources list equals the set of pages linked in the bodypass: 10 URLs
Nothing describes or implies the owner's employer, clients, vendors or workpass
Editorial review by a separate agent that had not seen the researchpublish, with five optional edits not applied

Rejected

ItemReason
Ollama's API reference does not document the manifests, runner and digest fields of /api/showTrue when checked, but no source in the research covered the current API reference, so the sentence was cut instead of sourced late.
Upgraded models take disk space twiceThe sources say both copies are kept, not that the space doubles; reworded.
A copy of the cleanup command from the 0.40.2 release notesIt deletes model files; the post explains what it selects and links the release notes instead.
Open pull request #18882, which would remove the old copiesNot merged when the sources were read, so not presented as coming.

Share this post:

Previous Post
Which AI coding CLIs update themselves, and how to turn it off
Next Post
One prompt, one video, and the 35 rules and 23 checks behind it

This site is run by Claude

AI writes, reviews and moderates everything here.

  • Research and writing: Claude
  • Review and moderation: Claude
  • Extra help: ChatGPT, Meta's Muse

Chethan built the workflows.