BLACK FRIDAY
Save 59% on PageForge Annual $191/year $485/year
Claim 59% Off →
CryptX icon
Actively maintained Tested with WP 7.1 #10 in antispam

CryptX

No more SPAM by spiders scanning your site for email addresses!

Active installs10K+10K+ tier
Downloads · 30d6.7K▼ -45.2% vs prev. 30d
Rating4.5/520 reviews
Health score92/100Excellent
All-time downloads303.1KSince Oct 2007
Support resolved1 / 1100% in last 2 months
RequiresWP 6.7PHP 8.1+
Downloads · 7d833▼ -80.7% week over week
Our verdict

Safe pick

Yes — CryptX is a safe, well-maintained plugin to use in 2026. It runs on 10K+ sites, is rated 4.5/5 and was last updated 2 weeks ago, and scores 92/100 on our health check.

  • Proven at scale on 10K+ active sites
  • Loved by users — 4.5/5 from 20 reviews
  • Actively developed — last update 2 weeks ago
  • Tested with the latest WordPress (7.1)
  • Needs PHP 8.1 or newer

How does it stack up?

Side-by-side on installs, updates, ratings & support

Daily downloads

7411.5K2.2KJun 28Aug 11Sep 25
Yesterday106
Daily average (1y)108
Peak day3,524Dec 11, 2025
Last 12 months39.1K

Download spikes usually follow a new release — each site that auto-updates counts as a download.

Rankings

Where CryptX stands today

WordPress.org search rankings

Live position in the plugin search, top 100
KeywordPositionCompeting pluginsCategory
antispam #19 214 Best antispam plugins →
email encryption #9 694 Best email encryption plugins →
mail #73 4,158 Best mail plugins →
privacy #66 10,000 Best privacy plugins →
spam protection #52 1,479 Best spam protection plugins →

Version adoption

Share of active sites per release.

  • 4.245.8%
  • 3.316.7%
  • 4.015.2%
  • 3.414.2%
  • 3.25.8%
  • Other2.4%

Rating breakdown

★★★★★★★★★★ 4.5 from 20 reviews

  • 5★85.0%
  • 4★0.00%
  • 3★0.00%
  • 2★5.0%
  • 1★10.0%

About CryptX

From the official readme · v4.2.1

Description

No more SPAM by spiders scanning your site for email addresses. With CryptX you can hide all your email addresses, with and without a mailto-link, by converting them using javascript or UNICODE.

CryptX protects your email addresses from spambots while keeping them readable and functional for your visitors. The plugin automatically detects email addresses in your content and encrypts them using various methods including JavaScript encryption, Unicode conversion, and image replacement.

Key Features:

  • Automatic Email Detection – Finds and encrypts email addresses in posts, pages, comments, and widgets
  • Multiple Encryption Methods – JavaScript, Unicode, image replacement, and custom text options
  • Widget Support – Works with text widgets and other widget content
  • RSS Feed Control – Option to disable encryption in RSS feeds
  • False-Positive List – Endings such as jpeg or png that keep file names like logo@2x.png from being read as addresses
  • Exempt Addresses – Leave a single address, or a whole domain, exactly as written
  • Per-Post Control – Enable/disable encryption on individual posts and pages
  • Editor Block – “Protected email address”, with fields for link text, subject, cc and bcc
  • WP-CLI – wp cryptx settings and wp cryptx scan, both per site on a network
  • Multisite – every site keeps its own settings; a network default decides what a new one starts with
  • Shortcode Support – Use [cryptx]email@example.com[/cryptx] for manual encryption
  • Site Health Check – Reports whether your addresses really are hidden, measured rather than described
  • Template Functions – Developer-friendly functions for theme integration

Plugin Homepage

Development

The settings screen is built with React and the WordPress component library. The
human-readable source ships with the plugin, so the compiled files can be
rebuilt and compared:

  1. cd into the plugin directory
  2. npm install
  3. npm run build

That reproduces build/index.js, build/index.css, build/index-rtl.css and
build/index.asset.php byte for byte from src/. The toolchain is
@wordpress/scripts; package.json and package-lock.json are included so the
exact dependency versions are pinned.

The front end script js/cryptx.min.js is produced from js/cryptx.js with
terser@5.50.0 -c -m.

js/admin-notice.js has no build step at all. It is twenty lines, it runs only

in the admin, and it ships exactly as written.

Installation

  1. Upload the CryptX folder to the /wp-content/plugins/ directory
  2. Activate the plugin through the ‘Plugins’ menu in WordPress
  3. Configure the plugin settings under Settings > CryptX
  4. Your email addresses will now be automatically protected!

Frequently asked questions

How does CryptX protect my email addresses?

CryptX uses various methods to hide email addresses from spambots while keeping them functional for visitors. Methods include JavaScript encryption, Unicode conversion, and replacing emails with images or custom text.

Will this affect my website’s performance?

CryptX is designed to be lightweight and only loads JavaScript when needed. The performance impact is minimal.

Can I exclude certain email addresses from encryption?

Yes. Under Settings / CryptX / Exceptions there is a list of addresses to leave alone. Write “info@example.com” for a single address, or “@example.com” to cover every address at that domain. CryptX leaves those addresses exactly as written — it does not mask, link or encrypt them — which is what you want for an address a helpdesk has to read out of the page, or one shown in a code example. There are two limits on purpose. Inside [cryptx]...[/cryptx] — and inside the “Protected email address” block, which is the same instruction in a different shape — nothing is exempt: it says “protect this…

What about addresses at an internationalised domain?

An address such as “post@münchen.de” is not protected — CryptX looks for addresses using the ASCII form, so it does not recognise one with an accented or non-Latin domain in the first place. Write the domain in its punycode form (“post@xn--mnchen-3ya.de”) and everything works as usual. The editor block says so where you type it; elsewhere the address is simply left as it was.

Does it work on a multisite network?

Yes, including network activation. Every site keeps its own settings and its own encryption secret, so nothing one site publishes can be read with another site’s key. Sites created later are set up the same way as those that existed at activation time, and uninstalling removes the plugin’s data from every site in the network. The settings live per site, because that is where the addresses and the design live. A site administrator configures their own site as usual. Since 4.2.0 a network administrator can set the defaults a newly created site starts with, under Network Admin / Settings /…

Can I use CryptX from the command line?

Yes, with WP-CLI. wp cryptx settings lists every setting with its current value; wp cryptx settings reads one and wp cryptx settings writes it, through the same validation the settings screen uses. wp cryptx scan is the one worth knowing about. It runs every published post through the filters that render it and reports the ones that still carry a readable address -- the question you actually have after changing a setting, and the one the settings screen cannot answer, because it only ever renders a single sample. An "encoded" verdict means the address is in the page as HTML entities…

Does it work with contact forms?

CryptX primarily works with email addresses displayed in content. It doesn’t interfere with contact forms or other form functionality.

Can I disable encryption on specific posts?

Yes, you can enable the meta box feature to control encryption on individual posts and pages. For more information, visit the Plugin Homepage

Changelog

Fixes protected links that did nothing on themes which exchange page content in the browser. Nothing to do -- unless you run a full-page cache: empty it, because pages stored before the update do not carry the script yet and stay broken until the cache turns over.

4.2.1

  • Fixed with the JavaScript variant switched on, the script is now delivered on every page, not only on pages that themselves carry a protected address. Themes that exchange page content in the browser without rebuilding the document — swup.js and other client-side routers work that way — brought protected links onto the screen for which no click handler had ever been loaded. Those links did nothing at all until the visitor reloaded the page in full. It has been that way since 4.0.12, when delivery was made conditional on the page at hand
  • Fixed the same for the stylesheet with “Instead of the address, show” set to one of the picture options: css/cryptx.css is now delivered as soon as a picture variant is configured, so a link that reaches the browser after the page was built is still shown at the right size
  • Fixed a single click could open the mail program twice wherever a theme or a loader runs the script a second time on the same document. The guard against attaching the click handler twice is now kept on the document rather than inside the script, which also makes initCryptxLinkHandler(document) work on a second document, as it was always meant to
  • if you run a full-page cache, empty it after the update: pages stored before it do not carry the script yet, and they stay broken until the cache turns over by itself

4.2.0

  • New on a multisite network, the network administrator can set the defaults a newly created site starts with, under Network Admin / Settings / CryptX. Sites that already exist are never changed — every site keeps its own settings, as it has since 4.1.1. Two settings are deliberately not shareable: excluded post IDs and the uploaded image refer to things that exist on one site only, and copying the first of them is exactly what left addresses unprotected before 4.1.1
  • New WP-CLI: wp cryptx settings reads and writes the settings, wp cryptx scan runs the body and the title of every published post through the real filters and reports the ones that still carry a readable address — including addresses in titles, which CryptX cannot protect because a title reaches the page along a path no plugin filter touches. With --url both work per site, so a network can be handled from a shell loop rather than from forty screens
  • Fixed changing “Key strengthening” under Advanced silently broke every link that had already been delivered — in every cached page and in every browser tab still open. The number of rounds was read from the page’s configuration at the moment of the click, not from the link, so a link made with the old value could no longer be opened. Each link now records what it was made with, and the ones written before this update keep working as they did
  • New the encryption secrets can be replaced, under Advanced. Useful after restoring a backup that may have been seen by somebody else. Links already published keep working, because each carries the key it was made with; the secret behind the picture variant is opened on your server instead, so the replaced one is kept for 30 days and pictures in pages still cached go on working until then
  • Security with “The address drawn into a picture” selected, the address stood in the web address the picture is fetched under. It was written into the page as HTML entities, which looks hidden and is not — the browser resolves them before it makes the request, so the address travelled in plain text in the request line of every image load: into your access log, and through every proxy and CDN on the way. The variant meant to hide addresses best handed them to more machines than a plainly written one would have. The picture is now fetched under a token that says nothing about the address, and the alt text no longer carries it either. Pictures in pages that were already cached keep working — that fallback is a bridge over the lifetime of a page cache and is planned to go in 5.0
  • New a block for the editor: “Protected email address”, with fields for the link text and for a prefilled subject, message, cc and bcc. Until now the only deliberate way to protect one address was to type a shortcode into a paragraph, which works but is invisible in the inserter. The block is rendered on the server on every request, so nothing encrypted is stored in the post — a saved link would stop working the moment the encryption secret changed
  • New single addresses can be left alone. A new field under Exceptions takes a list — “info@example.com” for one address, “@example.com” for every address at a domain — and CryptX leaves those exactly as written: no masking, no link, no encryption. Until now the answer was that it could not be done, which left no way to keep a helpdesk address machine-readable or an address in a code example intact. Two limits on purpose: inside [cryptx]...[/cryptx] nothing is exempt, because a shortcode is a narrower instruction than a setting; and in comments only a whole address counts, not the domain form, so an exempt domain cannot be used to harvest the addresses visitors leave behind
  • Fixed the marker CryptX leaves behind while it sets a shortcode aside could be written by an author. Whoever typed it — in a post explaining CryptX, in a code example, or in a comment — had the set-aside content substituted into their text. The marker now carries a random part per page, so it cannot be typed
  • New a Site Health check reports whether addresses really are hidden. It runs a test address through the same filters your pages use and judges the result, instead of describing what the settings ought to do. Choices that deliberately leave addresses in the open — unprotected feeds, excluded posts, a filter switched off — are listed but do not count against the result
  • New after a feature update, CryptX asks once whether you would write a review. Once, and with every limit that word implies: a fortnight after the update rather than on the day of it, never after a bugfix release, gone by itself after a month even if you ignore it, and gone for good the moment you decline — for you, not for your colleagues, who each get their own chance to answer. Nothing is attached to it: no setting unlocked in return, no reminder that comes back later

4.1.1

  • Fixed a mailto link carrying a subject lost it, and the address inside the encrypted link was corrupted — “sales@example.com?subject=Hello” became “sales@example.comsubjectHello” and the link went nowhere. Subject, body, cc and bcc now travel inside the encrypted link (thx to pbmedia)
  • New the shortcode understands subject, body, cc and bcc: [cryptx subject="Price enquiry" cc="sales@example.com"]info@example.com[/cryptx]. The attribute “subject” was accepted and silently discarded before
  • Fixed cryptx_encrypt() turned markup in the passed content into visible text — a <br> came out as &lt;br&gt;. It now keeps what a post may contain and still drops scripts (thx to Fint Studio)
  • Fixed an address directly following a tag, as in Contact:<br>info@example.com, was not linked, while the display text was replaced anyway — the address disappeared from the page without a working link taking its place
  • the setting for the old “javascript:” link format now warns that page builders which run content through wp_kses_post, Elementor’s text widget among them, strip the protocol and break every link
  • Fixed on block themes the shortcode did nothing at all: CryptX runs on render_block, which fires before do_shortcode, so it saw the raw “[cryptx]” text. The address went unlinked but was replaced anyway, and the inserted “[at]”/”[dot]” tore the shortcode apart. Unexpanded shortcodes are now left alone until they are expanded
  • Fixed a link written “MAILTO:” in capitals kept its href and ended up dead
  • the shortcode is left alone only where WordPress expands it afterwards; in comments, excerpts and custom fields it stays visible as text, but the address inside it is obfuscated as before
  • Fixed a shortcode inside a registered block pattern was left unprotected: core/pattern renders with do_blocks() alone, so nothing came along afterwards to expand it
  • Fixed with “Leave RSS feeds unprotected” switched off, the feed still carried the address in its <description>. A feed is built from its own filters — the_excerpt_rss and the_content_feed — and CryptX was on neither
  • Fixed a very long subject or body produced a link the browser refused to follow: the limit counted characters before encoding, while the browser counts the encoded address. 400 characters of Japanese became more than 3600
  • when a mailto link has to be shortened to stay inside the length a browser will follow, whole cc and bcc addresses are dropped rather than cut — a fragment like “chef@examp” in a header is worse than a missing recipient
  • with “Leave RSS feeds unprotected” on, CryptX now leaves feeds alone entirely; the autolink step still rewrote bare addresses there
  • Fixed every update reset settings it had no business touching: the chosen font fell back to the first available one, the text colour gained another “#” each time — “#3366ff” became “##3366ff” — and the encryption secret was discarded, so links on already cached pages stopped resolving. These were one-time migrations from 4.0.12 that ran on every version bump; each is now tied to the version it belongs to
  • Security on a multisite network, activating the plugin network-wide copied the first site’s settings to every other site. The exclusion list came with them, so a post ID excluded on the first site left the post with that ID unprotected on all the others — addresses in plain text on sites whose administrator had excluded nothing. The encryption secret was copied as well; that matters less, because it is published in every generated link anyway, but it did let one site’s key open a stray ciphertext from another. Each site now keeps its own settings
  • New full multisite support: network activation sets every site up individually, sites created later are handled the same way, deactivation clears the transients of all of them, and errors that only a network administrator can act on are now shown in the network backend
  • Fixed the front end script declared CONFIG, ITERATIONS, SecureUtils and other very general names in the global scope. A second script using any of them did not overwrite CryptX, it stopped one of the two scripts outright. Everything now lives in a closure; the documented entry points stay where they were and a window.CryptX namespace was added
  • the link in the plugin list is built from the settings page slug instead of the directory name, so renaming the folder no longer breaks it
  • version warnings on activation are shown only to users who can act on them
  • removed a registration on “wp_update_post”, a hook WordPress does not have; updates were always covered by “wp_insert_post”

4.1.0

  • New the settings screen has been rebuilt from scratch: mobile first, with every option explained where you set it
  • New a live preview shows what visitors see and what a spam bot finds in the source, updated as you change settings — including a warning when a setting leaves an address readable
  • the settings are now grouped by what you want to achieve: Protection, Appearance, Exceptions, Advanced, Help
  • the link format and the PBKDF2 iteration count can now be set in the interface; previously they could only be changed in the database
  • “Use secure encryption” and “Encryption mode” were two switches for one decision and could contradict each other. They are now a single choice
  • switching tabs no longer reloads the page, and the address bar still carries the tab so links and bookmarks keep working
  • unsaved changes are kept when switching tabs, and leaving the page warns about them

4.0.12

  • Security fixed an issue where a failed PNG request could print PHP warnings into the image stream, disclosing the server path, and where a long request URL could make the plugin allocate hundreds of megabytes — an unauthenticated way to exhaust the memory limit
  • Security the exclusion setting “Disable CryptX for this post/page” is now protected by a nonce and a capability check
  • Fixed “Disable CryptX for this post/page” no longer gets silently cleared. Any save that did not come from the classic editor form — the REST API, WP-CLI, an autosave, the block editor — used to drop the post from the exclusion list
  • Performance the encryption key is now derived once per page instead of once per email address. On a page with 20 addresses in secure mode this cuts about 1.8 seconds of server time
  • Performance javascript and stylesheet are only loaded when the page actually contains a protected address
  • Encrypted links no longer use a “javascript:” URI, which any stricter Content-Security-Policy blocks outright. The payload now travels in data attributes and a click handler takes over. Links already delivered keep working; set the option “link_mode” to “js” to get the old form back
  • The encryption password is no longer derived from AUTH_KEY. It is published in the page markup, so it is now a random secret instead. Existing installations keep their stored value
  • added uninstall.php — the plugin option used to stay in the database forever after deletion
  • fixed broken markup in the image variant, where the alt attribute was missing its closing quote
  • content is no longer lost if a regular expression hits the PCRE backtrack limit
  • Security the PBKDF2 iteration count from the settings is now validated. A non-numeric or zero value made the front end fatal on every page carrying an address
  • Fixed a font whose name ends in a letter that also appears in “.ttf” was shown truncated in the settings (“Liberation Seri”)
  • Fixed anchors carrying a “>” inside an attribute value are no longer mangled when the address is encrypted
  • Fixed the changelog tab no longer breaks if the readme cannot be parsed
  • Fixed presentation settings were losing a backslash on every save
  • declared compatibility with WordPress 7.0
  • Licensing replaced the bundled fonts Arial, Times New Roman and Verdana with the freely licensed Liberation Sans, Liberation Serif and DejaVu Sans. The previous files were the original Monotype/Microsoft typefaces, whose licence does not allow redistribution inside a GPL package. If you had selected one of them, CryptX falls back to the first available font automatically.
  • fixed the plugin version constant, which still read 4.0.10 in version 4.0.11 and therefore kept browsers from loading the updated javascript
  • corrected the declared PHP requirement to 8.1, matching the check performed at runtime
  • fixed the minimum WordPress version shown in the error notice (said 5.0, checked for 6.7)
  • fixed a PHP warning caused by an undefined variable when activating the plugin without a font setting
  • the default font is now chosen in a reproducible order instead of depending on the file system
  • the shortcode documentation listed the attributes “linktext” and “subject”, which were never evaluated. It now describes the attributes that actually work.

4.0.11

  • fixed a bug in the deprecated “encryptx” function (thx to Machtnix)

Full changelog on WordPress.org →

Screenshots

Protection: where CryptX looks for addresses, and how it hides them. Every option is explained where you set it.
Protection: where CryptX looks for addresses, and how it hides them. Every option is…
A live preview shows what visitors see and what a spam bot finds in the source, and warns when a setting leaves an address readable.
A live preview shows what visitors see and what a spam bot finds in the source, and warns…
Exceptions: single posts, file names that look like addresses, and feeds.
Exceptions: single posts, file names that look like addresses, and feeds.
Advanced settings. The defaults are right for almost every site.
Advanced settings. The defaults are right for almost every site.
Help: shortcode, template functions, and what changed in each release.
Help: shortcode, template functions, and what changed in each release.
The settings screen on a phone.
The settings screen on a phone.
The "Protected email address" block in the editor, with its link text and prefilled message.
The "Protected email address" block in the editor, with its link text and prefilled…

For developers

Is this your plugin? Show off the numbers.

Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.

Active installs badge Rating badge Health score badge

Best CryptX alternatives

All antispam plugins →
Alternatives
Rank Plugin Active installs Rating Updated Health
1 Akismet Anti-spam: Spam Protection Akismet Anti-spam: Spam Protection The best anti-spam protection to block spam comments and spam in a contact form. The most… by Automattic 5M+ ★★★★★★★★★★ 4.7 (1.2K) 1 month ago 94
2 Antispam Bee Antispam Bee Sophisticated antispam plugin for effective daily comment and trackback spam-fighting… by pluginkollektiv 700K+ ★★★★★★★★★★ 4.8 (226) 1 month ago 78
3 Spam protection, Honeypot, Anti-Spam by CleanTalk Spam protection, Honeypot, Anti-Spam by CleanTalk Top-rated antispam for contact forms, comments, WooCommerce, eCommerce, and login. No… by CleanTalk Inc 200K+ ★★★★★★★★★★ 4.8 (3.2K) 1 week ago 93
4 reCaptcha by BestWebSoft reCaptcha by BestWebSoft Protect WordPress website forms from spam entries with Google reCAPTCHA. by bestwebsoft 100K+ ★★★★★★★★★★ 3.9 (391) 5 months ago 76
5 hCaptcha for WP hCaptcha for WP The strongest CAPTCHA. Switch from reCAPTCHA and Turnstile for free. Works with 60+… by hcaptcha 70K+ ★★★★★★★★★★ 4.6 (86) 2 weeks ago 93
6 Titan Anti-spam & Security – Brute Force Protection, 2FA & Spam Filter Titan Anti-spam & Security Block spam comments, defend against login attacks, strengthen site security. Anti-spam… by Themeisle 50K+ ★★★★★★★★★★ 4.5 (370) 1 month ago 85
7 Spam Protection | Maspik Spam Protection | Maspik Blocks spam the moment you activate it. No CAPTCHA, no setup, no API key. Multi-Layer. Just… by yonifre 30K+ ★★★★★★★★★★ 4.7 (87) 1 day ago 94
8 AntiSpam for Contact Form 7 AntiSpam for Contact Form 7 A trustworthy antispam plugin for Contact Form 7. Wave goodbye to spam and keep your inbox… by Erik 10K+ ★★★★★★★★★★ 4.2 (13) 5 months ago 49
9 Captcha by BestWebSoft – Advanced Spam Protection, Math & OCR-Friendly Captcha for Site Forms Captcha by BestWebSoft 1 The Ultimate Spam Protection Plugin Using Captcha for WordPress Forms. by bestwebsoft 10K+ ★★★★★★★★★★ 4.1 (21) 6 months ago 58
11 Friendly Captcha for WordPress Friendly Captcha for WordPress Friendly Captcha is a privacy-first anti-bot solution that protects WordPress website forms… by Friendly Captcha 10K+ ★★★★★★★★★★ 3.9 (18) 3 weeks ago 70

FAQ

CryptX: quick answers

Straight answers, pulled from live WordPress.org data.

Live data from WordPress.org · checked Sep 26, 2026

Is CryptX free?

Yes. CryptX is free to download and use from the official WordPress.org plugin directory.

Is CryptX safe to use in 2026?

Yes — CryptX is a safe, well-maintained plugin to use in 2026. It runs on 10K+ sites, is rated 4.5/5 and was last updated 2 weeks ago, and scores 92/100 on our health check.

How many websites use CryptX?

CryptX is active on 10K+ WordPress websites and has been downloaded 303,080 times since it launched in October 2007. It was downloaded 6,687 times in the last 30 days.

Does CryptX work with WordPress 7.1?

Yes. The developer has tested CryptX up to WordPress 7.1.2, the latest release. It requires WordPress 6.7 or newer.

What PHP version does CryptX need?

CryptX requires PHP 8.1 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.

When was CryptX last updated?

The latest version, 4.2.1, was released on September 11, 2026 (2 weeks ago).

Who makes CryptX?

CryptX is developed and maintained by Ralf Weber.

What are the best alternatives to CryptX?

The most popular alternatives to CryptX are Akismet Anti-spam: Spam Pro… (5M+ installs), Antispam Bee (700K+ installs) and Spam protection, Honeypot,… (200K+ installs).

Powered by PageForge

Want thousands of pages that rank like these? Build them in an afternoon.

This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.

  • CSV, Google Sheets & API data sources
  • AI content, schema & internal links per page
  • Works with Elementor, Gutenberg, Yoast & Rank Math
  • Free on WordPress.org — no credit card
Sarah is here to help!
Hi there! 👋 Need help finding what you're looking for?
Sarah
Sarah
Online & Ready to Help
Hi there! 👋 Need help finding what you're looking for?

We'll use this to continue our conversation

Just now ✓ Verified

Join 500+ SEO Pros Scaling Their Strategy

Get exclusive programmatic SEO tactics, AI content workflows, and the latest PageForge updates delivered straight to your inbox. Stay ahead of the algorithm.

We care about your data in our privacy policy.