Open sourceItalian profanity filter for JS & Flutter

GOOD NAMES.
BAD WORDS.
FILTERED.

Spots bestemmie, insults and tricks like “D10 p0rc0” in usernames — and leaves Claudio and Diodato alone.

npm install italian-profanity
Read the docs

Try it

Runs in your browser · …
LOADING

Loading the detector…

—

NOT ALL FILTERS
SPEAK ITALIAN.

01
p0rc0

Catch evasions.

Leetspeak, repeated letters, punctuation, accents and lookalike Unicode are handled by the matcher.

02
Claudio ✓

Respect real names.

Whole-word rules and explicit exceptions reduce collisions with ordinary Italian names and surnames.

03
JS DART

Same answer. Anywhere.

Shared rules and regression fixtures keep the TypeScript and Dart/Flutter engines aligned.

READY IN
A FEW LINES.

No API key, no network calls. Pick a balanced, strict or lenient policy and decide what to allow, review or block.

JAVASCRIPT / TYPESCRIPT
npm
$npm install italian-profanity
import { createChecker } from "italian-profanity";

const checker = createChecker({ profile: "balanced" });
checker.check("D10 p0rc0").action; // "block"
checker.check("Claudio").action;  // "allow"
DART / FLUTTER
pub.dev
$flutter pub add italian_profanity
import 'package:italian_profanity/italian_profanity.dart';

final checker = ItalianProfanity.createChecker();
checker.check('D10 p0rc0').action; // Action.block

QUESTIONS,
ANSWERED.

What is italian-profanity?

italian-profanity is a free, open-source library that detects Italian profanity — blasphemy (bestemmie), insults (insulti) and vulgar words (parolacce) — in short user-generated text such as nicknames, usernames, room names and team names. It is available for JavaScript/TypeScript on npm and for Dart/Flutter on pub.dev, with the same rules and the same verdicts in both.

How do I add an Italian profanity filter to a JavaScript or Flutter app?

Install it with "npm install italian-profanity" or "flutter pub add italian_profanity", then call check(text). The result has an action — allow, review or block — and the list of matches with category, severity and position.

Does it block innocent names like Claudio or Diodato?

No. Rules match whole words, explicit exceptions cover common collisions, and every release is audited against a large corpus of Italian names, surnames and common words. A few ambiguous homographs return review instead of block under the default balanced profile.

Does it detect Italian blasphemy (bestemmie)?

Yes. Divine terms are flagged only when combined with an insult, so "dio" alone is allowed while variants such as "D10 p0rc0" are blocked.

Which evasion tricks does it catch?

Leetspeak (0 for o, 1 for i), separators and punctuation between letters, spaced letters, repeated letters, accents and Unicode look-alike characters.

Does it send user text to a server?

No. The filter runs entirely inside your app or browser, offline, with zero runtime dependencies. The playground on this site also runs locally and does not upload what you type.

Does it support English?

Yes, optionally. Italian is on by default; enable a curated English dataset with languages: ["it", "en"]. It is not a replacement for a full English moderation service.

Is it free to use in commercial products?

Yes. italian-profanity is released under the MIT license.

Is a profanity filter enough to moderate a community?

No. It is a lexical filter: it does not understand intent or context, and an allowed input is not guaranteed to be appropriate. Combine it with server-side checks, reporting and human review.

LET'S KEEP THE
GOOD NAMES.

Free, MIT licensed and open to contributions.