Product Updates

Announcing Glin Profanity v3: ML-Powered Profanity Detection That Actually Works

G

Gagan Singh

December 31, 2025

2 min read
7 views
Share

We're excited to announce the release of Glin Profanity v3 — a complete overhaul of our profanity detection library that finally solves the evasion problem plaguing content moderation.

The Problem with Traditional Filters

Most profanity filters are trivially bypassed. Users type f*ck, sh1t, or fսck (with Cyrillic characters) and walk right through. Glin Profanity v3 doesn't just check against a word list — it understands evasion tactics.

What's New in v3

Leetspeak Detection

Catch obfuscated profanity that slips past other filters:

  • f4ck, @ss, $h!t → Detected

  • f u c k (spaced characters) → Detected

  • fuuuuck (repeated characters) → Detected

  • Three intensity levels: basic, moderate, aggressive

Unicode Normalization

Stop Cyrillic and homoglyph attacks:

  • fυck (Greek upsilon) → Detected

  • shіt (Cyrillic i) → Detected

  • Zero-width characters, full-width characters → Handled

  • Two-pass normalization prevents false positives (no more flagging "Scunthorpe")

ML-Powered Toxicity Detection

Optional TensorFlow.js integration for context-aware detection:

  • Detects toxicity, insults, threats, identity attacks

  • Catches subtle toxic content that rule-based systems miss

  • Configurable thresholds and hybrid rule+ML modes

800x Performance Improvement

Smart LRU caching means repeated checks are near-instant:

  • First check: processes text

  • Subsequent checks: returns cached result

23 Languages Supported

Arabic, Chinese, Czech, Danish, Dutch, English, Esperanto, Finnish, French, German, Hindi, Hungarian, Italian, Japanese, Korean, Norwegian, Persian, Polish, Portuguese, Russian, Spanish, Swedish, Thai, and Turkish.

Installation

JavaScript/TypeScript

npm install glin-profanity

Python

pip install glin-profanity

Quick Example

import { Filter } from 'glin-profanity';

const filter = new Filter({
  detectLeetspeak: true,
  normalizeUnicode: true,
  cacheResults: true
});

filter.isProfane('f4ck');    // true
filter.isProfane('fսck');    // true (Cyrillic 'ս')
filter.isProfane('sh1t');    // true

React Hook

import { useProfanityChecker } from 'glin-profanity';

function ChatInput() {
  const { result, checkText } = useProfanityChecker({
    detectLeetspeak: true
  });
  
  return (
    <input onChange={(e) => checkText(e.target.value)} />
  );
}

Performance

OperationGlin ProfanityCompetitorsSimple check21M ops/sec650K-1.2M ops/secWith leetspeak8.5M ops/secN/AMulti-language18M ops/sec400K ops/sec

Try It Now

Upgrade Today

If you're using an older version:

npm install glin-profanity@latest

Glin Profanity v3 is MIT licensed — free for personal and commercial use.


Ready to stop profanity evasion?

Try the Live Demo | View on GitHub | NPM | PyPI

Questions or feedback? Open an issue or reach out to us at glincker.com.

Gagan Singh

Share: