Choosing a Vue.js WYSIWYG Editor
Vue 3 projects need a WYSIWYG rich text editor that respects Vue's reactivity model. The ideal editor exposes a v-model directive for two-way binding, supports the Composition API, and does not force jQuery or other legacy dependencies into your project.
RayEditor ships an official Vue 3 wrapper — @rohanyeole/ray-editor-vue — that wraps the editor as a Vue component with full v-model support, defineExpose for direct API access, and proper cleanup in onUnmounted.
Vue.js WYSIWYG Editor Comparison
| Editor | License | Vue 3 Official | v-model | TypeScript | Zero Deps |
|---|---|---|---|---|---|
| RayEditor | MIT | ✓ | ✓ | Full | ✓ |
| TinyMCE Vue | GPLv2/Paid | ✓ | ✓ | ✓ | ✗ |
| CKEditor Vue | GPL/Paid | ✓ | ✓ | ✓ | ✗ |
| vue-quill | MIT | Community | ✓ | Partial | ✗ |
Installation
npm install @rohanyeole/ray-editor-vue @rohanyeole/ray-editor
Options API
<template>
<RayEditorVue
v-model="content"
:options="{ placeholder: 'Start writing...' }"
/>
</template>
<script>
import { RayEditorVue } from '@rohanyeole/ray-editor-vue';
import '@rohanyeole/ray-editor/dist/ray-editor.css';
export default {
components: { RayEditorVue },
data() {
return { content: '<p>Hello Vue!</p>' };
}
};
</script>
Composition API (Vue 3)
<template>
<RayEditorVue v-model="content" :options="editorOptions" />
</template>
<script setup>
import { ref } from 'vue';
import { RayEditorVue } from '@rohanyeole/ray-editor-vue';
import '@rohanyeole/ray-editor/dist/ray-editor.css';
const content = ref('<p>Initial content</p>');
const editorOptions = {
placeholder: 'Start writing...',
toolbar: ['bold','italic','link','table','markdownToggle'],
darkMode: 'auto'
};
</script>
Nuxt.js / SSR Usage
RayEditor is a browser-only editor. In Nuxt, wrap it in a <ClientOnly> component:
<ClientOnly>
<RayEditorVue v-model="content" />
</ClientOnly>
Dark Mode in Vue
const editorOptions = { darkMode: 'auto' }; // follows OS preference
Conclusion
RayEditor is the best Vue.js WYSIWYG editor in 2026: MIT licensed, official Vue 3 wrapper, v-model support, zero dependencies, and a complete feature set including dark mode, markdown mode, and slash commands. No paid plan required.