Milind Daraniya

Open WebUI: Build Your Own Claude-Like AI Tool and Connect Multiple AI APIs

Published September 22nd, 2026 16 min read

Recently I was looking at tools that can provide a Claude-like AI interface in the browser, but without being locked to only one AI company.

For developers, this is useful because sometimes I want to use Claude, sometimes OpenAI, sometimes Gemini, sometimes DeepSeek, and for some work I also want to use a local Ollama model.

Instead of opening different websites for every model, there is another approach.

Use one self-hosted AI interface and connect different AI providers to it.

One tool I find interesting for this is Open WebUI.

Open WebUI is a browser-based AI interface that can connect to local models and cloud AI APIs from the same application. Its current documentation specifically supports OpenAI-compatible APIs and connections for providers such as Anthropic, Google, DeepSeek, Mistral, Groq, OpenRouter, Azure OpenAI, Bedrock and LiteLLM.

What is Open WebUI?

The simple way I understand it is:

Browser
   ↓
Open WebUI
   ↓
AI Provider
   ↓
Model

Instead of using:

Browser → ChatGPT
Browser → Claude
Browser → Gemini
Browser → DeepSeek
Browser → Local Ollama

I can have:

                ┌── OpenAI
                ├── Claude
Browser
    ↓           ├── Gemini
Open WebUI      ├── DeepSeek
                ├── OpenRouter
                ├── LiteLLM
                └── Ollama

The UI stays almost the same.

I just change the model or provider.

Why this is useful for developers

I don't always want the same model for every task.

For example:

Coding              → coding model
Large analysis      → reasoning model
Simple question     → cheaper model
Private data        → local model
Image generation    → image model
Embeddings          → embedding model

When everything is connected to one interface, switching models becomes much easier.

This is one reason multi-provider AI tools are becoming useful for development teams.

It feels similar to using Claude

The idea is not to clone the Claude website itself.

The idea is to get a similar browser-based AI workspace.

For example, I can have:

New Chat
    ↓
Select Model
    ↓
Upload Files
    ↓
Ask Question
    ↓
Get Streaming Response

Open WebUI also provides knowledge, tools and team-oriented features beyond a basic chat interface. Its documentation describes it as a broader AI platform rather than only a chat screen.

The important difference is that the actual AI model can come from another provider.

Connecting Claude

One of the interesting parts is that Claude models can be used through the Anthropic API.

Open WebUI's current documentation shows an Anthropic connection using:

URL:
https://api.anthropic.com/v1

Then I provide the Anthropic API key and select the model.

Claude is still running on Anthropic's infrastructure.

Open WebUI is only providing the interface and connection layer.

So I am not self-hosting Claude.

I am self-hosting the interface.

This distinction is important.

Connecting OpenAI

The same idea works with OpenAI.

I can connect the OpenAI API and select the available models from the interface.

Then:

Browser
   ↓
Open WebUI
   ↓
OpenAI API
   ↓
Selected Model

The actual model inference still happens through OpenAI.

Open WebUI also supports model discovery for compatible providers so the model list can appear directly in the UI.

Connecting Gemini

Gemini can also be connected.

Google provides an OpenAI-compatible endpoint for Gemini, although there are differences around tool calling compared with the OpenAI schema.

For basic chat, this can make integration simple.

For advanced tool usage, the provider's native API or a compatibility layer such as LiteLLM can be more appropriate.

This is something developers should understand.

OpenAI-compatible does not always mean feature-for-feature identical.

The basic request format may be compatible while advanced capabilities can still differ.

Connecting local Ollama models

This is one of my favorite parts.

I can run Ollama locally:

Laptop
  ↓
Ollama
  ↓
Local Model

Then connect Open WebUI to it.

Now I have:

Browser
   ↓
Open WebUI
   ↓
Ollama
   ↓
Local AI Model

I don't need a cloud API for that model.

This is useful for private experiments, coding, document processing and testing local models.

Open WebUI officially supports combining local and cloud models in the same installation.

What about providers that don't directly support the same API?

This is where LiteLLM becomes useful.

Suppose I have many different AI providers.

Instead of connecting my application separately to every provider, I can put a gateway in between.

For example:

                   ┌── OpenAI
                   ├── Anthropic
Open WebUI
     ↓             ├── Gemini
   LiteLLM          ├── Azure
     ↓              ├── Bedrock
                   └── Other providers

LiteLLM provides a unified OpenAI-compatible interface across many LLM providers and can translate provider-specific APIs into a common interface. Open WebUI's documentation currently describes LiteLLM as supporting 100+ LLM providers.

This is very interesting when building our own AI platform.

This is closer to an AI gateway architecture

Instead of thinking:

My Application
    ↓
One AI Provider

I can build:

My Application
       ↓
   AI Gateway
       ↓
 ┌─────┼─────┬─────┐
 ↓     ↓     ↓     ↓
OpenAI Claude Gemini Local

Then my application does not have to know every provider's API format.

It can talk to one standard API.

The gateway handles the provider-specific part.

This is the architecture I would consider for a serious SaaS application.

OpenRouter is another option

OpenRouter is also interesting because it provides access to many models through one API.

Open WebUI supports connecting to OpenRouter, and its current documentation recommends using a model allowlist because OpenRouter can expose a very large model catalog.

So another architecture is:

Open WebUI
    ↓
OpenRouter
    ↓
Many Models

This can be easier than creating a separate connection for every AI provider.

"Any AI API" needs one clarification

I would not say that Open WebUI can literally connect to every AI API automatically.

The important question is whether the provider exposes a supported protocol.

Open WebUI focuses heavily on standards such as the OpenAI Chat Completions protocol.

When an AI service follows that interface, connection is much easier.

When a provider uses a completely different proprietary API, I may need:

Custom Pipe
or
Middleware
or
LiteLLM
or
OpenRouter

Open WebUI itself explains this protocol-oriented approach in its documentation.

So the better way to think about it is:

One interface for many compatible AI backends.

Why I like this approach

Suppose I am developing a SaaS application.

Today I use:

Claude

Tomorrow I want to test:

OpenAI

Then I want to compare:

Gemini
DeepSeek
Local Ollama

I don't want to rewrite my complete application every time.

A standard API layer gives me:

Application
    ↓
Standard AI API
    ↓
Provider

This makes changing the model much easier.

It is also useful for AI cost management

Another practical advantage is cost control.

I don't need the most expensive model for every request.

For example:

Simple classification
        ↓
Cheaper model

Complex coding task
        ↓
Stronger coding model

Large reasoning task
        ↓
Reasoning model

Private internal data
        ↓
Local model

The important thing is that the application can choose the provider based on the task.

With a gateway architecture, model routing can become part of the system.

Example for a SaaS application

Imagine I build an ERP or CRM.

There is an AI assistant inside the application.

The request could be:

User:
Summarize today's sales.

The backend could route it to a relatively inexpensive model.

Another request:

Analyze this large business report
and identify unusual trends.

That request could go to a stronger reasoning model.

A private internal query could go to a local model.

The application can make that decision behind the scenes.

The architecture I would use

For a serious AI-enabled SaaS product, I would separate the UI from the AI provider layer.

Something like:

React / Mobile
      ↓
Laravel API
      ↓
AI Service
      ↓
AI Gateway
      ↓
┌─────┬──────┬──────┬──────┐
↓     ↓      ↓      ↓
OpenAI Claude Gemini Ollama

The Laravel application should not have provider-specific code spread across controllers.

Instead:

AIController
     ↓
AiService
     ↓
Provider Adapter / Gateway
     ↓
Selected Model

This keeps the architecture cleaner.

I would also keep API keys outside the frontend

This is very important.

I would not do:

React
  ↓
OpenAI API key

The browser should not contain a private provider key.

Instead:

React
   ↓
Laravel API
   ↓
AI Gateway
   ↓
Provider API

The key stays on the server.

This also gives me control over:

Authentication
Rate Limits
Usage Tracking
Model Selection
Cost Limits
Logging
Permissions

Multi-user AI becomes more interesting

For a SaaS system, I may eventually have:

Company A
   ↓
Claude API

Company B
   ↓
OpenAI API

Company C
   ↓
Local Model

Company D
   ↓
OpenRouter

The application can store configuration per company.

For example:

ai_provider
ai_model
api_key
temperature
max_tokens
system_prompt
status

The exact database structure depends on the product, but the important concept is:

AI configuration becomes part of tenant configuration.

One interface can also help model comparison

Sometimes I don't want to choose one model immediately.

I want to ask the same question to multiple models.

For example:

Question
   ↓
Claude
OpenAI
Gemini
DeepSeek
   ↓
Compare Results

LibreChat is another open-source option in this area and supports multi-provider conversations and side-by-side model comparison.

So Open WebUI is not the only project worth knowing.

But the overall architecture is what I find more important.

Open WebUI vs building everything myself

I could build my own interface using React.

For example:

React
Laravel
MySQL
Redis
AI APIs
File Storage
Streaming
Authentication
Usage Tracking

That gives complete control.

But it also means I have to build:

Chat UI
Streaming
Conversation history
Model selector
File uploads
Provider management
Prompt handling
Tool integration
User permissions

A mature AI frontend can save a lot of this work.

For an internal tool, it can be much faster to start with an existing platform.

For a commercial SaaS product, I may still build a custom frontend because I need complete control over the UX.

My practical setup

For local development, I would keep it simple:

Docker
   ↓
Open WebUI
   ↓
Ollama

Then add cloud APIs:

OpenAI
Claude
Gemini
DeepSeek
OpenRouter

And when multiple provider APIs become difficult to manage:

Open WebUI
      ↓
LiteLLM
      ↓
Multiple AI Providers

This gives me a flexible development environment.

The important part is the API abstraction

For me, the biggest lesson is not really Open WebUI.

It is AI provider abstraction.

Today the provider may be:

OpenAI

Tomorrow:

Anthropic

After that:

Google

Then maybe:

Local model

My application should not need major architectural changes every time.

That is why I prefer:

Application
     ↓
AI Abstraction
     ↓
Provider

instead of:

Application
     ↓
OpenAI-specific code

My takeaway

I think browser-based AI tools are becoming more useful for developers because we now have many good models instead of one model for everything.

For me, the ideal setup is not:

Only Claude

or:

Only ChatGPT

It is:

One AI interface
        +
Multiple AI providers
        +
Local models
        +
Standard API
        +
Easy model switching

Open WebUI is a good example of this approach. It can connect local and cloud models, supports OpenAI-compatible providers and can work with gateways such as LiteLLM and OpenRouter.

The bigger idea is something I would also use in my own software:

Don't tightly couple the application to one AI provider.

Keep an AI abstraction layer in between.

Then changing from Claude to OpenAI, Gemini, DeepSeek or a local model becomes a configuration and integration problem instead of a complete application rewrite.