@saugatedith/gangajal
v0.1.0
Published
Fast, deterministic profanity filter using WebAssembly - works across all languages
Maintainers
Readme
Gangajal — Global Profanity Filtering Engine
Secure • Fast • Cross-language • No raw bad words in repo
Gangajal is a deterministic, high-performance profanity filter that works in every programming language via WebAssembly.
It uses Unicode normalization, Bloom filters, and SHA-256 hashing — keeping your dictionary 100% private while delivering lightning-fast filtering.
✨ Features
- Supports all world languages (Unicode NFKC + letters + combining marks)
- Zero raw profanity words ever in the repository
- Extremely fast (Bloom filter + binary search)
- One WASM core — works in Node.js, Python, Go, .NET, Java, Rust, browsers, etc.
- Deterministic & reproducible
- Async API with asset hot-reloading support
🚀 Quick Start
Install
npm install @saugatedith/gangajalUsage
const { validate, reloadAssets } = require('@saugatedith/gangajal');
(async () => {
// Full mask mode (0): masks entire word
console.log(await validate("hello badword here", 0)); // "hello ******** here"
// Partial mask mode (1): keeps first char
console.log(await validate("hello badword here", 1)); // "hello b****** here"
})();Optional (only if you changed assets/ on disk while your process is running):
reloadAssets();Modes
mode=0: Full mask - replaces entire word with*(e.g.,badword→*******)mode=1: Partial mask - keeps first character (e.g.,badword→b******)
ESM Support
If your file is *.js, either set "type": "module" in your project's package.json or rename your entry file to *.mjs to avoid Node's [MODULE_TYPELESS_PACKAGE_JSON] warning.
import { validate, reloadAssets } from '@saugatedith/gangajal';
const clean = await validate("text to filter", 1);
console.log(clean);
reloadAssets();Architecture
- Binary Assets (public) →
badwords.bloom+badwords.hash.bin - WASM Core → same engine everywhere
- Language Bindings → JS, Python, Go, .NET, etc.
Full specification → SPEC.md
Also Available for Python
from gangajal import validate, reload_assets
print(validate("this is inappropriate", 1))pip install gangajalLicense
MIT © Saugat
