[project] name = "open-webui" description = "Open WebUI" authors = [ { name = "Timothy Jaeryang Baek", email = "tim@openwebui.com" } ] license = { file = "LICENSE" } dependencies = [ "fastapi==0.118.0", "uvicorn[standard]==0.37.0", "pydantic==2.11.9", "python-multipart==0.0.20", "itsdangerous==2.2.0", "python-socketio==5.13.0", "python-jose==3.4.0", "cryptography", "bcrypt==5.0.0", "argon2-cffi==25.1.0", "PyJWT[crypto]==2.10.1", "authlib==1.6.5", "requests==2.32.5", "aiohttp==3.12.15", "async-timeout", "aiocache", "aiofiles", "starlette-compress==1.6.0", "httpx[socks,http2,zstd,cli,brotli]==0.28.1", "starsessions[redis]==2.2.1", "sqlalchemy==2.0.38", "alembic==1.14.0", "peewee==3.18.1", "peewee-migrate==1.12.2", "pycrdt==0.12.25", "redis", "PyMySQL==1.1.1", "boto3==1.40.5", "APScheduler==3.10.4", "RestrictedPython==8.0", "loguru==0.7.3", "asgiref==3.8.1", "tiktoken", "mcp==1.14.1", "openai", "anthropic", "google-genai==1.38.0", "google-generativeai==0.8.5", "langchain==0.3.27", "langchain-community==0.3.29", "fake-useragent==2.2.0", "chromadb==1.0.20", "opensearch-py==2.8.0", "transformers", "sentence-transformers==5.1.1", "accelerate", "pyarrow==20.0.0", "einops==0.8.1", "ftfy==6.2.3", "pypdf==6.0.0", "fpdf2==2.8.2", "pymdown-extensions==10.14.2", "docx2txt==0.8", "python-pptx==1.0.2", "unstructured==0.16.17", "nltk==3.9.1", "Markdown==3.9", "pypandoc==1.15", "pandas==2.2.3", "openpyxl==3.1.5", "pyxlsb==1.0.10", "xlrd==2.0.1", "validators==0.35.0", "psutil", "sentencepiece", "soundfile==0.13.1", "azure-ai-documentintelligence==1.0.2", "pillow==11.3.0", "opencv-python-headless==4.11.0.86", "rapidocr-onnxruntime==1.4.4", "rank-bm25==0.2.2", "onnxruntime==1.20.1", "faster-whisper==1.1.1", "black==25.9.0", "youtube-transcript-api==1.2.2", "pytube==15.0.0", "pydub", "ddgs==9.0.0", "google-api-python-client", "google-auth-httplib2", "google-auth-oauthlib", "googleapis-common-protos==1.70.0", "google-cloud-storage==2.19.0", "azure-identity==1.25.0", "azure-storage-blob==12.24.1", "ldap3==2.9.1", ] readme = "README.md" requires-python = ">= 3.11, < 3.13.0a1" dynamic = ["version"] classifiers = [ "Development Status :: 4 - Beta", "License :: Other/Proprietary License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Communications :: Chat", "Topic :: Multimedia", ] [project.optional-dependencies] postgres = [ "psycopg2-binary==2.9.10", "pgvector==0.4.1", ] all = [ "pymongo", "psycopg2-binary==2.9.9", "pgvector==0.4.0", "moto[s3]>=5.0.26", "gcp-storage-emulator>=2024.8.3", "docker~=7.1.0", "pytest~=8.3.2", "pytest-docker~=3.1.1", "playwright==1.49.1", "elasticsearch==9.1.0", "qdrant-client==1.14.3", "pymilvus==2.6.2", "pinecone==6.0.2", "oracledb==3.2.0", "colbert-ai==0.2.21", "firecrawl-py==1.12.0", "tencentcloud-sdk-python==3.0.1336", ] [project.scripts] open-webui = "open_webui:app" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.rye] managed = true dev-dependencies = [] [tool.hatch.metadata] allow-direct-references = true [tool.hatch.version] path = "package.json" pattern = '"version":\s*"(?P[^"]+)"' [tool.hatch.build.hooks.custom] # keep this for reading hooks from `hatch_build.py` [tool.hatch.build.targets.wheel] sources = ["backend"] exclude = [ ".dockerignore", ".gitignore", ".webui_secret_key", "dev.sh", "requirements.txt", "start.sh", "start_windows.bat", "webui.db", "chroma.sqlite3", ] force-include = { "CHANGELOG.md" = "open_webui/CHANGELOG.md", build = "open_webui/frontend" } [tool.codespell] # Ref: https://github.com/codespell-project/codespell#using-a-config-file skip = '.git*,*.svg,package-lock.json,i18n,*.lock,*.css,*-bundle.js,locales,example-doc.txt,emoji-shortcodes.json' check-hidden = true # ignore-regex = '' ignore-words-list = 'ans' [dependency-groups] dev = [ "pytest-asyncio>=1.0.0", ]