Get up and running with Kimi-K2.5, GLM-5, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
One is the inference engine. The other is the friendly wrapper built on top of it. Most people asking this question actually want to know when the wrapper stops being enough.
Turn what you learned into a concrete stack decision.
Want the shortlist in your inbox?
Subscribe for the weekly brief that turns new AI noise into the few tools and workflows worth testing.
Get up and running with Kimi-K2.5, GLM-5, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
Guide
n8n vs Dify: Which One Should Run Your AI Agent Workflows
One is a workflow automation platform that grew an AI agent node. The other is an LLM app builder that grew a workflow canvas. The order those words come in is the whole decision.
Guide
Free Claude Code: Run It in Terminal, VSCode, or Discord
Claude Code hit 20k stars after someone open-sourced it. Here's what you actually get.
Guide
5 Free Repos Taking On Paid Dev Tools (May Week 2)
Bloomberg terminal at $0, Claude Code for free, and OSINT on 3000+ sites.
LLM inference in C/C++
"Ollama vs llama.cpp" isn't really a fair fight, because it's not two competitors — it's a wrapper and the engine it wraps. Ollama lists llama.cpp directly in its own README as a supported backend. The real question hiding under this search is almost never "which project is better," it's "do I need the raw engine, or does the friendly CLI on top of it already cover my case."
Short version: if you want to ollama run a model in one command, get a local OpenAI-compatible API with zero config, and not think about quantization formats or build flags — use Ollama. If you need to squeeze out the last bit of performance on unusual hardware, control exactly which quantization and backend (CUDA, Metal, Vulkan, SYCL, a Raspberry Pi's NEON instructions) gets used, or embed inference directly into your own C/C++ application, use llama.cpp directly.
llama.cpp (122,000+ GitHub stars, MIT licensed) describes itself plainly: "LLM inference in C/C++." It's built on top of the ggml tensor library and exists to run LLM (and now VLM) inference "with minimal setup and state-of-the-art performance on a wide range of hardware" — CPU (ARM NEON, x86 AVX/AVX2/AVX512, RISC-V), GPU (NVIDIA CUDA, AMD HIP, Apple Metal, Vulkan, Intel SYCL, WebGPU), and more exotic targets like Ascend NPU and IBM Z. It supports 1.5-bit through 8-bit integer quantization and ships its own OpenAI-compatible server (llama-server) with a built-in web UI. It's a library and a set of CLI tools — you point it at a GGUF model file and it runs.
Ollama (177,000+ GitHub stars, MIT licensed) is the layer that makes the above not feel like assembling a research project. ollama run gemma3 pulls the model, picks a sane quantization for your hardware, starts a local server, and drops you into a chat prompt — one command, no manual GGUF hunting, no backend flags to figure out. Ollama's own documentation names llama.cpp as one of its supported inference backends: the model library, the Modelfile packaging format, the REST API, and the desktop/CLI experience are Ollama's contribution on top of it.
Put plainly: llama.cpp answers "how do I run this model as fast as possible on this specific hardware." Ollama answers "how do I run a model right now without reading documentation."
If you're prototyping an agent locally, or shipping a product where end users need a model running on their own machine with the least possible setup friction, Ollama's one-command model pulls and REST API (localhost:11434/api/generate, and an OpenAI-compatible endpoint) mean you're calling an API, not managing model files. Its model library handles quantization selection for you, which matters if your users aren't going to know what Q4_K_M means.
If you're building the inference layer itself — a custom serving stack, an embedded application that needs llama.cpp's C API directly, or you're on hardware Ollama doesn't tune for out of the box (a specific quantization scheme, a niche GPU backend, a headless server where you want to strip out everything except the inference loop) — going straight to llama.cpp removes a layer of abstraction that can otherwise get in the way. Every model Ollama runs is, underneath, a GGUF file llama.cpp knows how to execute; the question is only whether you want to manage that file yourself.
Say the task is "run an open-weight model locally and expose it as an API for a small internal tool."
With Ollama, this is three commands: ollama pull <model>, ollama serve (often already running as a background service), then your app calls http://localhost:11434/api/chat. Model storage, quantization choice, and context handling are managed for you. If you need a different model tomorrow, it's one more ollama pull.
With llama.cpp, you'd download or convert a GGUF file yourself, choose a quantization level explicitly based on your RAM/VRAM budget, build (or download a prebuilt binary) with the right backend flags for your hardware (-DGGML_CUDA=ON, -DGGML_METAL=ON, etc.), then run llama-server pointed at that file, which gives you the same OpenAI-compatible API surface. More steps, but every one of them is a knob you control directly instead of one Ollama picked for you.
Both end at "an OpenAI-compatible local API." The difference is entirely in how much of the path between "model exists" and "API is running" you want to own.
| Tool | Core unit | Best for | Setup effort | |---|---|---|---| | Ollama | Managed model + one-command runtime | Fast local setup, non-experts, prototyping | Minimal — single command | | llama.cpp | Inference engine (C/C++, GGUF) | Maximum hardware control, embedding inference in your own app | Manual — build flags, quantization choice | | Open WebUI | Chat UI layer | A ChatGPT-style interface on top of Ollama or an OpenAI-compatible API | Minimal — points at an existing backend | | LM Studio | Desktop app | GUI-first local model management, no terminal | Minimal — GUI installer |
If the honest answer is "I just want to try a local model today," start with Ollama — you can always drop to llama.cpp later for the same GGUF files if you hit a wall Ollama's defaults don't clear. Going the other direction (starting on raw llama.cpp for a quick prototype) is rarely worth the extra setup time.
Assuming Ollama and llama.cpp are competing projects. They're not peers — Ollama depends on llama.cpp as one of its backends. Comparing them as if picking a winner misses that using Ollama already means llama.cpp is doing work underneath, most of the time.
Reaching for llama.cpp directly "for performance" without a specific hardware target in mind. Ollama already selects sane defaults for common hardware. The manual control llama.cpp offers only pays off when you have a concrete reason to override those defaults — an unusual GPU backend, a memory budget Ollama's default quantization doesn't fit, or embedding inference in your own binary.
Forgetting both are still just running the model you gave them. Neither tool changes what the underlying model can do — output quality, context length, and reasoning ability are the model's, not the runtime's. Picking between them affects setup friction and hardware control, not model capability.
Yes — Ollama's own README lists llama.cpp among its supported backends. For most models, running them through Ollama means llama.cpp is doing the actual inference; Ollama adds model management, an API, and a CLI on top.
Yes, in the same GGUF format llama.cpp expects. Ollama wraps GGUF files in its own Modelfile packaging for its model library, but the underlying weight format both tools ultimately execute is the same one llama.cpp defined.
Ollama, without much debate — one install, one command, a working local API. llama.cpp's manual build/quantization/backend-flag process is aimed at people who specifically want that level of control, not people who just want a model running.
→ Ask the index what to build your local AI stack
→ Free credits for these tools
Written by McKlaud AI. Want to know which AI tools actually fit your business? Get a free AI audit.