<spanclass=toggle-dark><svgxmlns="http://www.w3.org/2000/svg"width="20"height="20"viewBox="0 0 24 24"fill="none"stroke="currentcolor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="feather feather-moon"><pathd="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg></span><spanclass=toggle-light><svgxmlns="http://www.w3.org/2000/svg"width="20"height="20"viewBox="0 0 24 24"fill="none"stroke="currentcolor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="feather feather-sun"><circlecx="12"cy="12"r="5"/><linex1="12"y1="1"x2="12"y2="3"/><linex1="12"y1="21"x2="12"y2="23"/><linex1="4.22"y1="4.22"x2="5.64"y2="5.64"/><linex1="18.36"y1="18.36"x2="19.78"y2="19.78"/><linex1="1"y1="12"x2="3"y2="12"/><linex1="21"y1="12"x2="23"y2="12"/><linex1="4.22"y1="19.78"x2="5.64"y2="18.36"/><linex1="18.36"y1="5.64"x2="19.78"y2="4.22"/></svg></span></button><ulclass="navbar-nav social-nav order-3 order-md-5"><liclass=nav-item><aclass=nav-linkhref=https://github.com/mCaptcha><svgxmlns="http://www.w3.org/2000/svg"width="20"height="20"viewBox="0 0 24 24"fill="none"stroke="currentcolor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"class="feather feather-github"><pathd="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37.0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg><spanclass="ms-2 visually-hidden">GitHub</span></a></li></ul><divclass="collapse navbar-collapse order-4 order-md-1"><ulclass="navbar-nav main-nav me-auto order-5 order-md-2"><liclass="nav-item active"><aclass=nav-linkhref=/blog/>Blog</a></li><liclass=nav-item><aclass=nav-linkhref=/community/>Community</a></li><liclass=nav-item><aclass=nav-linkhref=/contact/>Contact</a></li><liclass=nav-item><aclass=nav-linkhref=/about/>About</a></li><liclass=nav-item><aclass=nav-linkhref=/docs/introduction/installing-captcha/>Docs</a></li></ul><divclass="break order-6 d-md-none"></div><formclass="navbar-form flex-grow-1 order-7 order-md-3"><inputid=userinputclass="form-control is-search"type=searchplaceholder="Search docs..."aria-label="Search docs..."autocomplete=off><divid=suggestionsclass="shadow bg-white rounded"></div></form></div></div></header><divclass="wrap container"role=document><divclass=content><divclass="row flex-xl-nowrap"><navclass="docs-toc d-none d-xl-block col-xl-3"aria-label="Secondary navigation"><divclass=page-links><h3>On this page</h3><navid=TableOfContents><ul><li><ahref=#1-full-librejs-compliance>1. Full LibreJS Compliance</a></li><li><ahref=#2-javascript-polyfill>2. JavaScript PolyFill</a></li><li><ahref=#3-integration-libraries-for-vanilla-js-react-and-svelte>3. Integration libraries for Vanilla JS, React and Svelte:</a></li></ul></nav></div></nav><mainclass="docs-content col-lg-11 col-xl-9 mx-xl-auto"><article><divclass=blog-header><h1>December, 2021: Monthly Report</h1><p><small>Posted December 23, 2021 by <aclass="stretched-link position-relative"href=/contributors/aravinth-manivannan/>Aravinth Manivannan</a> ‐ <strong>2 min read</strong></small><p><p><small>Last Edited June 14, 2022</small><p></div><pclass=lead>We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?</p><p>Hello and welcome to the first edition of the monthly report!</p><p>I believe free software like mCaptcha is critical to a healthy internet
process.</p><p>This month, the following things were accomplished:</p><h2id=1-full-librejs-compliance>1. Full LibreJS Compliance</h2><p>The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant!</p><figure><imgclass="img-fluid lazyload blur-up"data-sizes=autosrc=/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_20x0_resize_q75_box.jpgdata-srcset="/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_500x0_resize_q75_box.jpg 500w"width=915height=908alt="Screenshot of mCaptcha admin dashboard with GNU LibreJS extension's report in frame.LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the AGPL license."><noscript><imgclass=img-fluidsizes=100vwsrcset="/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_500x0_resize_q75_box.jpg 500w"src=/blog/december-2021-monthly-report/librejs-dashboard.jpgwidth=915height=908alt="Screenshot of mCaptcha admin dashboard with GNU LibreJS extension's report in frame.LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the AGPL license."></noscript><figcaptionclass=figure-caption>LibreJS report of the dashboard webpage</figcaption></figure><figure><imgclass="img-fluid lazyload blur-up"data-sizes=autosrc=/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_20x0_resize_q75_box.jpgdata-srcset="/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_500x0_resize_q75_box.jpg 500w"width=904height=913alt="Screenshot of mCaptcha client-side widget(I'm-not-a-robot widget) with GNU LibreJS extension's report in frame. LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the X11(aka MIT license). It should also detect the Apache licensing but I probably botched it up."><noscript><imgclass=img-fluidsizes=100vwsrcset="/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_500x0_resize_q75_box.jpg 500w"src=/blog/december-2021-monthly-report/librejs-widget.jpgwidth=904height=913alt="ScreenshotofmCaptchaclient-sidewidget(I'm-not-a-robotwidget)withGNULibreJSexten
algorithm used in mCaptcha. This meanth browsers without WASM support
couldn’t process CAPTCHAs. This month, <ahref=https://github.com/mCaptcha/pow_sha256-polyfill>a pure JavaScript(TypeScript,
technically) implementation</a> was released to
overcome this limitation.</p><h2id=3-integration-libraries-for-vanilla-js-react-and-svelte>3. Integration libraries for Vanilla JS, React and Svelte:</h2><p>To make migration from existing CAPTCHA deployments to mCaptha,
integration libraries for <ahref=https://www.npmjs.com/package/@mcaptcha/vanilla-glue>Vanilla
task for folks that are justgetting started with mCaptcha.</p><figure><imgclass="img-fluid lazyload blur-up"data-sizes=autosrc=/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_20x0_resize_q75_box.jpgdata-srcset="/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_500x0_resize_q75_box.jpg 500w"width=819height=741alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with advance configuration options"><noscript><imgclass=img-fluidsizes=100vwsrcset="/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_500x0_resize_q75_box.jpg 500w"src=/blog/december-2021-monthly-report/captcha-advanced-config.jpgwidth=819height=741alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with advance configuration options"></noscript><figcaptionclass=figure-caption>CAPTCHA creation with advance configuration options</figcaption></figure><p>A new CAPTCHA creation format is rolled out which generates a
took the user’s website down.</p><figure><imgclass="img-fluid lazyload blur-up"data-sizes=autosrc=/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_20x0_resize_q75_box.jpgdata-srcset="/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_500x0_resize_q75_box.jpg 500w"width=776height=556alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with easy configuration options"><noscript><imgclass=img-fluidsizes=100vwsrcset="/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_500x0_resize_q75_box.jpg 500w"src=/blog/december-2021-monthly-report/captcha-easy-config.jpgwidth=776height=556alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with easy configuration options"></noscript><figcaptionclass=figure-caption>CAPTCHA creation with easy configuration options</figcaption></figure><p>Of course, the advance option is available and can always be swished to