# Open WebUI made me build my own LLM harness

> Source: <https://aggressivelyparaphrasing.me/2026/08/15/open-webui-made-me-build-my-own-llm-harness/?utm_source=rss&utm_medium=rss&utm_campaign=open-webui-made-me-build-my-own-llm-harness>
> Published: 2026-08-15 03:12:12+00:00

Open WebUI is a web app for chatting with LLMs, like chatgpt.com or claude.ai. I’ve run it for the last 6 months, and I’m done with it. I’m building my own replacement.

## Why I chose it

I wanted an open-source and self-hostable UI, so I don’t support the big AI companies. I chose Open WebUI because it seemed like the most feature-rich and least resource-hungry web UI for LLMs. The alternatives didn’t fit. LibreChat requires a stack of 6 containers. I wanted a single container. Most other alternatives are native desktop apps. I wanted something that syncs between my phone and my laptop.

## It’s a resource hog

Open WebUI takes nearly 1GB of RAM on my 2GB VPS. Its backend is Python, and its frontend is a single-page app, and both are heavy.

It also bundles Whisper (speech-to-text) and embedding models by default, which [makes even the slim container image nearly 1.5GB](https://hub.docker.com/r/openwebui/open-webui/tags).

## The bugs are awful

Over the last few months, I’ve hit some insane bugs.

[Model selector clears itself when you create a new chat](https://github.com/open-webui/open-webui/issues/26420)[Exponential growth of data](https://github.com/open-webui/open-webui/issues/23733)[The UI hard-refreshes on it’s own, despite being a SPA app](https://github.com/open-webui/open-webui/issues/22733)[Reasoning blocks aren’t rendered](https://github.com/open-webui/open-webui/issues/26776)

## The defaults and UX are awful

Without the bugs, I still hate the defaults. The configuration is unmanageable. Each model has to be configured independently.

When you start a chat, it tries to connect to every MCP server. Why? Some are slow, and I have a lot of them.

You can only have one Web Search provider at a time. I bounce between Kagi and Exa because they behave differently, so I added them as MCPs instead, which lets me use both.

I have to configure each model I use or switch to. Every time I try a new model, I configure it to have web search, each of my MCPs, Code Execution, and Native Function Calling. These are all disabled by default, and can only be enabled on one model at a time. It’s such an unsustainable way to manage your configuration!

The buttons don’t make sense.

CMD + R means “refresh the page”, right? Wrong! It resends your last message!

## Chat search does not work

I’ll often search the sidebar chat for something and can’t find the one I need.

## What am I going to do about it?

I won’t pay a big AI company for this — they already have plenty of money, and I don’t like the politics of any of them.

I tried looking at the open-source or smaller alternatives, and I’m dissatisfied.

You have the desktop apps like Jan or AnythingLLM, which aren’t versatile and are unavailable on my phone.

Web-hosted apps like Open WebUI or LibreChat are bloated.

I want something self-hostable, on the “cloud”, and lightweight. I’ll use an LLM provider in a data center, because it’s faster and more energy efficient.

So going to build my own: I’ll only use cheap open-weight models, and vibe-code my ideal LLM harness.
