npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

emdash-plugin-ai-comment-moderation

v1.0.0

Published

An EmDash plugin for comment moderation using Cloudflare Workers AI.

Readme

emdash-plugin-ai-comment-moderation

An EmDash plugin for comment moderation using Cloudflare Workers AI.

Features

  • Spam & Toxicity Detection: Analyzes comments to identify spam and toxic content.
  • KV-Driven Configuration: Settings are stored in EmDash's Key-Value store. No environment variables required.
  • Fail-safe Fallback: Replicates EmDash's built-in 4-step moderation logic if the Cloudflare AI is unavailable or unconfigured.

Installation

Add the plugin to your astro-blog (or other EmDash-powered project):

"dependencies": {
  "emdash-plugin-ai-comment-moderation": "file:../emdash-plugin-ai-comment-moderation"
}

In your astro.config.mjs:

import { emdash } from "emdash/astro";
import { aiCommentModerationPlugin } from "emdash-plugin-ai-comment-moderation";

export default defineConfig({
  // ...
  integrations: [
    emdash({
      plugins: [aiCommentModerationPlugin()],
      // ...
    })
  ]
});

Configuration

Seed or set the following keys in your plugin's KV store:

  • settings:accountId: Your Cloudflare Account ID.
  • settings:apiToken: Your Cloudflare API Token (with access to Workers AI).
  • settings:model: (Optional) The Cloudflare Workers AI model to run. Defaults to @cf/meta/llama-3.1-8b-instruct (seeded during installation).

Moderation Logic

  1. Empty check: Empty comments are automatically held as pending.
  2. AI Moderation:
    • Queries Cloudflare Workers AI using the configured model.
    • Parses the JSON response for { spam: boolean, toxic: boolean }.
    • Decisions:
      • spam=true: Marked as spam.
      • toxic=true (and not spam): Marked as pending.
      • Otherwise: Marked as approved.
    • The raw decision (e.g. AI: spam=false, toxic=false) is saved in the moderation reason.
  3. Fallback: If AI credentials are not configured, the API fails, or parsing fails, the plugin falls back to EmDash's default 4-step logic:
    • Auto-approve if commentsAutoApproveUsers is enabled and user is authenticated.
    • Auto-approve if collection moderation is set to "none".
    • Auto-approve if collection moderation is "first_time" and commenter is returning (has previous approved comments).
    • Otherwise, holds as pending.