by vuejs-ai
The Vue framework for terminal UIs. SFC & JSX, Yoga flexbox, HMR, and testing out of the box.
# Add to your Claude Code skills
git clone https://github.com/vuejs-ai/vue-tuiLast scanned: 6/20/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-06-20T07:50:19.838Z",
"npmAuditRan": false,
"pipAuditRan": true,
"promptInjectionRan": true
}See how vue-tui compares with popular alternatives.
vue-tui is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by vuejs-ai. The Vue framework for terminal UIs. SFC & JSX, Yoga flexbox, HMR, and testing out of the box. It has 362 GitHub stars.
Yes. vue-tui passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/vuejs-ai/vue-tui" and add it to your Claude Code skills directory (see the Installation section above).
vue-tui is primarily written in TypeScript. It is open-source under vuejs-ai on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh vue-tui against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Public beta — the
@vue-tui/runtimeAPI is stabilizing toward 1.0; dev-mode HMR is still experimental. Bug reports welcome.
vue-tui is a Vue-native application framework for interactive terminal UIs. Build with components, develop with HMR, test with confidence.
<template>, TSX, or both.@vue-tui/vite provides hot module replacement (HMR) in the terminal.@vue-tui/testing to render components, send terminal input, and inspect frames.Choose the method that matches your application.
Use this scaffold for a standalone TUI application that controls the Node process and terminal. The Vite config defines the application entry. During development, @vue-tui/vite starts this entry and provides HMR. During a production build, it configures Vite to create one Node file. The Vue compiler creates client render functions in both modes.
pnpm dlx tiged vuejs-ai/vue-tui/templates/vite my-app
cd my-app
pnpm install
pnpm dev # in-process terminal dev server with HMR
pnpm build # Vite builds dist/main.mjs
pnpm build:exe # Vite builds first, then tsdown creates build/main (requires Node.js 26 or later)
pnpm preview # build, then run the production bundle
Edit src/app.vue and watch the terminal update instantly.
Building an executable requires Node.js 26 or later. On Windows, the executable is build/main.exe.
Use the runtime directly when vue-tui is part of an existing Node application. The host application uses its existing compiler, build, entry, and process lifecycle without @vue-tui/vite. For an embedded Vite application, use @vitejs/plugin-vue to compile SFCs or @vitejs/plugin-vue-jsx to compile JSX and TSX.
<!-- app.vue -->
<script setup lang="ts">
import { shallowRef } from "vue";
import { Box, Text, useInput } from "@vue-tui/runtime";
const count = shallowRef(0);
useInput((event) => {
if (event.type === "key") {
if (event.key.name === "up") {
count.value++;
} else if (event.key.name === "down") {
count.value--;
}
}
});
</script>
<template>
<Box>
<Text>Count: </Text>
<Text bold color="green">{{ count }}</Text>
<Text dimColor> (↑/↓ to change)</Text>
</Box>
</template>
// main.ts
import { createApp } from "@vue-tui/runtime";
import App from "./app.vue";
createApp(App).mount({ exitOnCtrlC: true });
@vue-tui/runtime@vue-tui/use@vue-tui/components@vue-tui/testing| Package | Description |
|---|---|
@vue-tui/runtime |
@vue-tui/runtime is a Vue 3 renderer for terminal applications. It provides core components, layout, input, focus, and lifecycle APIs. Its API is stabilizing. |
@vue-tui/use |
@vue-tui/use provides composables and components that use only public Runtime APIs. |
@vue-tui/vite |
vueTui() provides terminal HMR and default Vite settings for a standalone Node bundle. Embedded applications use their existing build without this plugin. This package is experimental. |
@vue-tui/testing |
@vue-tui/testing provides a deterministic host for component tests. Tests can inspect renderer frames or the emulated terminal screen. |
@vue-tui/components |
@vue-tui/components provides <ScrollBox>, <Spinner>, <Table>, <Newline>, and <Spacer>. |
| Example | Description |
|---|---|
basic-template |
Vue SFC with <template> syntax |
basic-jsx |
Same app in TSX |
coding-agent |
AI coding agent with LLM streaming and interactive UI |
flappy-bird |
Physics-based terminal game with reactive state and borders |
scroll-box |
Bounded viewport with app-controlled scrolling |
@vue-tui/runtimeThe core renderer: the terminal primitives and the composables that read renderer-owned facts. Package guide.
| Component | Import from | Description |
|---|---|---|
<Box> |
@vue-tui/runtime |
Layout container — flex, size, spacing, border, background, clipping, and v-show |
<Text> |
@vue-tui/runtime |
Text — foreground/background color, six modifiers, wrapping, truncation, and v-show |
<Static> |
@vue-tui/runtime/inline |
Commits a mounted subtree to Inline terminal history |
Box and Text have closed prop surfaces: unknown props, misspellings, browser attributes, and listeners such as @click are rejected at runtime instead of silently ignored. The full prop tables are in the Runtime guide.
v-show belongs to the visual host layer, not to a component allowlist. Vue forwards v-show through a component chain when its current effective root is one Box or Text. Custom single-root components therefore support it without additional code. Newline, Spacer, Spinner, ScrollBox, and a non-empty Table also support v-show. An empty Table with no explicit columns renders no host node or layout space.
Fragment and text roots produce a Vue development warning, and v-show has no effect. Comment roots ignore v-show without a warning. Static remains the explicit history-boundary exception.
Static is the only export on that subpath, and it is deliberately absent from the package root. It has no collection API — use ordinary Vue iteration with stable keys. Each instance commits its output once and then releases its subtree; effective Fullscreen rejects Static.
<script setup lang="ts">
import { Static } from "@vue-tui/runtime/inline";
</script>
<template>
<Static v-for="entry in completedEntries" :key="entry.id">
<CompletedEntry :entry="entry" />
</Static>
</template>
Each one must be called inside a mounted render tree.
| Composable | Returns | Description | | ------------------------------------------------------