---
title: "Deploy Open Intelligent UI"
description: "Open-source ChatGPT-style UI: answers stream as interactive interface."
category: "AI/ML"
url: https://railway.com/deploy/open-intelligent-ui
---

# Deploy Open Intelligent UI

Open-source ChatGPT-style UI: answers stream as interactive interface.

**[Deploy Open Intelligent UI on Railway](https://railway.com/template/open-intelligent-ui)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/open-intelligent-ui/manifest.json

- **Creator:** NaNomicon
- **Category:** AI/ML
- **Total deploys:** 1

## Template content

### Open Intelligent UI

- **Source:** thesysdev/open-intelligent-ui
- **Health check:** /

## Documentation

# Deploy and Host Open Intelligent UI on Railway

[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/open-intelligent-ui?utm_medium=integration&utm_source=button&utm_campaign=open-intelligent-ui)

This template deploys [Open Intelligent UI](https://github.com/thesysdev/open-intelligent-ui), an open-source implementation of the "Intelligent UI" pattern introduced in ChatGPT, built on [OpenUI](https://openui.com). Ask "I'm in San Francisco for a day, plan a sightseeing route" and the answer arrives as a map, photos and an itinerary you can edit, not a paragraph. One Next.js service, no database, and you bring your own model key.

## About Hosting Open Intelligent UI

One service, `web`. Railpack reads `engines.node` from `package.json` and provisions Node 24, runs `npm run build`, then `next start`. There is no Dockerfile step and no image to pin: the build comes from the upstream repository on every deploy.

No database and no volume are attached. Conversations are stored in the browser's local storage, so a redeploy loses nothing on the server and there is no data to back up or migrate. Runtime calls leave the container for three things: your model endpoint, the public OSRM demo server for street routes, and Wikipedia/Wikimedia for photo search.

One model path is active at a time, chosen at boot by what is set: if `LLM_BASE_URL` has a value, the app talks to that OpenAI-compatible endpoint; otherwise, if `MODEL_PROVIDER=ollama` or `OLLAMA_MODEL` is set, it talks to Ollama; otherwise it falls back to the OpenUI Gateway at `https://api.thesys.dev/v1/embed`. Both path selectors ship empty, so **the gateway path is what runs until you set `LLM_BASE_URL`**. The two keys are alternatives: set `THESYS_API_KEY`, or set `LLM_BASE_URL` and `LLM_API_KEY` together, never both. If neither is set the app says so on the first message rather than failing silently.

## Why Deploy Open Intelligent UI

Running it locally means Node 24, an install of roughly 400 packages, and a key. Deploying gives you a URL you can open on a phone or hand to someone else, with the model key held server-side instead of pasted into a browser session. It is also the shortest way to see whether streaming UI instead of streaming text is worth building into your own product, before you commit to a component library.

## Common Use Cases

- Try generative UI hands-on, from a URL, without a local toolchain
- Demo "answers that render as interface" to a client or a team
- A starting point for a vertical app: keep the streaming loop, replace the component library
- Compare how different models lay out the same answer, since the layout is written by the model at runtime
- A sandbox for prompt and tool changes against the OpenUI spec

## Dependencies for Open Intelligent UI Hosting

- An OpenAI-compatible model endpoint, or an OpenUI Cloud key. Nothing else is required.
- No database, no object storage, no volume.
- Outbound network access to your model endpoint, `router.project-osrm.org`, and the Wikimedia APIs.

### Deployment Dependencies

- [Upstream repository](https://github.com/thesysdev/open-intelligent-ui) (MIT)
- [OpenUI](https://github.com/thesysdev/openui), the generative UI standard the app renders
- [Railway healthchecks](https://docs.railway.com/reference/healthchecks)
- [Railway variables](https://docs.railway.com/reference/variables)

### Implementation Details

**Variables**

The two API keys are alternatives, never both. Which one matters depends on `LLM_BASE_URL`: while it has a value, the direct path runs and only `LLM_*` is read; clear it and the gateway path runs, and only `THESYS_*` is read. Yours to choose at deploy time.

| Variable | Path | Required | Default | Purpose |
| --- | --- | --- | --- | --- |
| `LLM_BASE_URL` | direct | path selector | empty | Any OpenAI-compatible base URL ending in `/v1`, e.g. `https://openrouter.ai/api/v1`. Setting it switches the app off the gateway. Leave empty to use `THESYS_API_KEY`. |
| `LLM_API_KEY` | direct | yes, with that path | — | Key for `LLM_BASE_URL`. OpenRouter keys come from `openrouter.ai/keys`. Ignored while `LLM_BASE_URL` is empty. |
| `LLM_MODEL` | direct | yes, with that path | empty | Model id the endpoint serves, set together with both values above, e.g. `openai/gpt-6.1-sol` on OpenRouter. A model the endpoint does not have fails on the first prompt. |
| `LLM_REASONING_EFFORT` | both | no | `low` | `low`, `medium`, `high`, or `default` to send no reasoning parameter at all. Use `default` if a model rejects the parameter. |
| `THESYS_API_KEY` | gateway | yes, with that path | — | OpenUI Cloud key from `thesys.dev`. This is the path that runs while `LLM_BASE_URL` is empty. |
| `THESYS_MODEL` | gateway | no | empty | Model id on the OpenUI Gateway. The app falls back to `openai/gpt-6.1-sol` when this is empty. Ignored while `LLM_BASE_URL` is set. |

**First use:** open the service URL and ask for something with structure. The first answer takes a few seconds while the model writes the UI program. If chat returns an error, check which path is active first: with `LLM_BASE_URL` set, a missing or wrong `LLM_API_KEY` is the usual cause; with it empty, `THESYS_API_KEY` is.

**Limits worth knowing:** chat is light theme only, the dark theme lives behind a dev-only route upstream. Layout quality tracks the model; smaller models produce simpler cards. The OSRM and Wikimedia calls hit public demo endpoints with rate limits outside this template's control.

**Notes:** this template is published by a third party. It is not affiliated with the upstream maintainers, OpenUI, or OpenAI. Upstream issues belong in the upstream repo; template issues (variables, build, networking) belong in the template queue.


## Similar templates

- [Chat Chat](https://railway.com/deploy/-WWW5r) — Chat Chat, your own unified chat and search to AI platform.
- [Möbius v0.1 Personal AI OS](https://railway.com/deploy/mobius-v01-personal-ai-os) — Self-hosted AI agent that builds and runs apps for you, with memory.
- [stella](https://railway.com/deploy/stella) — Self-host stella with web, API, Postgres, Redis, and object storage.

Open this page in a browser: https://railway.com/deploy/open-intelligent-ui
