Home / Library / Articles / Runner shootouts
Shootout
llama.cpp vs koboldcpp: the engine and its roleplay child
koboldcpp began as a fork of llama.cpp and never really left home: same engine, same GGUF models, same raw speed. What the Kobold side adds is packaging... a launcher, sane defaults, and years of roleplay-community instincts baked in. So which one belongs under YOUR stories?
The one-line version
llama.cpp is the reference engine: raw, fast-moving, every flag exposed, nothing bundled. koboldcpp wraps that same engine in a single executable with a launcher, friendly defaults, and a heritage in the interactive-fiction community. It's less "which is better" and more "how assembled do you want it."
The boring truth: they both do the job
This is the closest pairing in the whole shootout series. Same engine
lineage, same GGUF files, same speed on the same hardware. Both are free.
Both expose the full sampler cabinet... min-p, dynamic temperature, the long
tail. Both serve an OpenAI-compatible API with permissive CORS on by default,
which means both reach mi·do·na from the browser with ZERO extra setup: pick
the runner in the connection panel, point it at the /v1 endpoint,
done.
You are choosing packaging, not power.
Side by side
| llama.cpp | koboldcpp | |
|---|---|---|
| Interface | Command line | Launcher + bundled web UI |
| Install | Homebrew, binary, or build | Single executable, no install |
| Getting a model | Manual GGUF or -hf | Bring your own GGUF |
| Default port | 8080 | 5001 |
| OpenAI-compatible API | Yes | Yes |
| Browser access (CORS) | On by default | On by default |
| Sampler control | Everything, first | Everything, friendly |
| Long-chat handling | Standard | Context shift |
| Best for | Maximum control | Assembled and ready |
Day one
koboldcpp is one file. Download the executable, point the launcher at a GGUF, click. GPU layers and context size have sensible defaults you can accept blind. There is nothing to install and nothing to build... for getting a community roleplay finetune running before your tea cools, nothing else in this series beats it.
llama.cpp asks you to assemble it. Homebrew, a release binary, or a build
from source, then llama-server with flags you chose on purpose.
That's a real cost on day one and a real gift after: you're on the reference
implementation, updates land here FIRST, and every experimental feature is
yours the day it merges.
What Kobold adds, and whether you need it
The bundled Kobold Lite web UI and its roleplay presets are lovely... and behind mi·do·na, mostly idle. mi·do·na is your interface; the runner just serves tokens.
Context shift is the more interesting piece: when old turns fall off the top, koboldcpp slides its memory forward instead of recomputing the prompt. It works over the API, but only while the start of the prompt stays untouched... and mi·do·na manages long stories by DESIGN, recapping and compacting history with each character's voice reseeded, which rewrites exactly the part context shift needs frozen. Behind mi·do·na, treat it as a nice-to-have, not a tiebreaker.
What's left that DOES matter: koboldcpp's defaults are tuned by people who roleplay, so the out-of-box experience needs fewer decisions. llama.cpp gives you those same decisions as homework, with a wider range of answers.
The verdict
Pick koboldcpp if you want the engine pre-assembled by people who share your hobby. One file, sane defaults, playing tonight.
Pick llama.cpp if you want the source of truth. Newest samplers, newest model support, every flag... and no bundled anything to ignore.
Speed, models, and mi·do·na compatibility are a wash. 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.