vue-dompurify-html

Safe replacement for the v-html directive
6,276,753 334
Install
npm install vue-dompurify-html
Latest Version:5.3.0
Vue:3
Older releases:2
License:MIT
Last Updated:Oct 26, 2026
Links: GitHub  ·  npm
Maintainer: tgerbet

vue-dompurify-html

npm Build Status Code Coverage

A "safe" replacement for the v-html directive. The HTML code is sanitized with DOMPurify before being interpreted.

This is only a small wrapper around DOMPurify to ease its usage in a Vue app. You should take a look at the DOMPurify Security Goals & Threat Model to understand what are the limitations and possibilities.

Installation

npm install vue-dompurify-html

The current version is only compatible with Vue 3. If you need Vue 2 support use a 4.1.x version.

Usage

You can see setup examples in the examples/ folder.

import { createApp } from 'vue';
import App from './App.vue';
import VueDOMPurifyHTML from 'vue-dompurify-html';

const app = createApp(App);
app.use(VueDOMPurifyHTML);
app.mount('#app');

In your SFC:

<template>
    <div v-dompurify-html="rawHtml"></div>
</template>
<script setup>
import { ref } from 'vue';

const rawHtml = ref('<span style="color: red">This should be red.</span>');
</script>

You can also define your DOMPurify configurations:

import { createApp } from 'vue';
import App from './App.vue';
import VueDOMPurifyHTML from 'vue-dompurify-html';

const app = createApp(App);
app.use(VueDOMPurifyHTML, {
    namedConfigurations: {
        svg: {
            USE_PROFILES: { svg: true },
        },
        mathml: {
            USE_PROFILES: { mathMl: true },
        },
    },
});
app.mount('#app');

Your configuration keys can then be used as an argument of the directive:

<template>
    <div v-dompurify-html="rawHtml"></div>
    <div v-dompurify-html:svg="svgContent"></div>
</template>
<script setup>
import { ref } from 'vue';

const rawHtml = ref('<span style="color: red">This should be red.</span>');
const svgContent = ref('<svg><rect height="50"></rect></svg>');
</script>

Alternatively, you can define a default DOMPurify configuration:

import { createApp } from 'vue';
import App from './App.vue';
import VueDOMPurifyHTML from 'vue-dompurify-html';

const app = createApp(App);
app.use(VueDOMPurifyHTML, {
    default: {
        USE_PROFILES: { html: false },
    },
});
app.mount('#app');

The default DOMPurify configuration will be used:

<template>
    <div v-dompurify-html="rawHtml"></div>
</template>
<script setup>
import { ref } from 'vue';

const rawHtml = ref('<span style="color: red">This should be red.</span>');
</script>

There is also the possibility to set-up DOMPurify hooks:

import { createApp } from 'vue';
import App from './App.vue';
import VueDOMPurifyHTML from 'vue-dompurify-html';

const app = createApp(App);
app.use(VueDOMPurifyHTML, {
    hooks: {
        uponSanitizeElement: (currentNode) => {
            // Do something with the node
        },
    },
});
app.mount('#app');

If needed you can use the directive without installing it globally:

<template>
    <div v-dompurify-html="rawHtml"></div>
</template>

<script setup lang="ts">
import { buildVueDompurifyHTMLDirective } from '../src/';

const vdompurifyHtml = buildVueDompurifyHTMLDirective(<config...>);
const rawHtml = '<span style="color: red">Hello!</span>';
</script>

Usage with Nuxt 3

In your Nuxt folder, add the isomorphic-dompurify dependency and create a new plugin plugins/dompurify-html.ts with the following content:

import VueDOMPurifyHTML from 'vue-dompurify-html';
import { JSDOM } from 'jsdom';
import DOMPurify from 'isomorphic-dompurify';

export default defineNuxtPlugin((nuxtApp) => {
    nuxtApp.vueApp.use(
        VueDOMPurifyHTML,
        { enableSSRPropsSupport: true },
        () => DOMPurify,
    );
});

You can use the same configuration options than the Vue setup. You can see a complete example with some advanced configuration in the Nuxt 3 example.

Note: due to current limitations, the content processed by the directive are only processed client side.

Related Packages

@benedictleejh/nuxt-sanitise-html

A Nuxt module to sanitise HTML to protect against XSS attacks

1,732 1
@radya/nuxt-dompurify

A Nuxt 3 module that integrates DOMPurify for sanitizing HTML content and protec...

28,438 8
v-sanitize-directive

A utility library providing input sanitization using dompurify and Vue.js.

999 0
purrrify

A Nuxt module that integrates sanitize-html for sanitizing HTML content and prot...

2,066 4

Version History

Version Released Vue License
5.3.0 ^3.4.36 MIT
5.2.0 ^3.0.0 MIT
5.1.0 ^3.0.0 MIT
5.0.1 ^3.0.0 MIT
5.0.0 ^3.0.0 MIT
Pre-releases (7)
Version Released Vue License
3.0.0-beta.3 ^3.0.0 MIT
3.0.0-beta.2 ^3.0.0 MIT
3.0.0-beta.1 ^3.0.0 MIT
3.0.0-alpha.3 ^3.0.0 MIT
3.0.0-alpha.2 ^3.0.0 MIT