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