Skip to content

Vue SDK ​

Integrate Klero feedback, roadmap, changelog, surveys, and widgets into your Vue application.

Requirements ​

  • Vue >= 3.3.0

Installation ​

bash
npm install @kleroai/vue

Quick Start ​

Any Module with KleroEmbed ​

KleroEmbed is the generic component that supports all Klero module types. Convenience components are also provided.

vue
<script setup>
import { KleroEmbed, KleroFeedback, KleroRoadmap, KleroChangelog, KleroWidget } from '@kleroai/vue';
</script>

<template>
  <!-- Using the generic component -->
  <KleroEmbed project-slug="myproject" embed-type="feedback" />

  <!-- Or use convenience components -->
  <KleroFeedback project-slug="myproject" />
  <KleroRoadmap project-slug="myproject" />
  <KleroChangelog project-slug="myproject" />
  <KleroWidget project-slug="myproject" />
</template>

Survey with KleroSurvey ​

For surveys, use the dedicated KleroSurvey component which provides survey-specific event callbacks:

vue
<script setup>
import { KleroSurvey } from '@kleroai/vue';

function handleComplete(data) {
  console.log('Completed:', data.responseUlid);
  console.log('Answers:', data.answers);
}

function handleClose(data) {
  console.log('Closed, completed:', data.completed);
}

function handleError(error) {
  console.error('Error:', error);
}
</script>

<template>
  <KleroSurvey
    project-slug="myproject"
    survey-ulid="01ABC123..."
    @complete="handleComplete"
    @close="handleClose"
    @error="handleError"
  />
</template>

Programmatic Control ​

KleroEmbed ​

vue
<script setup>
import { ref } from 'vue';
import { KleroEmbed } from '@kleroai/vue';

const embedRef = ref();

function reload() {
  embedRef.value?.reload();
}
</script>

<template>
  <button @click="reload">Reload</button>
  <KleroEmbed
    ref="embedRef"
    project-slug="myproject"
    embed-type="feedback"
  />
</template>

KleroSurvey ​

vue
<script setup>
import { ref } from 'vue';
import { KleroSurvey } from '@kleroai/vue';

const surveyRef = ref();
</script>

<template>
  <button @click="surveyRef?.open()">Open Survey</button>
  <button @click="surveyRef?.close()">Close Survey</button>
  <KleroSurvey
    ref="surveyRef"
    project-slug="myproject"
    survey-ulid="01ABC123..."
  />
</template>

Widget Events ​

Listen for widget open/close events:

vue
<template>
  <KleroWidget
    project-slug="myproject"
    @widget-opened="console.log('Widget opened')"
    @widget-closed="console.log('Widget closed')"
  />
</template>

Authentication ​

Pass a customer token to identify logged-in users:

vue
<template>
  <KleroFeedback
    project-slug="myproject"
    customer-token="your-jwt-token"
  />
</template>

See the Authentication Guide for token generation.

Custom Base URL ​

For self-hosted or custom domain setups:

vue
<template>
  <KleroFeedback
    project-slug="myproject"
    base-url="https://feedback.mycompany.com"
  />
</template>

Additional Embed Config ​

Pass extra configuration to the embed:

vue
<template>
  <KleroEmbed
    project-slug="myproject"
    embed-type="survey"
    :embed-config="{ surveyUlid: '01ABC123...' }"
  />
</template>

Event Hook ​

For granular event handling across multiple components, use the useKleroEvents composable:

vue
<script setup>
import { onMounted, onUnmounted } from 'vue';
import { useKleroEvents } from '@kleroai/vue';

const { on } = useKleroEvents();

let unsubscribe;

onMounted(() => {
  unsubscribe = on('survey:completed', (data) => {
    console.log('Survey completed:', data.responseUlid);
  });
});

onUnmounted(() => {
  unsubscribe?.();
});
</script>

API Reference ​

KleroEmbed Props ​

PropTypeRequiredDescription
project-slugstringYesYour Klero project slug
embed-typeKleroEmbedTypeYesModule type (feedback, roadmap, changelog, widget, survey)
base-urlstringNoCustom base URL
customer-tokenstringNoJWT token for user identification
embed-configRecord<string, unknown>NoAdditional config passed to the embed

KleroEmbed Events ​

EventPayloadDescription
widget-opened—Widget panel opened
widget-closed—Widget panel closed
load—Embed finished loading

KleroEmbed Exposed Methods ​

MethodDescription
reload()Reload the embed

KleroSurvey Props ​

PropTypeRequiredDescription
project-slugstringYesYour Klero project slug
survey-ulidstringYesThe survey's unique identifier
base-urlstringNoCustom base URL
customer-tokenstringNoJWT token for user identification

KleroSurvey Events ​

EventPayloadDescription
completeSurveyCompletedEventSurvey completed
closeSurveyClosedEventSurvey closed
errorstringSurvey failed to load
load—Embed finished loading

KleroSurvey Exposed Methods ​

MethodDescription
open(surveyUlid?)Open the survey
close()Close the survey

Convenience Components ​

ComponentEquivalent
KleroFeedback<KleroEmbed embed-type="feedback" />
KleroRoadmap<KleroEmbed embed-type="roadmap" />
KleroChangelog<KleroEmbed embed-type="changelog" />
KleroWidget<KleroEmbed embed-type="widget" />

Customer Feedback Management