If you need a lightweight human check in a form—login, contact, signup—but don’t want to wire up Google reCAPTCHA, hCaptcha, or backend challenges,
👉 vue-client-recaptcha is worth a look.
It’s a Vue 3 component + composable that generates and validates a captcha entirely in the browser.
âś… No API calls
âś… No secret keys
âś… No backend required
🤔 What problem does it solve?
Traditional captchas usually mean:
- ❌ Third-party scripts (privacy + consent issues)
- ❌ API keys + server verification
- ❌ Slower load + bigger bundles
vue-client-recaptcha takes a different approach:
🟢 Optimize for speed, simplicity, and DX
đź”´ Not meant for enterprise-grade bot protection
đź§Ş Real Example (Vue 3 + <script setup>)
Here’s a clean, practical form:
<script setup>
import { ref } from 'vue'
import { VueClientRecaptcha } from 'vue-client-recaptcha'
import 'vue-client-recaptcha/dist/vue-client-recaptcha.css'
const captcha = ref('')
const isValid = ref(false)
const captchaRef = ref(null)
const submit = () => {
if (!isValid.value) {
alert('Please verify captcha')
return
}
alert('Form submitted 🚀')
}
</script>
<template>
<form @submit.prevent="submit" class="space-y-4">
<input
v-model="captcha"
placeholder="Enter captcha"
class="input"
/>
<VueClientRecaptcha
ref="captchaRef"
v-model="captcha"
v-model:valid="isValid"
theme="auto"
:noiseDots="20"
distortion="both"
/>
<div class="flex gap-2">
<button type="submit">Submit</button>
<button type="button" @click="captchaRef?.resetCaptcha()">
Reset
</button>
</div>
</form>
</template>
đź§ Using the Composable (Advanced)
If you want full control (custom UI, canvas, etc.):
import { useCaptcha } from 'vue-client-recaptcha'
const { code, generate, validate, reset } = useCaptcha({
charsPreset: 'letters',
count: 6,
})
generate()
const isValid = validate('ABC123')
✨ Key benefits
| Feature | Why it matters |
|---|---|
| No server required | Works in static sites, SPAs, Nuxt, Vite |
| Vue-native API |
v-model + <script setup> friendly |
| Customizable UI | Themes, distortion, fonts, size |
| Accessible | Labels + optional audio |
| Composable API | Build your own captcha UI |
| Zero runtime deps | Lightweight & fast |
🎯 When should you use it?
âś… Good fit
- Internal dashboards
- SaaS admin panels
- MVPs / prototypes
- Low-risk forms (contact, newsletter)
❌ Not a replacement for
- Payment flows
- Auth systems requiring strong security
- Abuse-heavy public endpoints
For those, use:
- Cloudflare Turnstile
- reCAPTCHA Enterprise
- Server-side validation
⚠️ Security reality check
This is client-side only.
That means:
- It can be bypassed
- It’s meant to reduce noise, not eliminate attacks
👉 Always combine with:
- server validation
- rate limiting
- basic anti-abuse logic
đź”— Links
- 📦 npm: https://www.npmjs.com/package/vue-client-recaptcha
- 🧑‍💻 GitHub: https://github.com/parsajiravand/vue-client-recaptcha
- 📚 Docs: https://vue-client-recaptcha.netlify.app/
- 🔬 Playground: https://vue-client-recaptcha.netlify.app/playground
đź’ Final thoughts
If you want:
- ⚡ fast integration
- đź§Ľ clean Vue API
- 🪶 lightweight bundle
…and you understand the limitations of client-side validation,
then vue-client-recaptcha is a very practical solution.
đź§ Pro tip
A solid combo in real apps:
Client captcha (this package)
+ Server validation
+ Rate limiting (IP / token)
That gives you good enough protection without killing UX.
Top comments (0)