@gistui/vue
| Install | |
|---|---|
npm install @gistui/vue |
|
| Latest Version: | 0.2.1 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Oct 5, 2026 |
| Links: | GitHub · npm |
@gistui/vue
GistUI for Vue.
Render a model's streamed answer as real, interactive UI in Vue 3.5+ and Nuxt.
GistUI for Vue 3.5+ (and Nuxt): render a model's streamed answer as real UI (dashboards, forms, reports, slide decks) with GistUI's components, or with your own Vue components.
npm install @gistui/vue @gistui/styles
On the server, give the model GistUI's system prompt:
import { prompt } from "@gistui/catalog";
const system = prompt().text; // prompt({ mode: "inline" }) for chat text with ```gistui blocks
In your app:
<script setup lang="ts">
import { GistUI } from "@gistui/vue";
import "@gistui/styles/styles.css";
</script>
<template>
<GistUI :source="answer" :streaming="loading" @action="onAction" />
</template>
Props: source + streaming (a growing string) or stream (a ReadableStream), inline, theme,
color, tokens, darkTokens, classNames, tools, mutations, onToolCall, allowedHosts,
paused, initialState, lockUntil, openLinks, autofix (default true), components, library.
Events: action, error, stateChange, prose, autofix.
Tools and safety. A program is untrusted (a model wrote it, possibly steered by content it read).
tools are read-only and may run as soon as the UI renders; mutations change something and run
only when the person presses a button; onToolCall is called before every tool call and can block it
by returning false. allowedHosts (["cdn.example.com", "*.example.com"]) limits where images,
video and backgrounds load from; without it, a URL the program assembled from data is not loaded.
paused stops timed data refreshes.
Autofix. When a stream ends with mistakes, the program is repaired in code (no model call) and
shown repaired, in place; the autofix event lists what changed.
Your own components
Any Vue component (shadcn-vue, Reka UI, your design system) can replace a built-in one:
<!-- MyCard.vue -->
<script setup lang="ts">
import { GistChildren, type GistUIComponentProps } from "@gistui/vue";
defineProps<GistUIComponentProps>(); // props (what the model wrote), node, ctx
</script>
<template>
<section class="my-card"><GistChildren /></section>
</template>
<GistUI :source="answer" :components="{ Card: MyCard }" />
Your components see the app's plugins and what the components around <GistUI> provide. For a form
field, useGistField(props) joins the GistUI Form around it: validation from the field's props,
error messages, and bind:$var.
const field = useGistField(props); // field.name, label, required, error, locked, value, setValue
All packages
GistUI is one project in several packages, released together under one version.
| Package | What it is |
|---|---|
@gistui/react |
React renderer and default components |
@gistui/vue |
Vue 3.5+ and Nuxt |
@gistui/svelte |
Svelte 5 and SvelteKit |
@gistui/solid |
Solid and SolidStart |
@gistui/vanilla |
Vanilla JavaScript renderer, no framework |
@gistui/catalog |
Component schemas, the system prompt and the agent skill |
@gistui/styles |
One stylesheet for every framework |
@gistui/server |
Stream reading, validation and repair on the server |
@gistui/chat |
Headless chat store, model adapters, React chat layouts |
@gistui/core |
The language: streaming parser, validator, autofix, prompt generator |
@gistui/headless |
Shared internals: engine, themes, forms |
@gistui/widgets |
Shared internals: charts, Markdown |
Licence
Related Packages
Vue renderer for @xmachines/json-render-core. JSON becomes Vue components.
Vue 3 renderer for Comark. Render Markdown with components at runtime, with stre...
Define component libraries, generate LLM system prompts, and render streaming Op...
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.2.1 | ^3.5 | MIT | |
| 0.2.0 | ^3.5 | MIT | |
| 0.1.0 | ^3.5 | MIT |
Pre-releases (1)
| Version | Released | License |
|---|---|---|
| 0.0.0-stage |