llama.cpp 1.0: what breaks and how to upgrade
llama.cpp 1.0 adopts semantic versioning, removes 36 functions from its C API and tightens llama-server defaults. What breaks and how to upgrade safely.
By Shaheer Q. · · 8 min read
On Friday 13 November, llama.cpp tagged v1.0.0, together with v1.0.0 of ggml, the tensor library underneath it. From this release the project follows semantic versioning: a major version bump means a breaking change to the public C API. To get to a clean starting point, 1.0 removes 36 functions that were already marked deprecated, drops one command-line option, and makes llama-server stricter about what it will reach and who may call it.
If you only run the binaries, most of this is a change of defaults. If your code or your bindings call llama.h, you may have a build to fix. Here is what changed, what replaces it, and how to check your own code before you upgrade.
What 1.0 means
The launch post, published by the llama.cpp team at Hugging Face, sets out the rules for every ggml-org project that uses semantic versioning:
| Bump | When |
|---|---|
| Major | "Breaking change to the public C API in ./include" |
| Minor | "Backward-compatible feature, backend updates, model support, or API addition" |
| Patch | "Bug fix with no API change" |
The post adds that "both llama.cpp and ggml will reflect API and ABI incompatibilities with major-version bumps." It does not say how long the 1.x line will be supported, and it lists no migration steps. Those are in the pull requests, covered below.
Two details of the release process matter in practice. Both come from the project's release and versioning document, which the release notes link:
- The numbered nightly builds continue. Tags such as
b12377are development builds frommaster, cut several times a day. ThevX.Y.Ztags are the official releases, and a release tag is only created when llama.cpp's internal copy of ggml is identical to the released ggml. That guarantee is what lets a package manager link llama.cpp against a system-wide ggml. - Not every channel ships the release. The document says Homebrew builds from the release tag, while winget and the project's own
llama.appinstaller publish the nightly builds. On 14 November, Homebrew's formula listed 1.0.0 as its stable version.
The v1.0.0 release page itself carries no binaries. Its only asset is a text file, and the notes point to nightly build b12359 for downloads.
To build the release yourself, check out the tag and turn off the development flag, which is on by default and appends -dev to the version:
git clone --branch v1.0.0 --depth 1 https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DLLAMA_BUILD_IS_DEV=OFF
cmake --build build --config Release
What breaks if you call the C API
One pull request, #30565, did the pruning. It removed llama_set_warmup and all 35 other functions marked DEPRECATED in llama.h. The replacements below are the ones named in the deprecation messages that the pull request deleted.
| Removed in 1.0 | Use instead |
|---|---|
llama_load_model_from_file | llama_model_load_from_file |
llama_free_model | llama_model_free |
llama_new_context_with_model | llama_init_from_model |
llama_n_ctx_train, llama_n_embd, llama_n_layer, llama_n_head | llama_model_n_ctx_train, llama_model_n_embd, llama_model_n_layer, llama_model_n_head |
llama_n_vocab | llama_vocab_n_tokens |
llama_get_state_size | llama_state_get_size |
llama_copy_state_data | llama_state_get_data |
llama_set_state_data | llama_state_set_data |
llama_load_session_file, llama_save_session_file | llama_state_load_file, llama_state_save_file |
llama_token_get_text, llama_token_get_score, llama_token_get_attr | llama_vocab_get_text, llama_vocab_get_score, llama_vocab_get_attr |
llama_token_is_eog, llama_token_is_control | llama_vocab_is_eog, llama_vocab_is_control |
llama_token_bos, _eos, _eot, _sep, _nl, _pad | llama_vocab_bos, _eos, _eot, _sep, _nl, _pad |
llama_token_fim_pre, _suf, _mid, _pad, _rep, _sep | llama_vocab_fim_pre, _suf, _mid, _pad, _rep, _sep |
llama_token_cls, llama_vocab_cls | llama_vocab_bos (the header noted that CLS is equivalent to BOS) |
llama_add_bos_token, llama_add_eos_token | llama_vocab_get_add_bos, llama_vocab_get_add_eos |
llama_sampler_init_grammar_lazy | llama_sampler_init_grammar_lazy_patterns |
llama_set_warmup | No replacement. The deprecation note said user code should do warmup runs manually |
Four more changes can break a build or a script:
defrag_tholdis gone fromllama_context_params. Removing a field changes the layout of the struct, so anything compiled against an older header must be recompiled, not just relinked.- The
-dt, --defrag-tholdoption is gone. Before 1.0 it did nothing except print a deprecation warning. Remove it from launch scripts and service files. clip.his removed. The release notes say its model code was consolidated intomtmd, the multimodal library.- One rename in the speculative decoding API. 18 functions for NextN and draft models moved from the internal
llama-ext.hheader into the publicllama.h, andllama_set_embd_state_srcbecamellama_set_ctx_state_src.
To find the removed names in your own code, search for them before you upgrade:
grep -rnE 'llama_(load_model_from_file|free_model|new_context_with_model|n_(ctx_train|embd|layer|head|vocab)|get_state_size|copy_state_data|set_state_data|(load|save)_session_file|set_warmup|token_(get_(text|score|attr)|is_(eog|control)|bos|eos|eot|cls|sep|nl|pad|fim_(pre|suf|mid|pad|rep|sep))|add_(bos|eos)_token|vocab_cls|sampler_init_grammar_lazy)\(' src/
The pattern matches all 36 removed functions and skips the current names that look similar, such as llama_token_to_piece and llama_sampler_init_grammar_lazy_patterns. If you compile with warnings on, you have probably seen most of these flagged as deprecated already.
If you use llama.cpp through a language binding or through another application, you get these changes when that project moves to 1.0, not before. The launch post names no downstream projects and gives them no timeline, so check the release notes of the tool you actually install. For what running a large open model on your own hardware really demands in memory, yesterday's post on two open-weight releases has the numbers.
What changes if you run llama-server
The server got a round of hardening in the three days before the tag. Several things that worked before now need a flag, and one has no flag at all.
| Before 1.0 | In 1.0 |
|---|---|
Tools or MCP enabled on a non-loopback --host with no API key | Refused with an error. Set an API key, or opt in with --allow-unauthenticated-tools |
| A chat request with a media URL on your LAN, such as a file on a NAS | Blocked. Opt in with --media-allow-private-urls |
The web UI's CORS proxy reaching an MCP server on localhost or the LAN | Not possible. The proxy only reaches public addresses, and the pull request says there is no escape hatch |
--cors-origins with a specific origin | Now enforced properly, including the port. Foreign and null origins are rejected |
The reasoning is in #32115: the server was designed on the assumption that users would sandbox it, but "many deployments are now run directly on local computer." A server on your laptop that will fetch any URL it is handed can be pointed at your router or your NAS. The companion pull request, #32113, describes its own changes as hardening and not as fixes for a known vulnerability, and admits they cost some convenience.
Under the new origin rules in #32098, same-origin requests, allowed origins and non-browser clients still get through. Scripts that call the API with curl or an SDK should not notice. A browser page on another origin will.
Three smaller server changes from the release notes:
HF_TOKENis only sent to huggingface.co hosts. A model URL on another host no longer receives your token.- MCP tool calls are cancelled when the client disconnects or times out, and the MCP server is told.
- A new
/v1/audio/speechendpoint follows the OpenAI API shape for text to speech.
If you use the ggml RPC backend to spread a model across machines, upgrade every machine together. The ggml 1.0.0 notes bump the RPC protocol to v9 and say incompatible peers are rejected.
What is new besides the cleanup
The release is not only removals. From the release notes:
- FP8 KV caches, selected with
-ctkand-ctv f8_e4m3. The notes give no memory or quality figures, so none are repeated here. - A host-memory cache for mixture-of-experts weights, with a configurable share kept on the CPU, exposed as
moe_cache_sizeandmoe_cache_cpu_shareinllama_context_params. - New model support: the Kimi-K3.1-Pro, Ripple-65B-Preview and xing4_0 text architectures, drama-3 text to speech, and MageVL-Cowork and Kimi-K3.1 vision.
- A redesigned web UI with chat groups, a live-preview markdown editor and a layout built for phones.
The launch post says the project supports more than 150 model architecture variants, three and a half years after it started.
One detail from the pruning pull request is worth a line. The project requires contributors to disclose AI use, and #30565 does: it lists a DeepSeek model in GGUF format, run through llama.cpp on a Mac Studio. The change that cleaned up the API for 1.0 was written with the help of a model running on the software being cleaned up. That is a smaller claim than the one AWS made earlier this week about its emulator, where no human reviewed the code. Here a named maintainer opened the pull request and it went through the project's normal review.
The short version
- llama.cpp 1.0.0 shipped on 13 November with ggml 1.0.0. Major versions now mean a breaking change to the public C API.
- If you call
llama.h: 36 deprecated functions are gone, along withdefrag_thold,--defrag-tholdandclip.h. Run the search above, rename, and recompile. - If you run
llama-server: tools on a non-loopback host need an API key or--allow-unauthenticated-tools, private media URLs need--media-allow-private-urls, and the CORS proxy no longer reaches local addresses. - If you use a binding or a wrapper: nothing changes until that project updates. Check its release notes.
- To get 1.0: Homebrew has it, or build the
v1.0.0tag with-DLLAMA_BUILD_IS_DEV=OFF. The numbered nightly builds continue alongside.
Frequently asked questions
Is llama.cpp 1.0 a breaking release?
Yes, for code that calls the C API. Version 1.0.0 removes 36 functions from llama.h that were already marked deprecated, drops the defrag_thold field and the --defrag-thold option, and removes clip.h. Each removed function except llama_set_warmup has a named replacement.
What replaces llama_load_model_from_file in llama.cpp 1.0?
llama_model_load_from_file. The related renames are llama_free_model to llama_model_free and llama_new_context_with_model to llama_init_from_model. The old names carried deprecation warnings before 1.0 and no longer exist in llama.h.
Does llama.cpp 1.0 change how llama-server behaves?
Yes. Tools or MCP on a non-loopback host without an API key are now refused unless you pass --allow-unauthenticated-tools, media URLs on private addresses need --media-allow-private-urls, and the web UI's CORS proxy can only reach public addresses.
How do I install llama.cpp 1.0.0?
Homebrew's llama.cpp formula listed 1.0.0 as stable on 14 November 2026. To build it yourself, check out the v1.0.0 tag and configure CMake with -DLLAMA_BUILD_IS_DEV=OFF. The GitHub release page has no binaries of its own and links to a nightly build instead.