The Modern Terminal UI Framework
See the codeBuild terminal apps with Vue 3, powered by OpenTUI.
[!IMPORTANT] vue-termui renders through OpenTUI's native engine, which requires FFI. Run your app with Node ≥ 26.3 and
--experimental-ffi(add--disable-warning=ExperimentalWarningto silence the notice), or use Bun, which supports FFI natively.
Scaffold a new app:
npm create vue-termui@latest
Or add it to an existing project:
pnpm add vue-termui
<!-- App.vue -->
<script setup lang="ts">
import { Box, Text, onKeyDown, useExit } from 'vue-termui'
const exit = useExit()
onKeyDown((key) => key.name === 'q' && exit())
</script>
<template>
<Box border>
<Text>Hello from the terminal! Press <Text bold>q</Text> to quit.</Text>
</Box>
</template>
// main.ts
import { createApp } from 'vue-termui'
import App from './App.vue'
const app = await createApp(App)
app.mount()
Compile .vue files with the Vite plugin:
// vite.config.ts
import { defineConfig } from 'vite'
import vueTermui from 'vue-termui/vite'
export default defineConfig({
plugins: [vueTermui()],
})
vue-termui skill.vue-termui skill.1,694 followers · starred Jul 2026
5,319 followers · starred Sep 2022
3,534 followers · starred Sep 2022
3,283 followers · starred Sep 2022
The Modern Terminal UI Framework
See the codeBuild terminal apps with Vue 3, powered by OpenTUI.
[!IMPORTANT] vue-termui renders through OpenTUI's native engine, which requires FFI. Run your app with Node ≥ 26.3 and
--experimental-ffi(add--disable-warning=ExperimentalWarningto silence the notice), or use Bun, which supports FFI natively.
Scaffold a new app:
npm create vue-termui@latest
Or add it to an existing project:
pnpm add vue-termui
<!-- App.vue -->
<script setup lang="ts">
import { Box, Text, onKeyDown, useExit } from 'vue-termui'
const exit = useExit()
onKeyDown((key) => key.name === 'q' && exit())
</script>
<template>
<Box border>
<Text>Hello from the terminal! Press <Text bold>q</Text> to quit.</Text>
</Box>
</template>
// main.ts
import { createApp } from 'vue-termui'
import App from './App.vue'
const app = await createApp(App)
app.mount()
Compile .vue files with the Vite plugin:
// vite.config.ts
import { defineConfig } from 'vite'
import vueTermui from 'vue-termui/vite'
export default defineConfig({
plugins: [vueTermui()],
})
vue-termui skill.vue-termui skill.1,694 followers · starred Jul 2026
5,319 followers · starred Sep 2022
3,534 followers · starred Sep 2022
3,283 followers · starred Sep 2022