Skip to Content

Local AI Runners: Which One to Pick

The most important thing to know: **Ollama, LM Studio, Jan, KoboldCpp and Docker Model Runner all use the same engine** — llama.cpp, and MLX on a Mac. They do not differ in speed but in the packaging and in the **defaults**. And the defaults are exactly where the trap is: Ollama **truncates at 4,096 tokens** out of the box, even when the model could handle 256k.
September 13, 2026 by
Local AI Runners: Which One to Pick
Krisztian Eyssen, Krisztian Eyssen

This article uses product names

The blog usually avoids naming vendors — but this post is explicitly a comparison of tools, and there the name is the information. Every status here is as of 13 September 2026, verified.

Who is alive, who has died

Runner Version / status Licence
llama.cpp b10456 (2026-08-17), several releases a day MIT
Ollama v0.34.0 (2026-09-05) MIT (core)
LM Studio 0.4.24 — splits into several products closed, but free at work
vLLM v0.28.0 Apache 2.0
MLX / mlx-lm 0.32.x, Apple MIT
Jan v0.8.4 open
llamafile v0.10.5 (2026-08-05) — changed hands Apache 2.0
KoboldCpp v1.120 (2026-08-29) AGPL
text-generation-webui v4.9 (2026-05-20) AGPL
Docker Model Runner GA since 2025-09-18 open
GPT4All v3.10.0 (2025-02-25) MIT

The bottom of that list is the most important part: GPT4All has not had a release in 19 months. An August 2025 issue, still unanswered, says in so many words that there is no support for newer models. If someone recommends GPT4All to you in 2026, that guide is old too.

Three name changes worth knowing about:

  1. LM Studio has split. Today "LM Studio" is the desktop application; the headless background service is llmster; the command-line tool is lms; and there is an agent called Bionic. Anyone writing about "LM Studio" in 2026 has to say which one they mean.
  2. llamafile is no longer at Mozilla but has been in the mozilla.ai organisation since October 2025. For existing users nothing changed.
  3. Ollama is no longer local only. In July 2026 it raised 65 million dollars (88 million in total), it has a cloud service priced by GPU time, and by its own account it serves 8.9 million developers a month. In 2026 the name means two things, and only one of them is local.

Where they really differ

Ollama LM Studio llama.cpp vLLM Jan Docker Model Runner
Install one command GUI installer build or binary Docker / Python installer docker model run
Interface CLI + app GUI + CLI + headless CLI + web UI API only GUI CLI + Docker UI
Format GGUF, MLX too on a Mac GGUF + MLX GGUF HF-native, GGUF, FP8 GGUF + cloud GGUF as a container image
Concurrency weak moderate good excellent weak llama.cpp-level
Licence MIT closed MIT Apache 2.0 open open
Who for "just work" GUI and Mac every switch you serve others local + cloud in one app you already containerise

vLLM is the only one that is architecturally different — and the only one built for multi-user serving. The rest are the same engine in different wrapping.

The defaults that catch you out

This is the most useful part of the article. All of it comes from primary documentation.

Ollama:

Setting Default How to override it
Context window 4,096 tokens OLLAMA_CONTEXT_LENGTH, or num_ctx
Keeping the model in memory 5 minutes keep_alive
Network binding 127.0.0.1:11434 OLLAMA_HOST
KV cache type f16 OLLAMA_KV_CACHE_TYPE
Own quantization only 3 types out of 30 —

The llama.cpp server: the context window defaults to 0, which means "loaded from the model".

Here is the sharpest contrast in the whole article:

OLLAMA TRUNCATES at 4096 tokens by default,
even when the model could handle 256k.
-> Your text disappears SILENTLY.

LLAMA.CPP tries to allocate the model's FULL
advertised context by default.
-> If there is no memory for it, it fails LOUDLY.

Two opposite defaults,
two opposite failure modes.

The silent one is the more insidious: the model does not error, it just suddenly fails to remember something from three steps ago. And people blame the model, not the setting.

LM Studio: the server listens on port 1234; a loaded model stays in memory for 60 minutes; and "Auto-Evict" is on by default, so at most one model is loaded at a time. For commercial use no licence has been required since July 2025.

text-generation-webui: according to the May 2026 release notes, browser access is restricted "to the local machine only by default from now on". Which means it was not, until then — anyone running an older version may have had an API reachable from any website.

Is there a measurable speed difference?

Yes, but not where people look for it.

For a single user, barely any. In one comparison, on the same hardware with the same model, vLLM reached 793 tokens per second and Ollama 41 — but only under parallel load. In single-user mode both sat around 130-180 tokens/s, effectively identical. The nineteen-fold gap comes from continuous batching, not from the engine: under parallel requests, a runner without batching queues them up, and its total throughput is divided among the users.

On a Mac there is a real gap, though, and it comes from an academic measurement. A 2026 study on a unified-memory machine, with four-bit models:

Model MLX-based runner llama.cpp Speed-up
0.6 billion parameters 525.5 281.5 1.87×
8 billion 93.3 76.9 1.21×
30 billion 121.8 85.1 1.43×

On a Mac, MLX-based runners are 20-90% faster — the gap is not even; it was largest on the smallest model. The explanation is native handling of unified memory and copy-free tensor operations.

And the backend library matters too. On another manufacturer's hardware, on the same machine with the same model, the two available backend libraries differed by 2.6× in prompt processing — and at an eight-thousand-token context the order reversed for generation.

So the question "which runner is faster" often really means: "which backend library was compiled into it".

The part that gets less airtime: security

There is an unspoken dimension to picking a runner.

  • Every llama.cpp-based runner inherits the bugs of the model-format parser. Serious vulnerabilities were found in 2024, 2025 and 2026, including ones that can lead to code execution.
  • Ollama's container image listens on every network interface by default — unlike the native install, which is only reachable from the machine itself. In a 2024 vulnerability that was exactly the aggravating factor, and more than a thousand exposed instances were found.
  • A model file is code, not data. In early 2025 two malicious models were found on a popular sharing site, having got past the security scanner.
  • The public question about Ollama's telemetry has been open without an answer since February 2024. The documentation says only that they do not see prompts — which is not the same as sending nothing.

That side of it is what the private AI post covers, in more depth.

Which one should you pick?

"IT SHOULD JUST WORK"
-> Ollama. One command and it runs.
   First thing to do: change the context window.

YOU WANT A GUI, AND YOU ARE ON A MAC
-> LM Studio. With MLX support, which on a Mac
   is measurably faster.

YOU WANT EVERY SWITCH
-> llama.cpp. The engine itself, directly.

YOU SERVE OTHERS (several users)
-> vLLM. A 19-fold difference under parallel
   load - this is the only one built for it.

LOCAL AND CLOUD IN ONE APP
-> Jan.

YOU ALREADY USE CONTAINERS
-> Docker Model Runner.

The start-up checklist

Six items, every one of them following from primary documentation:

1. SET THE CONTEXT WINDOW
   The default is either too small (4096) or too
   big ("from the model"). Neither is what you want.

2. KV CACHE TO 8 BITS IF THE CONTEXT IS LONG
   Half the memory, unmeasurable quality loss.

3. CHECK WHAT THE SERVER BINDS TO
   The native install binds to loopback, the
   container image to EVERY interface. That matters.

4. CHECK THE UNLOAD TIMER
   5 minutes or 60 minutes. This decides whether
   the first request will be slow.

5. UPDATE THE RUNNER
   The model-format parser had several serious
   vulnerabilities between 2024 and 2026.

6. ONLY DOWNLOAD MODELS FROM TRUSTED SOURCES
   A model file can contain executable code.

The first item takes five seconds, and it heads off the most common disappointment.

Common misconceptions

  • "Runner X is faster than runner Y." In single-user mode most of them run the same engine, and in measurement they perform essentially identically. The difference shows up under parallel load and on a Mac.
  • "GPT4All is a good starting point." It has not had a release since February 2025, and there is no support for newer models.
  • "Ollama is local, so it is private." In 2026 the name means both a local runner and a cloud service. Only one of them is local.
  • "The factory settings will be fine." One runner truncates at 4,096 tokens, the other would allocate the full context. Neither is what you want.
  • "The size of the context window depends on the model." What the model is capable of, yes. What you actually use is decided by the runner's setting.
  • "A downloaded model is just data." In a documented case it can contain executable code that runs on load.

What to take away

Picking a runner is not a speed decision, because most of the field runs the same engine. It is a decision about packaging, defaults and working style.

Three things that really do matter: on a Mac the MLX-based runner is measurably faster (20-90%); serving several users needs different software (a nineteen-fold difference under parallel load); and the default context window is wrong everywhere — either too small or too big.

If you do one single thing after installing: set the context window. Those five seconds are worth more than the choice between runners. Sizing is what the hardware for local AI post works through, and quantization is the subject of the quantization piece, with the measurements.

Local AI Runners: Which One to Pick
Krisztian Eyssen, Krisztian Eyssen September 13, 2026
Share this post
Archive