Announcing Glin Profanity v3: ML-Powered Profanity Detection That Actually Works
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→ Detectedf u c k(spaced characters) → Detectedfuuuuck(repeated characters) → DetectedThree intensity levels:
basic,moderate,aggressive
Unicode Normalization
Stop Cyrillic and homoglyph attacks:
fυck(Greek upsilon) → Detectedshіt(Cyrillic i) → DetectedZero-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
Live Demo — Test it in your browser
NPM Package — JavaScript/TypeScript
PyPI Package — Python
GitHub Repository — Source code & docs
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.