Home / Library / Articles / Runner shootouts
Shootout
Ollama vs koboldcpp: which local runner fits your story?
Both load a model on your machine and serve it over a local API. Both plug straight into mi·do·na. One is built for developers who want a clean workflow. The other was built by and for people who roleplay. Here's what actually differs, and what honestly doesn't.
The one-line version
Ollama is the tidiest way to run models from a terminal... one command pulls a model, the server is already running, and everything stays out of your way. koboldcpp is a single executable that grew up inside the interactive-fiction community, and it shows: more sampler knobs, and browser access that just works out of the box.
If you're not sure which crowd you're in: people who reach for koboldcpp tend to know why. Everyone else is usually happier starting with Ollama.
The boring truth: they both do the job
Before the tiebreakers, the part most comparisons bury: these two are far more
alike than different. Both are free. Both run the same GGUF models on the same
hardware at roughly the same speed, because both sit on the same inference
lineage (llama.cpp underneath). Both serve an OpenAI-compatible API on
localhost. Both connect to mi·do·na the same way: pick the runner in the
connection panel, point it at the /v1 endpoint, done.
Whichever you install tonight, you'll be playing tonight. Everything below is about FIT, not capability. You cannot pick wrong.
Side by side
| Ollama | koboldcpp | |
|---|---|---|
| Interface | Command line | Launcher + bundled web UI |
| Install | Installer / one-liner | Single executable, no install |
| Getting a model | CLI pull from the Ollama library | Bring your own GGUF |
| Default port | 11434 | 5001 |
| OpenAI-compatible API | Yes | Yes |
| Browser access (CORS) | OLLAMA_ORIGINS | On by default |
| Sampler control | The basics | The full cabinet |
| GPU acceleration | Yes | Yes |
| Best for | Fast, scriptable workflow | Roleplay tinkerers |
Both connect to mi·do·na the same way: pick the runner in the connection
panel and point it at its /v1 endpoint. Only the port changes...
plus, for Ollama, one environment variable.
Getting a model loaded
Ollama wins the first five minutes. ollama run pulls a model from its
library, quantized and configured, and the server is already listening on
11434. You never touch a GGUF file or think about quantization formats unless
you want to. For someone who just wants a good 8B model talking tonight, this
is the shortest path that involves a terminal.
koboldcpp makes you find your own model... once. You download a GGUF from Hugging Face, point the launcher at it, and go. That's a real extra step on day one, but it cuts both ways: the roleplay scene lives on community finetunes, models tuned specifically for character consistency and prose, and most of those ship as GGUF files rather than entries in Ollama's library. (Ollama can load outside GGUFs too, via a Modelfile... it's just no longer the two-word version.) With koboldcpp, the model everyone on your favorite subreddit is raving about is a download and a click away.
The knobs: sampler control
This is the widest gap between the two, and the one storytellers feel most.
Samplers decide how a model picks its next word... the difference between prose that surprises you and prose that repeats the same three sentence rhythms until you close the tab. Ollama exposes the essentials: temperature, top-p, top-k, repeat penalty. Fine for Q&A, and honestly fine for a lot of stories.
koboldcpp exposes nearly everything the underlying engine supports: min-p, dynamic temperature, a longer tail of exotic samplers, plus control over the order they apply in. The roleplay community discovered years ago that a well-tuned min-p setup keeps long-form prose coherent and interesting in a way the classic settings struggle to match, and koboldcpp is where much of that tinkering happens first.
If you'd rather not learn what any of that means, mi·do·na's tuning panel speaks one dial, Imagination, to either runner. But the ceiling on what you can reach is higher with koboldcpp.
The long game: 200 turns in
Here's the thing about a good story: it gets long. Eventually it outgrows the model's context window, and SOMETHING has to decide what the model forgets.
koboldcpp's answer is context shift: when old turns fall off the top, it slides its memory forward instead of recomputing the whole prompt, so turn 201 responds about as fast as turn 20. It works over the API, not just in Kobold's own UI... but only while the start of the prompt stays untouched. Edit anything early, and it recomputes anyway.
Here's the honest part: with mi·do·na, that mostly doesn't matter. Context shift is a fix for front ends that handle long chats by silently dropping the oldest turns... which is also how stories forget who they are. mi·do·na doesn't play it that way. When a story runs long, it recaps and compacts the history ON PURPOSE, reseeding each character's voice so turn 201 still sounds like them. That deliberate rewrite is exactly the case context shift can't accelerate, and it's a trade we'd make every time: a brief pause at the recap beat, in exchange for a story that remembers itself.
So on this front, call it a wash. The long-game memory work happens in mi·do·na, whichever runner sits underneath.
Setup friction, honestly
Ollama's one gotcha is CORS. A browser app like mi·do·na can't reach it
until you set OLLAMA_ORIGINS. It's one environment variable and
our connection panel walks you through it, but it IS the step people miss.
koboldcpp's gotcha is choice. The launcher offers GPU layer counts, context sizes, and a screenful of options before your first token. The defaults are sane... you can click straight through... but it looks more intimidating than it is. Once running, browser access works with no extra configuration.
The verdict
Pick Ollama if you live in a terminal and want the fastest path from zero to a working model. It's clean, scriptable, and boring in the best way.
Pick koboldcpp if you want the knobs. Community finetunes and deep sampler control make it the tinkerer's pick, shaped by exactly the kind of character-driven play you're here for.
And if you're still torn... flip a coin. Either way, mi·do·na does the story work on top.
Ports and defaults reflect each project's documentation as of July 2026. Check the official docs if a release has moved since.
You bring the model. mi·do·na brings the story.
Either runner plugs straight into mi·do·na, right in your browser. Nothing you write ever leaves your machine.