StatelessChatUI

Minimalist, stateless chat interface for OpenAI-compatible LLM APIs — with native support for streaming, JSON-level state control, and extended thinking display.

Pure client-side Streaming SSE JSON editor File upload <thinking> support No deps
One HTML file. No backend. You point it at /v1/chat/completions and you’re done.
StatelessChatUI screenshot (replace file to show the real UI)

Concept

StatelessChatUI is a pure browser client: the conversation state is fully controlled in the UI, and API calls go directly from your browser to the target endpoint. This is great for debugging prompts, testing providers, and doing “portable” runs where you don’t want any infrastructure.

Architecture

Single-file deployment

Serve one static HTML file (or open it locally). No build pipeline, no bundling, no server logic.

State Control

Raw JSON editor

Edit the full message history, inject messages, replace state, validate/beautify, and export runs.

Debugging

Streaming + metrics

Delta accumulation, token-rate-ish telemetry, and incremental rendering while the model is still talking.

Features

Extended thinking support

Interprets <thinking>...</thinking> and content blocks like reasoning_content during streaming.

Model discovery

Loads available models via /v1/models. Manual override stays possible.

Markdown + code

Markdown rendering with syntax highlighting for quick inspection of outputs and snippets.

Import / export

Persist runs as JSON/JSONL. Drag-and-drop import for quick replay and comparisons.

File support (Vision)

Attach images (and other files) to prompts via picker. If the selected model supports multimodal inputs, the UI includes the files in the request and shows a quick preview.

CORS-friendly

Works with OpenAI-compatible APIs and local inference servers, assuming headers/proxy are set correctly.

Minimal UX

Dark-mode-first, low-noise layout, collapsible thinking, auto-scroll with manual override.

Quick start

Local

Open the file

open demo.html

Works without a server (filesystem), unless your API needs CORS accommodations.

Optional

Static server

python -m http.server 8000 # or npx http-server -p 8000

Useful for consistent origin / CORS testing.

API

Set base URL + key

Configure the endpoint in the header. Example: https://api.openai.com/v1 or http://localhost:11434/v1.

Try it

Open the demo, point it at your provider, and start surgically poking your prompts and message state.