Build 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=ExperimentalWarning to silence the notice), or use Bun,
which supports FFI natively.
Scaffold a new app:
npm create vue-termui@latestOr 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()],
})