Skip to content
PluginStats

form-honeypot-guard weekly downloads statistics

By MrLouisWright (2 listings) · npm · Webpack plugins

Block form spam bots without a captcha: honeypot + signed timing tokens + JS proof + optional Altcha-style proof-of-work + rate limiting. Webpack 5 and Vite plugins, a <2 kB client, Express/Fastify/Next/SvelteKit/Remix/Astro helpers, and a React wrapper.

View on npm Stale · Oct 18, 2026

form-honeypot-guard has 164 recorded weekly downloads on npm.

Weekly downloads
164
Official API · Oct 18, 2026
7-day growth
—
Insufficient history
30-day growth
—
Insufficient history
90-day growth
—
Insufficient history
Rank
—
Among tracked npm listings

About form-honeypot-guard

form-honeypot-guard

npm CI license: MIT node >=18 zero deps client <2 kB gz

Block form spam bots without a captcha. It layers cheap checks that most bots fail and real people never notice:

  • an off-screen, accessible honeypot field with a randomised, realistic name
  • an HMAC-signed timestamp token, so submissions can't come too fast, too late, tampered with or replayed
  • a JS proof field that only a real browser fills in (configurable for progressive enhancement)
  • light interaction signals: keypress, pointer and focus counts
  • optional content heuristics (link spam, URLs in name fields, spam keywords, unexpected scripts)
  • sliding-window rate limiting per IP (and optionally per email or fingerprint), with a correct 429 and Retry-After
  • optional proof-of-work (Altcha-style, privacy-friendly — no captcha vendor) for stronger bot resistance

The webpack plugin is the main way in. It adds the honeypot markup to your built HTML at build time, injects the tiny client runtime, randomises field names on every build and writes a manifest so client and server use the same names. There's also a Vite plugin, plus server helpers for Express/Connect, Fastify, Next.js, SvelteKit, Remix, Astro and any Web Fetch runtime (Netlify, Vercel, Cloudflare, Deno, Bun), plus an optional React wrapper. Zero runtime dependencies, Node ≥ 18, dual ESM + CommonJS (import / require), TypeScript types in dist/*.d.ts (generated in CI via npm run build). Tests live under test/ and run in GitHub Actions CI.

Install

npm i form-honeypot-guard
npx form-honeypot-guard secret     # generate FORM_GUARD_SECRET

Quick start: webpack (recommended)

Mark the forms you want to protect with data-guard (or use forms: 'all'):

<form data-guard method="post" action="/contact">
  <input name="email" type="email" required>
  <textarea name="message" required></textarea>
  <button>Send</button>
</form>
// webpack.config.js (CommonJS works: the plugin ships a CJS build)
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { FormGuardPlugin } = require('form-honeypot-guard/webpack');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({ template: './src/index.html' }),
    new FormGuardPlugin({
      forms: 'form[data-guard]',          // or 'all'
      secretEnv: 'FORM_GUARD_SECRET',     // the server reads the secret from this env var
      minTime: 3000,
      manifestPath: 'server/form-guard.manifest.json',
    }),
  ],
};
// ESM config
import { FormGuardPlugin } from 'form-honeypot-guard/webpack';

What happens on each build:

  1. Every emitted HTML file is scanned, whether it came from html-webpack-plugin or is a plain .html asset (copy-webpack-plugin, custom loaders). Matching forms get the honeypot markup, an empty token field and data-fg-guarded in the HTML, so the trap is there before any JavaScript loads.
  2. The client runtime (about 1.3 kB gzipped) is emitted as form-guard.[contenthash:8].js and added as a <script defer>. When html-webpack-plugin is installed it goes through HWP's own tag pipeline (alterAssetTagGroups). HWP isn't required. Pass inline: true to inline the runtime instead.
  3. Field names are randomised per build (middle_name_28e1, fg_t_5b57f4, …) and written to form-guard.manifest.json (plus manifestPath if you set it). The manifest holds names and timings only, never the secret.
  4. The virtual module form-guard/config exposes the same manifest to your bundle: import { fields } from 'form-guard/config'.
  5. Warnings appear in compilation.warnings for guarded forms that don't use method="post", have no action, or already contain a field with the honeypot's name.

It hooks compilation.hooks.processAssets at PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE + 1, so it runs right after html-webpack-plugin. Names are generated once per plugin instance, which keeps watch-mode rebuilds and the persistent cache stable. Pass seed for reproducible names across builds. In development mode it logs what it guarded through webpack's infrastructure logger.

Then the server:

import express from 'express';
import { expressGuard, cleanFields } from 'form-honeypot-guard';

const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(expressGuard({ manifest: 'server/form-guard.manifest.json', paths: ['/contact'] }));
app.post('/contact', (req, res) => {
  sendEmail(cleanFields(req.body, { manifest: 'server/form-guard.manifest.json' }));
  res.redirect('/thanks');
});
app.use(express.static('dist'));

expressGuard also serves GET /__form-guard/token. The runtime fetches a fresh signed token from it when the page loads.

Vite

// vite.config.js
import { formGuard } from 'form-honeypot-guard/vite';
export default { plugins: [formGuard({ forms: 'form[data-guard]' })] };

Uses transformIndexHtml to add the honeypot markup and the inlined runtime, serves form-guard/config as a virtual module and emits form-guard.manifest.json in the build.

Express / Connect…

Description from the npm listing.

  • honeypot
  • spam
  • form
  • anti-spam
  • captcha
  • captcha-alternative
  • altcha
  • proof-of-work
  • bot
  • bot-protection
  • webpack
  • webpack-plugin
  • vite
  • vite-plugin
  • express
  • fastify
  • nextjs
  • sveltekit
  • remix
  • astro

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

form-honeypot-guard weekly downloads on npm, last 90 days: 164 weekly downloads as of Oct 18, 2026.form-honeypot-guardWeekly downloads on npm · Last 90 days164downloads / week145150155160165170175180185Jul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekOct 18, 2026 – Oct 18, 2026 · 1 observations · Updated Oct 18, 2026pluginstats.com
form-honeypot-guard weekly downloads on npm, last 90 days: 164 weekly downloads as of Oct 18, 2026.

7/30/90-day growth

form-honeypot-guard weekly downloads growth on npm: 7-day growth unavailable, 30-day growth unavailable, 90-day growth unavailable.form-honeypot-guardWeekly downloads growth on npm164downloads / week now7-day growthinsufficient historyInsufficient history30-day growthinsufficient historyInsufficient history90-day growthinsufficient historyInsufficient historyGrowth vs. nearest observation to each baseline date · Updated Oct 18, 2026pluginstats.com
form-honeypot-guard weekly downloads growth on npm: 7-day growth unavailable, 30-day growth unavailable, 90-day growth unavailable.

Ranking history

form-honeypot-guard npm ranking history: currently #1730 (by weekly downloads).form-honeypot-guardnpm ranking · by weekly downloads · Last 90 days#1730current rank#1728#1729#1730#1731#1732Jul 23Aug 7Aug 22Sep 6Sep 21Oct 6Oct 21rankOct 21, 2026 – Oct 21, 2026 · 1 observations · Updated Oct 18, 2026pluginstats.com
form-honeypot-guard npm ranking history: currently #1730 (by weekly downloads).

Listing placement

All npm2,429 listings · 122 pages · 1,215 shown · page 90, #9 (overall #1,789)
All npm: every listing in weekly downloads order

Listing placement

Webpack plugins260 listings · 13 pages · page 5, #17 (overall #97)
Webpack plugins: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (1)
Recent weekly downloads observations for form-honeypot-guard
Date (UTC)Weekly downloadsChange vs. previous
164—

Similar npm Webpack plugins plugins

All 20 form-honeypot-guard alternatives

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/form-honeypot-guard. First seen Oct 21, 2026; last successful collection Oct 23, 2026. See the methodology.