[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "langgraph" version = "1.2.9" description = "Building stateful, multi-actor applications with LLMs" authors = [] requires-python = ">=3.10" readme = "README.md" license = "MIT" license-files = ['LICENSE'] classifiers = [ 'Development Status :: 5 - Production/Stable', 'Programming Language :: Python', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', ] dependencies = [ "langchain-core>=1.4.7,<2", "langgraph-checkpoint>=4.1.0,<5.0.0", "langgraph-sdk>=0.4.2,<0.5.0", "langgraph-prebuilt>=1.1.0,<1.2.0", "xxhash>=3.5.0", "pydantic>=2.7.4", ] [project.urls] Homepage = "https://docs.langchain.com/oss/python/langgraph/overview" Documentation = "https://reference.langchain.com/python/langgraph/" Source = "https://github.com/langchain-ai/langgraph/tree/main/libs/langgraph" Changelog = "https://github.com/langchain-ai/langgraph/releases" Twitter = "https://x.com/langchain_oss" Slack = "https://www.langchain.com/join-community" Reddit = "https://www.reddit.com/r/LangChain/" [dependency-groups] test = [ "pytest", "pytest-cov", "pytest-dotenv", "pytest-mock", "syrupy", "httpx", "pytest-watcher", "pytest-xdist[psutil]", "pytest-repeat", "langchain-core>=1.0.0", "langgraph-prebuilt", "langgraph-checkpoint", "langgraph-checkpoint-sqlite", "langgraph-checkpoint-postgres", "langgraph-sdk", "psycopg[binary]", "uvloop==0.22.1", "pyperf", "py-spy", "pycryptodome", "langgraph-cli; python_version < '3.14'", "langgraph-cli[inmem]; python_version < '3.14'", "redis", ] lint = [ "ruff", "ty", "types-requests", ] dev = [ {include-group = "test"}, {include-group = "lint"}, "jupyter", ] [tool.uv.sources] langgraph-prebuilt = { path = "../prebuilt", editable = true } langgraph-checkpoint = { path = "../checkpoint", editable = true } langgraph-checkpoint-sqlite = { path = "../checkpoint-sqlite", editable = true } langgraph-checkpoint-postgres = { path = "../checkpoint-postgres", editable = true } langgraph-sdk = { path = "../sdk-py", editable = true } langgraph-cli = { path = "../cli", editable = true } [tool.ruff] lint.select = [ "E", "F", "I", "TID251", "UP" ] lint.ignore = [ "E501" ] line-length = 88 indent-width = 4 extend-include = ["*.ipynb"] target-version = "py310" [tool.ruff.lint.flake8-tidy-imports.banned-api] "typing.TypedDict".msg = "Use typing_extensions.TypedDict instead." [tool.ty.rules] call-non-callable = "ignore" deprecated = "ignore" invalid-argument-type = "ignore" invalid-assignment = "ignore" invalid-key = "ignore" invalid-method-override = "ignore" invalid-paramspec = "ignore" invalid-return-type = "ignore" invalid-type-form = "ignore" invalid-yield = "ignore" missing-typed-dict-key = "ignore" no-matching-overload = "ignore" not-iterable = "ignore" unused-type-ignore-comment = "ignore" unresolved-attribute = "ignore" unsupported-base = "ignore" unsupported-operator = "ignore" [tool.coverage.run] omit = ["tests/*"] [tool.pytest-watcher] now = true delay = 0.1 patterns = ["*.py"] [tool.hatch.build.targets.wheel] packages = ["langgraph"] [tool.pytest.ini_options] addopts = "--full-trace --strict-markers --strict-config --durations=5 --snapshot-warn-unused" [tool.codespell] # Ignore words specific to the LangGraph library code ignore-words-list = "infor,thead,stdio,nd,jupyter,lets,lite,uis,deque,langgraph,langchain,pydantic,typing,async,await,coroutine,iterable,iterables,serializable,deserializable,checkpointer,checkpointing,stateful,statefulness,prebuilt,prebuilt,supervisor,supervisory,swarm,swarming,multiactor,multiactors,subgraph,subgraphs,workflow,workflows,streaming,streamable,streamed,streamer,streamers,streaming,streamable,streamed,streamer,streamers"