[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "openbrowse" version = "1.12.2" description = "Self-hosted AI browser automation server with a live dashboard, built for small machines like the Raspberry Pi" readme = "README.md" license = { file = "LICENSE" } authors = [{ name = "Lucas Johnston Kurilov" }] requires-python = ">=3.11" keywords = ["browser-use", "automation", "raspberry-pi", "self-hosted", "ai-agent"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: FastAPI", "Intended Audience :: Developers", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Internet :: WWW/HTTP", ] dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.34.0", "browser-use>=0.13.7,<0.14", "cloakbrowser>=0.3.0", "aiosqlite>=0.20.0", "python-dotenv>=1.0.0", "jinja2>=3.1.0", "sse-starlette>=2.0.0", "httpx>=0.28.0", "pydantic>=2.0.0", "websockets>=12.0", "python-multipart>=0.0.9", ] [project.urls] Homepage = "https://openbrowse.co" Repository = "https://github.com/lujstn/openbrowse" Issues = "https://github.com/lujstn/openbrowse/issues" [project.scripts] openbrowse = "openbrowse.cli:main" [project.optional-dependencies] dev = ["pytest", "pytest-asyncio", "httpx", "ruff"] [tool.hatch.build.targets.wheel] packages = ["openbrowse"] [tool.hatch.build.targets.sdist] include = ["openbrowse", "tests", "scripts", "README.md", "LICENSE", "CITATION.cff"] exclude = ["tests/live/artifacts"] [tool.ruff] line-length = 100 [tool.ruff.lint] select = ["F"] [tool.pytest.ini_options] asyncio_mode = "auto" pythonpath = ["."] markers = [ "live: real-browser, real-LLM integration tests (deselected by default; see tests/live/README.md)", "sonnet_smoke: live scenarios also worth running on claude-sonnet-5", ] addopts = "-m 'not live'"