fastapi==0.115.6
uvicorn[standard]==0.34.0
httpx==0.28.1
polars==1.42.1
numpy==2.2.1
# Accounts + notification subscriptions (see accounts/db.py, users.py, notify.py).
# Postgres in prod/containers: asyncpg (async web/store) + psycopg (sync notifier);
# aiosqlite is kept for the SQLite fallback the test suite runs on. alembic manages
# the accounts schema. The `pool` extra pulls in psycopg_pool, used by
# data/climate_store.py + data/store.py to bound the raw connections those modules
# open on Postgres (see their module docstrings) instead of one-per-thread forever.
fastapi-users[sqlalchemy]==15.0.5
aiosqlite==0.22.1
asyncpg==0.30.0
psycopg[binary,pool]==3.2.3
alembic==1.14.0
# Web Push (VAPID) delivery of notifications (see notifications/push.py). Pulls in
# py-vapid, cryptography, and http-ece.
pywebpush==2.0.0
# Ed25519 verification of Discord interaction webhooks (see notifications/discord_interactions.py).
PyNaCl==1.5.0
# The Discord gateway bot and the recurring worker jobs moved to the
# thermograph-daemon Go binary (backend/daemon/), which calls back over
# api/internal_routes.py — so the direct `websockets` pin (only discord_bot.py
# imported it; uvicorn[standard] still pulls it transitively for its own ws
# protocol support) and `apscheduler` are gone from this list.
# The lake role's SQL engine (lake_app.py /query): embedded, parallel
# partition-pruned scans over the ERA5 hive table. Only lake_app imports it.
duckdb==1.4.2
