AI Chat · Live artifacts

AI that builds, not just answers.

LumaBrowser's built-in AI Chat doesn't just reply with text; it produces artifacts: standalone documents that render live next to the conversation. Code, web pages, diagrams, and fully interactive mini-apps, all generated on demand and runnable in the same window.

Download LumaBrowser - free See the artifact types
Bring your own model · runs locally · nothing to wire up

Six kinds of artifact

Ask for something concrete and the model picks the right artifact type for the job. Each one renders in its own panel beside the chat, editable, runnable, and saved.

code

Code

Any language, rendered in a VS Code-style Monaco editor with full syntax highlighting. Read it, scroll it, copy it, the same editing surface you already know.

html

HTML

Full pages or fragments, shown as a split view: the source on one side, a live preview on the other. Change the request, watch the preview update.

svg

SVG

Vector graphics rendered straight to an image. Icons, diagrams, and illustrations come back as crisp, scalable artwork you can drop anywhere.

markdown

Markdown

Long-form docs rendered formatted, headings, lists, tables, and code blocks laid out for reading, not buried inside a single chat reply.

image

Image

Generated bitmaps shown inline in the artifact panel, right where you asked for them, no separate viewer, no download round-trip to look.

live

Live

Interactive modules, calculators, charts, dashboards, toggles, simulations, that run inline and respond to your input in real time.

Live interactive modules

The live type is the one that turns a chat into a tool. The model writes a small HTML fragment plus JavaScript; it runs inline, powered by a lightweight reactive runtime (ResonantJS) with optional Chart.js for charts. No build step, no <script> tag wrangling; it just renders and reacts.

Chat
You Make me a counter I can click.
LumaBrowser Here's a live counter. Tap the buttons; it updates instantly in the panel.
Live artifact

42

− Decrement + Increment

Under the hood, a live module is just markup bound to a tiny reactive state object. Here is roughly what the model emits:

<!-- HTML fragment: bound to reactive state, no <script> tag -->
<div class="counter">
    <p r-text="count">0</p>
    <button r-on:click="count--">− Decrement</button>
    <button r-on:click="count++">+ Increment</button>
</div>
// One reactive object. ResonantJS wires the bindings above.
Resonant.component('counter', {
    count: 42
});

// That's it. Clicks mutate `count`; the <p> re-renders.
// Need a chart? `live` modules can pull in Chart.js the same way.

Generated code that actually checks out

A snippet that looks right but throws on the first run isn't an artifact, it's a chore. LumaBrowser puts validation gates between the model and your panel.

Lint on create and edit. Code artifacts are automatically linted whenever they're created or edited; JavaScript and TypeScript, JSON, and PowerShell are all checked. A syntax safety gate runs before a live module renders, and a lint pass runs after. The model is instructed to fix any problems with edit_artifact before it declares the work done; so you get fewer broken snippets and fewer round-trips.

Lint on create/edit

Every code artifact is linted as it's written. JS/TS, JSON, and PowerShell all run through the checker.

Safety gate before render

Live modules pass a syntax safety gate before they're allowed to render in the panel.

Lint pass after render

A second lint pass runs after the module renders, catching what static checks alone might miss.

Self-repair before done

The model is told to fix flagged problems with edit_artifact before it calls the task finished.

Versioned by default

Iterate without losing earlier drafts. Every edit creates a new version under the same root. The chat shows one entry per artifact with a version count, full history is retained, and deleting an artifact removes the whole version chain.

v1

First draft - the model's initial take on your request.

v2

You asked for a tweak; a new version is saved under the same root.

v3

Another edit. The chat still shows one entry, with a version count.

v4 · head

The current version. Earlier drafts stay in the full history, ready to revisit.

Open it, share it, keep it

An artifact isn't trapped in the chat window. Each one is served at a local URL on the LumaBrowser REST gateway, for example http://127.0.0.1:<port>/artifacts/<id>.html, so you can pop it into a full browser tab or download it. And when you turn on LumaBrowser's LAN sharing, paired devices can view artifacts remotely.

A real local URL

Every artifact is reachable on the REST gateway at /artifacts/<id>.html.

Open in a full tab

Pop the artifact out of the panel and into a normal browser tab when you need more room.

Download it

Keep the file on disk; it's a standalone document, not a screenshot of one.

Share over LAN

Turn on LAN sharing and paired devices can view your artifacts remotely.

Runs on whatever model you bring

Artifacts aren't tied to one vendor. They're produced by whichever model you configure, a bundled local model (llama.cpp, Apple-Silicon MLX, or in-browser WebGPU) or your own OpenAI or Anthropic key. Pick the model that fits your privacy, cost, and quality budget; the artifact pipeline works the same either way.

Bundled local model

Run entirely on your machine via llama.cpp, Apple-Silicon MLX, or in-browser WebGPU. Read more on local AI.

Your OpenAI key

Point LumaBrowser at your own OpenAI key when you want a hosted frontier model.

Your Anthropic key

Bring an Anthropic key and let Claude drive the same artifact pipeline.

Same pipeline, any model

Validation, versioning, and live rendering behave identically whichever model you choose.

Stop copy-pasting code out of a chat box

LumaBrowser's AI Chat builds runnable artifacts, code, pages, visuals, and live mini-apps, right beside the conversation, versioned and validated, on whatever model you bring. It's free. Explore the APIs or head back to the overview to see the rest of LumaBrowser.

Download LumaBrowser - free Read the API reference