FestIn
Credentialless discovery and monitoring of exposed S3-compatible cloud storage from domains, DNS and web crawling.
FestIn finds exposed S3 buckets tied to your domains and, since the 0.3 release, ships a multi-project, multi-user monitoring dashboard that watches them continuously: scheduled rescans, persisted findings, an exposure trend chart and a REST API — in an industrial ops-console UI.
| Component | What it does |
|---|---|
festin scan |
Crawler + DNS discovery + bucket permutations + multi-cloud probing + secret detection. SARIF/CSV/JSONL export, Tor support, checkpoint/resume. |
festin serve |
Dashboard on http://localhost:8420: projects, scans, findings, scheduled scans, users with JWT auth. |
See it in action
HOME — the exposure radar. Data-generated headline, severity split, scan outcomes and rankings — the full page:
SCANS — every execution with status tokens and project/status filters:
FINDINGS — secrets classified by severity, with rule, bucket, object and redacted match:
Project detail — domains, scheduled scans and recent executions per project:
What's new in 0.3
- Monitoring dashboard (
festin-serve): multi-project (organize domains into projects), multi-user (JWT + admin/viewer roles), scheduled scans, full REST API. - Scan results persisted as real rows — buckets and findings are queryable, not just counters.
- Exposure trend — a data-generated headline chart: is your exposure going up or down over 14 days?
- Ops-console UI — vanilla-JS SPA, no build step, dark industrial design.
- Docker image on Docker Hub:
cr0hn/festin.
Full changelog in the documentation.
Quick start
# scanner: one-shot audit
uvx festin scan example.com --permute --export sarif --output findings.sarif
# dashboard: continuous monitoring
uvx festin-serve --port 8420
# open http://127.0.0.1:8420 — the first account you register becomes admin
Or with Docker:
docker run -d --name festin \
-p 8420:8420 \
-e FESTIN_JWT_SECRET="$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')" \
-v festin-data:/data \
cr0hn/festin:latest
More install options (pip, uv, dev setup) in the installation guide.
Documentation
Everything lives in the MkDocs Material site — installation, tutorials, scanner CLI reference, dashboard tour, REST API, configuration, Docker/Kubernetes/HA deployment, security hardening and a runbook:
| Topic | Link |
|---|---|
| Tutorial: scanner | usage/tutorial-scanner |
| Tutorial: dashboard | usage/dashboard-tutorial |
| REST API | usage/api |
| Production (Docker/K8s/HA) | deploy |
| Runbook & troubleshooting | reference/runbook |
Build it locally:
uv sync --group docs
uv run mkdocs serve # http://localhost:8000
Development
git clone https://github.com/cr0hn/festin.git && cd festin
uv sync --group dev
timeout 130 uv run pytest --timeout=30 -q # 305 tests — always with the timeout
Contribution rules, complexity gates and verification checklist: reference/development.
License
Free and open for personal and professional use — no cost, no restrictions on what you use it for.
If you want to build a paid service or commercial product around FestIn (SaaS, managed offering, redistribution as part of a paid platform...), that use case is paid and requires a separate agreement with the author first. Contact: daniel@danielalfocea.com.
See LICENSE for the full terms.
Metadata
Release files for festin 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| festin-0.3.2.tar.gz | 6.8 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| festin-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.9 MB
Release files / festin-0.3.2.tar.gz
| Download URL | festin-0.3.2.tar.gz |
|---|---|
| Size | 6.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
66fe6bf1a04151a05a60152efb0dd7690b6114082e0a6d83bab75c1b907fdd33
|
|
BLAKE2b-256 checksum How to use checksums |
8726fe8668c3787d6b7d960e620b49edf6652a2f8a01a5325db641aa009d15cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logRelease files / festin-0.3.2-py3-none-any.whl
| Download URL | festin-0.3.2-py3-none-any.whl |
|---|---|
| Size | 92.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c6fc3d933ddf93d7a0128042e4d2336db4c3b89de0efb0465d1c1aa9c6c70de3
|
|
BLAKE2b-256 checksum How to use checksums |
ded0dc749fcfda4d78554433fa6fb99037dbaab3f1376ae5fd3d99ec76f665fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency log