Source: https://seerepo.com/r/bunkerity/bunkerweb/built
Markdown source: https://seerepo.com/r/bunkerity/bunkerweb/built.md
Description: bunkerweb is a Python repo built with werkzeug, Flask, FastAPI, starlette, AIOHTTP, and 2 more. It stores its data in Postgres.

# What is bunkerweb built with?

bunkerweb is a Python repo built with werkzeug, Flask, FastAPI, starlette, AIOHTTP, and 2 more. It stores its data in Postgres, reaches it with alembic and SQLAlchemy, signs people in with acme, Google, google-auth-httplib2, itsdangerous, josepy, and 7 more, makes its content with et-xmlfile, mako, pillow, jinja2, markupsafe, and 5 more, validates its data with annotated-types, email-validator, msgspec, wtforms, Pydantic, and 1 more, is tested with mock, requests-mock, pyotp, Microsoft.NET.Test.Sdk, NUnit3TestAdapter, and 1 more, deploys with Ansible, boto3, botocore, certbot, OpenTelemetry, and 4 more, and uses hiredis, psycopg, psycopg-binary, psycopg-pool, s3transfer, and 3 more. It has 245,695 written lines, with 133 test files.

Read on November 12, 2026, at commit b09e418.

Repository: https://github.com/bunkerity/bunkerweb

## Frontend (/)

### The base

- **[werkzeug](https://seerepo.com/uses/werkzeug)**: 5 files

### Styles

- **[soupsieve](https://seerepo.com/uses/soupsieve)**

## Backend (/)

### The base

- **[Flask](https://seerepo.com/uses/flask)**: 30 files
- **[FastAPI](https://seerepo.com/uses/fastapi)**: 17 files
- **[starlette](https://seerepo.com/uses/starlette)**: 1 file

### Data

- **hiredis**
- **[psycopg](https://seerepo.com/uses/psycopg)**
- **psycopg-binary**
- **psycopg-pool**
- **[s3transfer](https://seerepo.com/uses/s3transfer)**
- **[Redis](https://seerepo.com/uses/redis)**: 8 files · [src/common/utils/redis_keys.py, line 15](https://github.com/bunkerity/bunkerweb/blob/b09e418447718dc9a7eb40158e3e12ce719bfd5f/src/common/utils/redis_keys.py#L15)
- **[Postgres](https://seerepo.com/uses/postgres)**: 4 files · [src/common/db/requirements.arm.in, line 4](https://github.com/bunkerity/bunkerweb/blob/b09e418447718dc9a7eb40158e3e12ce719bfd5f/src/common/db/requirements.arm.in#L4)
- **cachelib**: 2 files
- **[pymysql](https://seerepo.com/uses/pymysql)**: 1 file

### Data access

- **[alembic](https://seerepo.com/uses/alembic)**: 356 files
- **[SQLAlchemy](https://seerepo.com/uses/sqlalchemy)**: 180 files

### Sign-in

- **acme**
- **[Google](https://seerepo.com/uses/google)**
- **[google-auth-httplib2](https://seerepo.com/uses/google-auth-httplib2)**
- **[itsdangerous](https://seerepo.com/uses/itsdangerous)**
- **josepy**
- **libpass**
- **[oauthlib](https://seerepo.com/uses/oauthlib)**
- **[requests-oauthlib](https://seerepo.com/uses/requests-oauthlib)**
- **flask-login**: 25 files
- **[bcrypt](https://seerepo.com/uses/bcrypt)**: 6 files
- **[cryptography](https://seerepo.com/uses/cryptography)**: 6 files
- **flask-session**: 2 files

## Support (/)

### The base

- **[AIOHTTP](https://seerepo.com/uses/aiohttp)**
- **[anyio](https://seerepo.com/uses/anyio)**
- **[uvicorn](https://seerepo.com/uses/uvicorn)**: 1 file

### Content

- **et-xmlfile**
- **[mako](https://seerepo.com/uses/mako)**
- **[pillow](https://seerepo.com/uses/pillow)**
- **[jinja2](https://seerepo.com/uses/jinja2)**: 4 files
- **[markupsafe](https://seerepo.com/uses/markupsafe)**: 4 files
- **[openpyxl](https://seerepo.com/uses/openpyxl)**: 2 files
- **[python-magic](https://seerepo.com/uses/python-magic)**: 2 files
- **[qrcode](https://seerepo.com/uses/qrcode)**: 2 files
- **[beautifulsoup4](https://seerepo.com/uses/beautifulsoup4)**: 1 file
- **defusedcsv**: 1 file

### Validation

- **[annotated-types](https://seerepo.com/uses/annotated-types)**
- **[email-validator](https://seerepo.com/uses/email-validator)**
- **[msgspec](https://seerepo.com/uses/msgspec)**
- **wtforms**
- **[Pydantic](https://seerepo.com/uses/pydantic)**: 5 files
- **flask-wtf**: 1 file

### Testing

- **mock**
- **requests-mock**
- **pyotp**: 1 file

### Deploy

- **Ansible**
- **[boto3](https://seerepo.com/uses/boto3)**
- **[botocore](https://seerepo.com/uses/botocore)**
- **certbot**
- **[OpenTelemetry](https://seerepo.com/uses/opentelemetry)**
- **[kubernetes](https://seerepo.com/uses/kubernetes)**: 3 files
- **[docker](https://seerepo.com/uses/docker)**: 2 files
- **[Gunicorn](https://seerepo.com/uses/gunicorn)**: 2 files
- **[psutil](https://seerepo.com/uses/psutil)**: 1 file

### Tools

- **annotated-doc**
- **click**
- **pycparser**
- **Setuptools**
- **typing-extensions**
- **watchfiles**
- **packaging**: 2 files

### Other

- **aiohappyeyeballs**
- **aiohttp-retry**
- **aiosignal**
- **async-timeout**
- **attrs**
- **backports-zstd**
- **blinker**
- **brotli**
- **certifi**
- **cffi**
- **charset-normalizer**
- **configargparse**
- **configobj**
- **deprecated**
- **distro**
- **dns-lexicon**
- **dnspython**
- **durationpy**
- **filelock**
- **frozenlist**
- **google-api-core**
- **googleapis-common-protos**
- **h11**
- **h2**
- **hpack**
- **httpcore**
- **httplib2**
- **httptools**
- **hyperframe**
- **idna**
- **importlib-metadata**
- **jmespath**
- **jsonpickle**
- **limits**
- **multidict**
- **parsedatetime**
- **propcache**
- **proto-plus**
- **protobuf**
- **pyasn1**
- **pyasn1-modules**
- **pyparsing**
- **pyrfc3339**
- **python-dateutil**
- **python-dotenv**
- **python-multipart**
- **pytz**
- **requests-file**
- **requests-unixsocket**
- **resolvelib**
- **six**
- **sniffio**
- **tldextract**
- **typing-inspection**
- **ua-parser**
- **uritemplate**
- **uvloop**
- **websockets**
- **wrapt**
- **yarl**
- **zipp**
- **zope-interface**
- **requests**: 17 files
- **regex**: 5 files
- **pyyaml**: 3 files
- **schedule**: 2 files
- **flask-compress**: 1 file
- **httpx**: 1 file
- **maxminddb**: 1 file
- **pydantic-settings**: 1 file
- **pyopenssl**: 1 file
- **slowapi**: 1 file
- **urllib3**: 1 file
- **user-agents**: 1 file
- **websocket-client**: 1 file

## Frontend (src/deps)

### Interface

- **[prompt-toolkit](https://seerepo.com/uses/prompt-toolkit)**
- **[questionary](https://seerepo.com/uses/questionary)**

## Support (src/deps)

### Content

- **[jinja2](https://seerepo.com/uses/jinja2)**

### Testing

- **Microsoft.NET.Test.Sdk**
- **NUnit3TestAdapter**
- **NUnit**: 1 file

### Tools

- **build**
- **click**
- **docopt-ng**
- **packaging**
- **pip**
- **pip-tools**
- **pyproject-hooks**
- **Setuptools**
- **wheel**

### Other

- **certifi**
- **charset-normalizer**
- **dec**
- **idna**
- **importlib-metadata**
- **pycryptodome**
- **requests**
- **tomli**
- **toposort**
- **urllib3**
- **wcwidth**
- **zipp**
- **brotli**: 2 files

## Support (src/deps/src/brotli/js)

### Tools

- **yargs**: 1 file

## Other repos with a similar stack

- [apache/superset](https://seerepo.com/r/apache/superset/built): werkzeug, Flask, starlette, s3transfer, Redis, Postgres, cachelib, pymysql, AIOHTTP, anyio, uvicorn, soupsieve, alembic, SQLAlchemy, Google, itsdangerous, oauthlib, requests-oauthlib, flask-login, bcrypt, cryptography, flask-session, et-xmlfile, mako, pillow, jinja2, markupsafe, openpyxl, beautifulsoup4, annotated-types, email-validator, msgspec, wtforms, Pydantic, flask-wtf, boto3, botocore, OpenTelemetry, docker, Gunicorn, psutil, prompt-toolkit · [Compare](https://seerepo.com/compare/apache/superset/vs/bunkerity/bunkerweb)
- [ray-project/ray](https://seerepo.com/r/ray-project/ray/built): werkzeug, Flask, FastAPI, starlette, s3transfer, Redis, pymysql, AIOHTTP, anyio, uvicorn, soupsieve, alembic, SQLAlchemy, Google, google-auth-httplib2, itsdangerous, oauthlib, requests-oauthlib, cryptography, et-xmlfile, mako, pillow, jinja2, markupsafe, openpyxl, beautifulsoup4, annotated-types, Pydantic, boto3, botocore, OpenTelemetry, kubernetes, docker, Gunicorn, psutil, prompt-toolkit · [Compare](https://seerepo.com/compare/bunkerity/bunkerweb/vs/ray-project/ray)
- [apache/airflow](https://seerepo.com/r/apache/airflow/built): werkzeug, Flask, FastAPI, psycopg, Redis, pymysql, AIOHTTP, uvicorn, alembic, SQLAlchemy, Google, google-auth-httplib2, flask-login, cryptography, flask-session, jinja2, beautifulsoup4, msgspec, wtforms, Pydantic, flask-wtf, boto3, OpenTelemetry, kubernetes, docker, psutil · [Compare](https://seerepo.com/compare/apache/airflow/vs/bunkerity/bunkerweb)
- [agno-agi/agno](https://seerepo.com/r/agno-agi/agno/built): FastAPI, starlette, psycopg, psycopg-binary, Postgres, AIOHTTP, anyio, uvicorn, soupsieve, SQLAlchemy, Google, oauthlib, requests-oauthlib, bcrypt, cryptography, pillow, jinja2, markupsafe, beautifulsoup4, annotated-types, email-validator, Pydantic, OpenTelemetry, kubernetes, prompt-toolkit, questionary · [Compare](https://seerepo.com/compare/agno-agi/agno/vs/bunkerity/bunkerweb)
- [run-llama/llama_index](https://seerepo.com/r/run-llama/llama_index/built): starlette, psycopg, Redis, pymysql, AIOHTTP, anyio, soupsieve, SQLAlchemy, Google, google-auth-httplib2, cryptography, pillow, jinja2, markupsafe, beautifulsoup4, annotated-types, Pydantic, boto3, OpenTelemetry, docker, psutil, prompt-toolkit · [Compare](https://seerepo.com/compare/bunkerity/bunkerweb/vs/run-llama/llama_index)
- [open-webui/open-webui](https://seerepo.com/r/open-webui/open-webui/built): FastAPI, hiredis, psycopg, Redis, Postgres, pymysql, AIOHTTP, uvicorn, alembic, SQLAlchemy, itsdangerous, bcrypt, cryptography, pillow, openpyxl, qrcode, beautifulsoup4, Pydantic, boto3, OpenTelemetry, psutil · [Compare](https://seerepo.com/compare/bunkerity/bunkerweb/vs/open-webui/open-webui)

## Frequently asked questions

### What language is bunkerweb written in?

bunkerweb is written in Python, with 245,695 written lines.

### What framework does bunkerweb use?

bunkerweb is built with werkzeug, Flask, FastAPI, starlette, AIOHTTP, anyio, and uvicorn.

### What database does bunkerweb use?

bunkerweb stores its data in Postgres and reaches it with alembic and SQLAlchemy.

The proof: [src/common/db/requirements.arm.in, line 4](https://github.com/bunkerity/bunkerweb/blob/b09e418447718dc9a7eb40158e3e12ce719bfd5f/src/common/db/requirements.arm.in#L4)

### What does bunkerweb sign people in with?

bunkerweb signs people in with acme, Google, google-auth-httplib2, itsdangerous, josepy, libpass, oauthlib, requests-oauthlib, flask-login, bcrypt, cryptography, and flask-session.

### What services does bunkerweb use?

bunkerweb uses hiredis, psycopg, psycopg-binary, psycopg-pool, s3transfer, Redis, cachelib, and pymysql.

### Does bunkerweb have tests?

Yes. bunkerweb has 133 test files and is tested with mock, requests-mock, pyotp, Microsoft.NET.Test.Sdk, NUnit3TestAdapter, and NUnit.

### Which repos have a stack like bunkerweb's?

The ones that share most of its stack: apache/superset, ray-project/ray, and apache/airflow.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
