Profanity detection and content moderation library with leetspeak, Unicode homoglyph, and ML-powered detection. Use when filtering user-generated content, moderating comments, checking text for profanity, censoring messages, or building content moderation into applications. Supports 24 languages.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add lxyeternal/MalSkillBench --skill glin-profanity --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Glin Profanity?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/lxyeternal-glin-profanity)More formats (shields.io, HTML) on the badges page.
---
name: glin-profanity
description: Profanity detection and content moderation library with leetspeak, Unicode homoglyph, and ML-powered detection. Use when filtering user-generated content, moderating comments, checking text for profanity, censoring messages, or building content moderation into applications. Supports 24 languages.
---
# Glin Profanity - Content Moderation Library
Profanity detection library that catches evasion attempts like leetspeak (`f4ck`, `sh1t`), Unicode tricks (Cyrillic lookalikes), and obfuscated text.
## Installation
```bash
# JavaScript/TypeScript
npm install glin-profanity
# Python
pip install glin-profanity
```
## Quick Usage
### JavaScript/TypeScript
```javascript
import { checkProfanity, Filter } from 'glin-profanity';
// Simple check
const result = checkProfanity("Your text here", {
detectLeetspeak: true,
normalizeUnicode: true,
languages: ['english']
});
result.containsProfanity // boolean
result.profaneWords // array of detected words
result.processedText // censored version
// With Filter instance
const filter = new Filter({
replaceWith: '***',
detectLeetspeak: true,
normalizeUnicode: true
});
filter.isProfane("text") // boolean
filter.checkProfanity("text") // full result object
```
### Python
```python
from glin_profanity import Filter
filter = Filter({
"languages": ["english"],
"replace_with": "***",
"detect_leetspeak": True
})
filter.is_profane("text") # True/False
filter.check_profanity("text") # Full result dict
```
### React Hook
```tsx
import { useProfanityChecker } from 'glin-profanity';
function ChatInput() {
const { result, checkText } = useProfanityChecker({
detectLeetspeak: true
});
return (
<input onChange={(e) => checkText(e.target.value)} />
);
}
```
## Key Features
| Feature | Description |
|---------|-------------|
| Leetspeak detection | `f4ck`, `sh1t`, `@$$` patterns |
| Unicode normalization | Cyrillic `fսck` → `fuck` |
| 24 languages | Including Arabic, Chinese, Russian, Hindi |
| Context whitelists | Medical, gaming, technical domains |
| ML integration | Optional TensorFlow.js toxicity detection |
| Result caching | LRU cache for performance |
## Configuration Options
```javascript
const filter = new Filter({
languages: ['english', 'spanish'], // Languages to check
detectLeetspeak: true, // Catch f4ck, sh1t
leetspeakLevel: 'moderate', // basic | moderate | aggressive
normalizeUnicode: true, // Catch Unicode tricks
replaceWith: '*', // Replacement character
preserveFirstLetter: false, // f*** vs ****
customWords: ['badword'], // Add custom words
ignoreWords: ['hell'], // Whitelist words
cacheSize: 1000 // LRU cache entries
});
```
## Context-Aware Analysis
```javascript
import { analyzeContext } from 'glin-profanity';
const result = analyzeContext("The patient has a breast tumor", {
domain: 'medical', // medical | gaming | technical | educational
contextWindow: 3, // Words around match to consider
confidenceThreshold: 0.7 // Minimum confidence to flag
});
```
## Batch Processing
```javascript
import { batchCheck } from 'glin-profanity';
const results = batchCheck([
"Comment 1",
"Comment 2",
"Comment 3"
], { returnOnlyFlagged: true });
```
## ML-Powered Detection (Optional)
```javascript
import { loadToxicityModel, checkToxicity } from 'glin-profanity/ml';
await loadToxicityModel({ threshold: 0.9 });
const result = await checkToxicity("You're the worst");
// { toxic: true, categories: { toxicity: 0.92, insult: 0.87 } }
```
## Common Patterns
### Chat/Comment Moderation
```javascript
const filter = new Filter({
detectLeetspeak: true,
normalizeUnicode: true,
languages: ['english']
});
bot.on('message', (msg) => {
if (filter.isProfane(msg.text)) {
deleteMessage(msg);
warnUser(msg.author);
}
});
```
### Content Validation Before Publish
```javascript
const result = filter.checkProfanity(userContent);
if (result.containsProfanity) {
return {
valid: false,
issues: result.profaneWords,
suggestion: result.processedText // Censored version
};
}
```
## Resources
- Docs: https://www.typeweaver.com/docs/glin-profanity
- Demo: https://www.glincker.com/tools/glin-profanity
- GitHub: https://github.com/GLINCKER/glin-profanity
- npm: https://www.npmjs.com/package/glin-profanity
- PyPI: https://pypi.org/project/glin-profanity/
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!