pyyaml<7,>=6.0
tomli<3,>=2.3
tomli-w<2,>=1.0
python-box<8,>=7.3
platformdirs<5,>=4.0
defusedxml<1,>=0.7
typer<1,>=0.19
click<9,>=8.3
rich<15,>=14.2
structlog<26,>=25.0
aiosqlite<1,>=0.21
aiosmtplib<5,>=4.0
websockets<16,>=15.0
jinja2<4,>=3.1.5
humanize<5,>=4.11
httpx<1,>=0.28
authlib<2,>=1.6.11
pendulum<4,>=3.0
cryptography>=46.0.7
requests>=2.33.0
urllib3>=2.6.3

[all]
pytest<10,>=9.0.3
pytest-cov<8,>=7.0
pytest-asyncio<2,>=1.2
ruff<1,>=0.14
mypy<2,>=1.18
types-PyYAML<7,>=6.0
types-defusedxml<1,>=0.7
sphinx<9,>=8.1
furo<2026,>=2025.9
myst-parser<5,>=4.0
sphinx-autodoc-typehints<4,>=3.0
sphinx-togglebutton<1,>=0.3
sphinx-design<0.7,>=0.6
build<2,>=1.3
twine<7,>=6.2
tox<5,>=4.31
pre-commit<5,>=4.0
boto3<2,>=1.35
moto[ses]<6,>=5.0
awscli-local<1,>=0.22
filelock>=3.20.3
jaraco-context>=6.1.0
virtualenv>=20.36.1
Pygments>=2.20.0
markdown-it-py<4,>=3

[build]
build<2,>=1.3
twine<7,>=6.2

[db-crypto]
sqlcipher3<1,>=0.5

[dev]
pytest<10,>=9.0.3
pytest-cov<8,>=7.0
pytest-asyncio<2,>=1.2
ruff<1,>=0.14
mypy<2,>=1.18
types-PyYAML<7,>=6.0
types-defusedxml<1,>=0.7
pre-commit<5,>=4.0
filelock>=3.20.3
jaraco-context>=6.1.0
virtualenv>=20.36.1
Pygments>=2.20.0
boto3<2,>=1.35
moto[ses]<6,>=5.0

[docs]
sphinx<9,>=8.1
furo<2026,>=2025.9
myst-parser<5,>=4.0
sphinx-autodoc-typehints<4,>=3.0
sphinx-togglebutton<1,>=0.3
sphinx-design<0.7,>=0.6
Pygments>=2.20.0
markdown-it-py<4,>=3

[infra-tools]
awscli-local<1,>=0.22

[ses]
boto3<2,>=1.35

[textual]
textual<7,>=6.3

[tox]
tox<5,>=4.31
