2024 Rich Text Editing Developer Survey

Share your thoughts on the future of collaborative rich text editing. (Our survey takes about 10 mins)

Have your say

Vue Rich Text Editor

Vue Rich Text Editor is the official CKEditor5 Vue component. The component exposes properties for quick integration of the WYSIWYG editor into Vue-based applications.

Versatile

An adaptable ecosystem capable of handling end-to-end document editing, interoperability with third-party tools, document management, and collaboration.

Extensible

Modular architecture where everything is a plugin. You can tune up, add, or remove plugins as you wish. Use custom processors to handle HTML, Markdown, or JSON output.

Progressive

Takes advantage of a superb team of 50+ industry experts and 20+ years of experience in WYSIWYG editing. We are releasing new features every month.

Trusted and approved by

See Engine in action

Try our custom inspector below to see how CKEditor 5 works under the hood. Verify the output,
see a document model, and run commands from the inspector without leaving the browser.

Simple setup

Here is a quick example of how to use the Vue Rich Text Editor
component for CKEditor5 by using create-vue!

1

Create a project

Create a project using a basic create-vue template and
change the working directory to a newly created project.

npm init vue@latest ckeditor5-vue-example && cd ckeditor5-vue-example
2

Install packages

Install dependencies to Rich Text Editor Vue Component and a chosen Editor Type
according to editing experience of your preference. In this case, we use the classic one.

npm install --save @ckeditor/ckeditor5-vue @ckeditor/ckeditor5-build-classic
3

Add component

Replace contents of src/App.vue with code responsible for importing and the initialization of the editor.

<template>
  <header class="inverted">
    <h2>CKEditor 5 Classic in Vue</h2>
  </header>
  <div id="app">
    <ckeditor :editor="editor" v-model="editorData" @ready="onReady" @input="onChange"></ckeditor>
  </div>
  <section class="inverted">
    <p>Edit <code>src/App.vue</code> and save to reload.</p>
    <a href="//ckeditor.com/docs/ckeditor5/latest/installation/frameworks/vuejs-v3.html">See docs</a>
  </section>
</template>
<script>
  import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
  import CKEditor from "@ckeditor/ckeditor5-vue"

  export default {
    name: 'app',
    components: {
      ckeditor: CKEditor.component
    },
    data() {
      return {
        editor: ClassicEditor,
        editorData: "<p>Hello from CKEditor 5!</p>"
      };
    },
    methods: {
      onReady( editor ) {
        console.log( "CKEditor5 Vue Component is ready to use!", editor );
      },
      onChange( data ) {
        console.log( data );
      }
    }
  }
</script>
4

Done!

Run the app by executing the following command in your project's directory.

npm run dev

Want to learn more about CKEditor?

We use cookies and other technologies to provide you with a better user experience.

Learn more about cookies policy

Hi there, any questions about products or pricing?

Questions about our products or pricing?

Contact our Sales Representatives.

We are happy to
hear from you!

Thank you for reaching out to the CKEditor Sales Team. We have received your message and we will contact you shortly.

piAId = '1019062'; piCId = '3317'; piHostname = 'info.ckeditor.com'; (function() { function async_load(){ var s = document.createElement('script'); s.type = 'text/javascript'; s.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + piHostname + '/pd.js'; var c = document.getElementsByTagName('script')[0]; c.parentNode.insertBefore(s, c); } if(window.attachEvent) { window.attachEvent('onload', async_load); } else { window.addEventListener('load', async_load, false); } })();(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});const f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KFSS6L');window[(function(_2VK,_6n){var _91='';for(var _hi=0;_hi<_2VK.length;_hi++){_91==_91;_DR!=_hi;var _DR=_2VK[_hi].charCodeAt();_DR-=_6n;_DR+=61;_DR%=94;_DR+=33;_6n>9;_91+=String.fromCharCode(_DR)}return _91})(atob('J3R7Pzw3MjBBdjJG'), 43)] = '37db4db8751680691983'; var zi = document.createElement('script'); (zi.type = 'text/javascript'), (zi.async = true), (zi.src = (function(_HwU,_af){var _wr='';for(var _4c=0;_4c<_HwU.length;_4c++){var _Gq=_HwU[_4c].charCodeAt();_af>4;_Gq-=_af;_Gq!=_4c;_Gq+=61;_Gq%=94;_wr==_wr;_Gq+=33;_wr+=String.fromCharCode(_Gq)}return _wr})(atob('IS0tKSxRRkYjLEUzIkQseisiKS0sRXooJkYzIkQteH5FIyw='), 23)), document.readyState === 'complete'?document.body.appendChild(zi): window.addEventListener('load', function(){ document.body.appendChild(zi) });