A fully working, feature-rich terminal emulator component for Vue.js applications.
vue-command is a Vue.js component library that provides a fully functional terminal emulator for embedding interactive command-line interfaces into web applications. It solves the problem of creating realistic terminal experiences in Vue projects by allowing commands to be implemented as native Vue components with injectable dependencies, rather than simple string-to-string mappings.
Vue.js developers building applications that require embedded terminal interfaces, such as developer tools, dashboards, educational platforms, or any project needing a command-line interaction layer.
Developers choose vue-command for its rich feature set, extensible API, and native Vue component integration, which allows for more dynamic and interactive terminal commands compared to simpler terminal emulator libraries.
A fully working, most feature-rich Vue.js terminal emulator
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Commands are implemented as Vue components with injectable dependencies, enabling complex interactive behaviors beyond simple string mappings, as shown in the nano editor example.
Offers slots for bar, buttons, title, prompt, and custom parsers or event resolvers, allowing deep customization of the terminal interface without being constrained by pre-defined structures.
Supports asynchronous commands, fullscreen mode, multiline input, autocompletion, history browsing, and search, mimicking real terminal behavior with keyboard shortcuts like Ctrl+R for search.
Includes formatters (JSON, list, table) and utility functions like createStdout and createStderr for easy output generation, reducing boilerplate code for common terminal tasks.
The README admits that native functionality for pipes, streams, and parallel command execution is absent, requiring custom interpreters for advanced shell-like behavior.
With over 20 configurable properties and multiple slots, the setup can be overwhelming for simple use cases, leading to a steeper initial investment compared to lighter alternatives.
Tightly coupled with Vue.js, making it unsuitable for projects using other frameworks or requiring framework-agnostic solutions, as commands must be Vue components.
Currently, only SIGINT is fully implemented for signal handling, which may restrict scenarios needing broader terminal control signals like SIGTERM or SIGKILL.