Repository navigation
Tech Stack and Licenses
Claude edited this page Sep 14, 2026
·
1 revision
| Package | License | What it's for |
|---|---|---|
fastapi, uvicorn
|
MIT, BSD-3-Clause | Web framework and ASGI server |
pydantic, pydantic-settings
|
MIT | Request/response validation, typed env-var config |
sqlalchemy[asyncio], asyncpg
|
MIT, Apache-2.0 | Async ORM and Postgres driver |
alembic |
MIT | Schema migrations |
msal |
MIT | Microsoft Graph / Entra token acquisition (client-credentials for mailbox access) |
pyjwt[crypto] |
MIT | Verifies Entra SSO id_tokens (PyJWKClient against the tenant's real JWKS) |
cryptography |
Apache-2.0 OR BSD-3-Clause | Fernet encryption for secrets at rest, and RSA/Ed25519 key parsing for the DKIM checker |
argon2-cffi |
MIT | Local-auth password hashing |
pyotp, qrcode
|
MIT, BSD-3-Clause | TOTP enrollment and verification for local auth |
email-validator |
Unlicense | Email address format validation |
parsedmarc |
Apache-2.0 | Parses DMARC aggregate/forensic and TLS-RPT report XML/JSON — used as a library only, not its CLI or Elasticsearch output writers |
dnspython |
ISC | Low-level DNS primitives the checkers are built on |
httpx |
BSD-3-Clause | HTTP client — Graph API calls, MTA-STS policy file fetches |
python-multipart |
Apache-2.0 | Pulled in by FastAPI for optional form-data parsing; not used directly anywhere in this app |
pytest, pytest-asyncio
|
MIT, Apache-2.0 | Test suite (backend/requirements-dev.txt, dev-only — not part of the deployed runtime) |
| Package | License | What it's for |
|---|---|---|
react, react-dom
|
MIT | UI |
react-router-dom |
MIT | Client-side routing |
@tanstack/react-query |
MIT | Server-state fetching/caching |
lucide-react |
ISC | Icons |
vite, @vitejs/plugin-react
|
MIT | Build tooling (dev-only — not part of the deployed runtime) |
typescript |
Apache-2.0 | Type checking (tsc -b runs as part of every build) |
Every package actually shipped to the browser (react, react-dom,
react-router-dom, @tanstack/react-query, lucide-react, and their own
transitive dependencies) is MIT or ISC — fully permissive.
| Component | License | What it's for |
|---|---|---|
| PostgreSQL 16 | PostgreSQL License (permissive) | Primary datastore; row-level security is what actually enforces tenant isolation |
mvance/unbound |
BSD-3-Clause | A dedicated, DNSSEC-validating resolver every check query goes through, kept separate from the host's own resolver so its cache behavior can be tuned independently (see resolver/overrides.conf) |
| Docker Compose | Apache-2.0 | Orchestration — no Kubernetes, no message queue; a single worker replica is enough at this scale |
Every dependency is exact-pinned (==, not a range) in backend/requirements.txt
and frontend/package.json — deliberate, not an oversight: a range lets a
future npm install/pip install silently pull in whatever's newest at that
moment, good or compromised. New dependencies should be pinned to their
current latest stable/LTS release, never a range and never a preview/RC build.
← Back to the README · Live demo · Report an issue · MIT licensed
- Quick Start: Docker Compose
- Deploying with Portainer
- Deploying on Azure
- Configuration Reference
- Onboarding an Organization
- IMAP Mailbox
- Google Workspace Mailbox
- Sign-in Providers
- Multi-Tenancy & RLS
- DMARC Subdomain Inheritance
- Report Attribution
- SPF Conditional Mode
- Detected Domains
- DNS Check Scheduling
- Domain Rating
🏗️ Architecture
🗺️ Roadmap