kristijandraca / is-burner-email
Fast, offline burner / disposable email detection. Three lists (blacklist, whitelist, graylist), two modes (normal, strict), zero runtime deps. PHP port of is-burner-email.
Package info
github.com/kristijandraca/is-burner-email
Language:TypeScript
pkg:composer/kristijandraca/is-burner-email
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
README
Fast, offline burner / disposable email detection. Same three-list model (blacklist / whitelist / graylist) and two modes (normal / strict) across six languages.
Packages
| Language | Registry | Install | Docs |
|---|---|---|---|
| JavaScript / TypeScript | npm | npm install is-burner-email |
packages/js/ |
| Python | PyPI | pip install is-burner-email |
packages/py/ |
| Go | go.dev | go get github.com/kristijandraca/is-burner-email/packages/go |
packages/go/ |
| PHP | Packagist | composer require kristijandraca/is-burner-email |
packages/php/ |
| C# / .NET | NuGet | dotnet add package Kristijandraca.IsBurnerEmail |
packages/csharp/ |
| Kotlin / JVM | Maven Central | implementation("io.github.kristijandraca:is-burner-email:1.3.1") |
packages/kotlin/ |
Every package ships the same bundled domain data and exposes the same API shape.
Shared features
- Offline. Domain lists are bundled at package-build time. No network calls at runtime.
- Zero runtime dependencies in every language.
- Three lists.
blacklist— burners (always blocked)whitelist— always allowed; overrides everything elsegraylist— email alias / forwarding services (SimpleLogin, DuckDuckGo, Firefox Relay); blocked only in strict mode
- Two modes.
normal(blacklist only) orstrict(blacklist + graylist) - CLI in every language —
burner <email>with the same flags and exit codes - Refreshed weekly, reviewed before release — a cron rebuilds the aggregated blacklist from upstream sources and opens a PR with the diff; a maintainer reviews and merges it, then cuts a patch release. No upstream change reaches a published package unattended.
Data model
All four packages read the same canonical files in data/:
| File | Contents | Edited by |
|---|---|---|
blacklist.txt |
Aggregated from 5 upstream sources + extra-blacklist.txt, minus whitelist and graylist |
auto-generated |
whitelist.txt |
Curated "always allow" list (major providers, companies, IANA test domains) | humans |
graylist.txt |
Curated alias / forwarding services | humans |
extra-blacklist.txt |
Manually-curated additions to the blacklist | humans |
scripts/build-lists.ts fetches, merges, and syncs these files into the language packages that need local copies (Go for go:embed, PHP for runtime reads, Python for editable installs, C# for EmbeddedResource, Kotlin for JVM classpath resources). The JS package reads root data/ directly via tsup's text loader.
Monorepo layout
/
├── data/ # Canonical data (single source of truth)
├── packages/
│ ├── js/ # npm package
│ ├── py/ # PyPI package
│ ├── go/ # Go module
│ ├── php/ # Composer package
│ ├── csharp/ # NuGet package
│ └── kotlin/ # Maven Central package
├── scripts/
│ └── build-lists.ts # Fetches sources, rebuilds blacklist, syncs copies
└── .github/workflows/ # CI + release pipelines
Sources
The blacklist aggregates and deduplicates domains from:
- disposable-email-domains/disposable-email-domains
- tompec/disposable-email-domains
- FGRibreau/mailchecker
- 7c/fakefilter
- martenson/disposable-email-domains
Community
CONTRIBUTING.md— dev setup, adding domains, PR processSECURITY.md— reporting vulnerabilitiesACKNOWLEDGMENTS.md— upstream list credits
License
MIT