Product support

Get help in the plugin support forum.

  • Added on May 6, 2020
  • Current version: 3.0.0
  • Platform Compatibility
    v3.x use latest
    v2.x not tested
    v1.x not tested
  • Created by
  • Public repository


Simple captcha for your website

Video manual

Based on https://github.com/mewebstudio/captcha

Need {% scripts %} in layout (https://docs.octobercms.com/3.x/markup/tag/placeholder.html#scripts)
{% framework extras %} if you use Flash Messages (https://docs.octobercms.com/3.x/cms/features/flash-messages.html)

Captcha Types

  • default
  • math
  • flat
  • mini
  • inverse

To use your own settings, publish config.

$ php artisan vendor:publish --provider="Mews\Captcha\CaptchaServiceProvider"


return [
    'default'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
        'math'      => true, //Enable Math Captcha
    // ...

Using example

url = "/captcha"
layout = "default"
title = "captcha"

type = "math"
showrefresh = "show"
iconclass = "icon-refresh"
function onSubmit()
    $rules = ['captcha' => 'required|captcha_api:'. request('captcha_key') . ',math'];

    $messages = [
            'captcha.captcha_api' => 'wrong captcha',

    $validator = validator()->make(request()->all(), $rules, $messages);

    if ($validator->fails()) {

        throw new ValidationException($validator);

    } else {



<div class="container">
   <form data-request="onSubmit"  data-request-flash  data-request-complete="updateCaptcha(this)">
      <div class="mb-3">
         <label for="exampleInputEmail1" class="form-label">Login</label>
         <input type="text" name="login" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
         <div id="emailHelp" class="form-text">We ll never share your email with anyone else.</div>
      <div class="mb-3">
         <label for="exampleInputPassword1" class="form-label">Password</label>
         <input type="password" name="pass" class="form-control" id="exampleInputPassword1">
      <div class="mb-3">
         <div class="row">
            <div class="col-2">
               <label for="exampleInputPassword3" class="form-label">Captcha</label>
               <input type="text" name="captcha" class="form-control" id="exampleInputPassword3">
            <div class="col-6 d-flex align-items-center mt-4 pt-2">
               {% component 'sitecaptcha' %}
      <div class="mb-3 form-check">
         <input type="checkbox" class="form-check-input" id="exampleCheck1">
         <label class="form-check-label" for="exampleCheck1">Check me out</label>
      <button type="submit" class="btn btn-primary">Submit</button>

You can also use Captcha::check_api('captcha text', 'captcha key') to check captcha.

function onSubmit()

    if (Captcha::check_api(request('captcha'), request('captcha_key'))){      
    } else {
        Flash::error('Wrong captcha');


Video manual

  • Found the plugin useful on 5 Dec, 2021

    this is an simple and usefull plugin, but when I install this plugin I have this error all over the site when I want to send an email: "Target class [mail.manager] does not exist."

  • author

    Replied on 5 Dec, 2021

    Thanks. To fix the error with mail, update the plugin.

  • Found the plugin useful on 22 Jun, 2021

    Thank you, Vladimir, that ist useful.

  • Found the plugin useful on 7 May, 2020

    Nice plugin, very good alternative to google recaptcha, tks! the only thing I would like to add is "event.stopPropagation()" or "return false;" inside updateCaptcha() method because if the page is long when you click on refresh icon it takes you to the page top (I think that way it can be solved)

  • author

    Replied on 7 May, 2020

    Thanks for your feedback. I fixed the captcha refresh. Please update the plugin.


Compatibility with October v3.3

Apr 19, 2023


mail fix

Dec 05, 2021



May 07, 2020


Initialize plugin.

May 06, 2020