Quick Start
Minimal Example
The simplest way to use Tiptapify:
vue
<script setup lang="ts">
const handleEditorReady = (options) => {
console.log('Editor ready!')
console.log('HTML:', options.getHTML())
console.log('JSON:', options.getJSON())
}
</script>
<template>
<Tiptapify
placeholder="Start writing your content..."
@editor-ready="handleEditorReady"
/>
</template>With Initial Content
Pass content as an HTML string or Tiptap JSON object:
vue
<script setup lang="ts">
const initialContent = '<h1>Hello World</h1><p>This is a paragraph with <strong>bold</strong> text.</p>'
const handleEditorReady = (options) => {
// options.editor is the raw Tiptap Editor instance
// options.getHTML() returns the HTML content
// options.getJSON() returns the Tiptap JSON representation
}
</script>
<template>
<Tiptapify
:content="initialContent"
placeholder="Start writing..."
@editor-ready="handleEditorReady"
/>
</template>Full Featured Example
This example shows all available configuration options:
vue
<script setup lang="ts">
import { ref } from 'vue'
const editorHTML = ref('')
const editorJSON = ref(null)
const handleEditorReady = (options) => {
editorHTML.value = options.getHTML()
editorJSON.value = options.getJSON()
}
const handleContentChanged = ({ html, json }) => {
editorHTML.value = html
editorJSON.value = json
}
</script>
<template>
<v-container>
<Tiptapify
:content="'<p>Start typing...</p>'"
:height="400"
:toolbar="true"
:items="['bold', 'italic', 'underline', 'strike', '|', 'heading', 'bulletList', 'orderedList', '|', 'link', 'image', '|', 'undo', 'redo']"
:bubble-menu="true"
:floating-menu="true"
:slash-commands="true"
placeholder="Write something amazing..."
:show-words-count="true"
:show-characters-count="true"
default-font-family="Inter"
font-measure="px"
rounded="lg"
:interactive-styles="true"
variant-btn="tonal"
variant-field="outlined"
@editor-ready="handleEditorReady"
@content-changed="handleContentChanged"
/>
</v-container>
</template>Two-Way Binding with v-model
Use the update:modelValue event for v-model support:
vue
<script setup lang="ts">
import { ref } from 'vue'
const content = ref('<p>Initial content</p>')
</script>
<template>
<Tiptapify
v-model="content"
placeholder="Type here..."
/>
</template>Outputting Content
vue
<script setup lang="ts">
import { ref } from 'vue'
const content = ref('<p>Hello <strong>world</strong>!</p>')
const saveContent = () => {
// content.value now contains the current HTML
console.log(content.value)
}
</script>
<template>
<div>
<Tiptapify
v-model="content"
placeholder="Write something..."
/>
<v-btn @click="saveContent">
Save
</v-btn>
<!-- Preview the HTML -->
<pre>{{ content }}</pre>
</div>
</template>Toolbar Configuration
By default, all toolbar items are shown. Use the items prop to show only specific items:
vue
<template>
<Tiptapify
:items="['bold', 'italic', 'underline', '|', 'heading', 'bulletList', '|', 'undo', 'redo']"
placeholder="Minimal toolbar..."
/>
</template>See the Toolbar Items reference for all available items, and the Custom Toolbar example for advanced configuration.
Next Steps
- Learn about Toolbar Configuration
- Set up Internationalization (requires
vue-i18n) - Explore Media Embedding
- See the full API Reference