Bumps the all-dependencies group in /libs/langgraph with 3 updates: [langchain-core](https://github.com/langchain-ai/langchain), [redis](https://github.com/redis/redis-py) and [ruff](https://github.com/astral-sh/ruff). Updates `langchain-core` from 1.2.16 to 1.2.17 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/langchain-ai/langchain/releases">langchain-core's releases</a>.</em></p> <blockquote> <h2>langchain-core==1.2.17</h2> <p>Changes since langchain-core==1.2.16</p> <p>release(core): 1.2.17 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35527">#35527</a>) fix(core): extract usage metadata from serialized tracer message outputs (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35526">#35526</a>) chore: bump the langchain-deps group across 3 directories with 7 updates (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35513">#35513</a>) chore: bump the langchain-deps group across 3 directories with 14 updates (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35441">#35441</a>)</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/langchain-ai/langchain/commit/cdf140e77dde6f1132a40c9c7173a6cc72ee83b3"><code>cdf140e</code></a> release(core): 1.2.17 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35527">#35527</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/61fd90a2f32e217856702c9aad90a074dd4f2e51"><code>61fd90a</code></a> fix(core): extract usage metadata from serialized tracer message outputs (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35">#35</a>...</li> <li><a href="https://github.com/langchain-ai/langchain/commit/d2c86df128004aa0d601503f8be98bcc6f933fbb"><code>d2c86df</code></a> fix(huggingface): switch integration test provider to together (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35525">#35525</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/da092cf093d7c2d3f09d280a87d77de73431d425"><code>da092cf</code></a> Change logo width in README.md</li> <li><a href="https://github.com/langchain-ai/langchain/commit/ac9295761a673b21bd1ec2f151fd1168e60a3d53"><code>ac92957</code></a> fix(huggingface): resolve huggingface-hub 1.x compat (<a href="https://redirect.github.com/langchain-ai/langchain/issues/35524">#35524</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/357fbdd40ceb46d9dd28224b5555086af24d3ee4"><code>357fbdd</code></a> Update heading in README to reflect platform focus</li> <li><a href="https://github.com/langchain-ai/langchain/commit/a0bc52288770501d97b078c87b4924b7a763974e"><code>a0bc522</code></a> Swap logo images for light and dark themes</li> <li><a href="https://github.com/langchain-ai/langchain/commit/8450b51d2ca14e39a349042d90067b994c39d59e"><code>8450b51</code></a> Add files via upload</li> <li><a href="https://github.com/langchain-ai/langchain/commit/cf518216f7f888cd76fdd8f3c96560d3d429b641"><code>cf51821</code></a> Add files via upload</li> <li><a href="https://github.com/langchain-ai/langchain/commit/6d39b7289200bc9fe6ec9d6cecc56b484da7594b"><code>6d39b72</code></a> fix(huggingface): bump transformers and sentence-transformers lower bounds (#...</li> <li>Additional commits viewable in <a href="https://github.com/langchain-ai/langchain/compare/langchain-core==1.2.16...langchain-core==1.2.17">compare view</a></li> </ul> </details> <br /> Updates `redis` from 7.2.1 to 7.3.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/redis/redis-py/releases">redis's releases</a>.</em></p> <blockquote> <h2>7.3.0</h2> <h1>Changes</h1> <p><strong>OpenTelemetry Native Metrics Support for asynchronous clients</strong> Added comprehensive OpenTelemetry metrics support for asynchronous clients following the <a href="https://opentelemetry.io/docs/specs/semconv/database/database-metrics/">OpenTelemetry Database Client Semantic Conventions</a>. Metric groups include:</p> <ul> <li>Command metrics: Operation duration with retry tracking</li> <li>Connection basic: Connection count and creation time</li> <li>Resiliency: Errors, handoffs, timeout relaxation</li> <li>Connection advanced: Wait time and use time</li> <li>Pubsub metrics: Published and received messages</li> <li>Stream metrics: Processing duration and maintenance notifications</li> </ul> <h2>🚀 New Features</h2> <ul> <li>Added OTel instrumentation and metrics export for async client (<a href="https://redirect.github.com/redis/redis-py/issues/3977">#3977</a>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li>[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (<a href="https://redirect.github.com/redis/redis-py/issues/3989">#3989</a>)</li> <li>fix(connection): Ensure we have an initialized protocol in connection (<a href="https://redirect.github.com/redis/redis-py/issues/3981">#3981</a>)</li> </ul> <h2>🧰 Maintenance</h2> <ul> <li>fix: use KeysT for blpop and brpop keys parameter type annotation (<a href="https://redirect.github.com/redis/redis-py/issues/3987">#3987</a> <a href="https://redirect.github.com/redis/redis-py/issues/3990">#3990</a>)</li> <li>Bump actions/upload-artifact from 6 to 7 (<a href="https://redirect.github.com/redis/redis-py/issues/3985">#3985</a>)</li> <li>fix: replace 3 bare except clauses with except Exception (<a href="https://redirect.github.com/redis/redis-py/issues/3980">#3980</a>)</li> </ul> <p>We'd like to thank all the contributors who worked on this release! <a href="https://github.com/mitre88"><code>@mitre88</code></a> <a href="https://github.com/turanalmammadov"><code>@turanalmammadov</code></a> <a href="https://github.com/haosenwang1018"><code>@haosenwang1018</code></a> <a href="https://github.com/Medno"><code>@Medno</code></a> <a href="https://github.com/vladvildanov"><code>@vladvildanov</code></a> <a href="https://github.com/petyaslavova"><code>@petyaslavova</code></a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/redis/redis-py/commit/8ecbc7a728792ab9c71078cb330a64c225cb3351"><code>8ecbc7a</code></a> Updating lib version to 7.3.0</li> <li><a href="https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339"><code>11043df</code></a> typing: accept single-key input for blpop and brpop (<a href="https://redirect.github.com/redis/redis-py/issues/3990">#3990</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210"><code>d958125</code></a> fix: use KeysT for blpop and brpop keys parameter type annotation (<a href="https://redirect.github.com/redis/redis-py/issues/3987">#3987</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de"><code>75bf91b</code></a> [async] Adding access to cluster client's nodes_manager and set_response_call...</li> <li><a href="https://github.com/redis/redis-py/commit/abf5bcb2ded3f393cd3d74803b058df325e3755c"><code>abf5bcb</code></a> Bump actions/upload-artifact from 6 to 7 (<a href="https://redirect.github.com/redis/redis-py/issues/3985">#3985</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/5b0303bf90792cfdfff951f446c71ec7baf83e0e"><code>5b0303b</code></a> fix: replace 3 bare except clauses with except Exception (<a href="https://redirect.github.com/redis/redis-py/issues/3980">#3980</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/e9fba8689f74e4aea45c8b9d75e517e29c54a76a"><code>e9fba86</code></a> Added OTel instrumentation and metrics export for async client (<a href="https://redirect.github.com/redis/redis-py/issues/3977">#3977</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/7ce513d262288fb2d79a1d59dff0cf5ff0cb13b0"><code>7ce513d</code></a> fix(connection): Ensure we have an initialized protocol in connection (<a href="https://redirect.github.com/redis/redis-py/issues/3981">#3981</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/8e3a5b2f10677c58951fd04f79db1802f79a9bea"><code>8e3a5b2</code></a> remove remaining imports of typing_extensions (<a href="https://redirect.github.com/redis/redis-py/issues/3873">#3873</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/5b46430e23748d85140b143cbce02523e284482e"><code>5b46430</code></a> Hold references to ClusterNode disconnect task (<a href="https://redirect.github.com/redis/redis-py/issues/3826">#3826</a>)</li> <li>Additional commits viewable in <a href="https://github.com/redis/redis-py/compare/v7.2.1...v7.3.0">compare view</a></li> </ul> </details> <br /> Updates `ruff` from 0.15.4 to 0.15.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/releases">ruff's releases</a>.</em></p> <blockquote> <h2>0.15.5</h2> <h2>Release Notes</h2> <p>Released on 2026-03-05.</p> <h3>Preview features</h3> <ul> <li>Discover Markdown files by default in preview mode (<a href="https://redirect.github.com/astral-sh/ruff/pull/23434">#23434</a>)</li> <li>[<code>perflint</code>] Extend <code>PERF102</code> to comprehensions and generators (<a href="https://redirect.github.com/astral-sh/ruff/pull/23473">#23473</a>)</li> <li>[<code>refurb</code>] Fix <code>FURB101</code> and <code>FURB103</code> false positives when I/O variable is used later (<a href="https://redirect.github.com/astral-sh/ruff/pull/23542">#23542</a>)</li> <li>[<code>ruff</code>] Add fix for <code>none-not-at-end-of-union</code> (<code>RUF036</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/22829">#22829</a>)</li> <li>[<code>ruff</code>] Fix false positive for <code>re.split</code> with empty string pattern (<code>RUF055</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23634">#23634</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>fastapi</code>] Handle callable class dependencies with <code>__call__</code> method (<code>FAST003</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23553">#23553</a>)</li> <li>[<code>pydocstyle</code>] Fix numpy section ordering (<code>D420</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23685">#23685</a>)</li> <li>[<code>pyflakes</code>] Fix false positive for names shadowing re-exports (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23356">#23356</a>)</li> <li>[<code>pyupgrade</code>] Avoid inserting redundant <code>None</code> elements in <code>UP045</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/23459">#23459</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Document extension mapping for Markdown code formatting (<a href="https://redirect.github.com/astral-sh/ruff/pull/23574">#23574</a>)</li> <li>Update default Python version examples (<a href="https://redirect.github.com/astral-sh/ruff/pull/23605">#23605</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Publish releases to Astral mirror (<a href="https://redirect.github.com/astral-sh/ruff/pull/23616">#23616</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/amyreese"><code>@amyreese</code></a></li> <li><a href="https://github.com/stakeswky"><code>@stakeswky</code></a></li> <li><a href="https://github.com/chirizxc"><code>@chirizxc</code></a></li> <li><a href="https://github.com/anishgirianish"><code>@anishgirianish</code></a></li> <li><a href="https://github.com/bxff"><code>@bxff</code></a></li> <li><a href="https://github.com/zsol"><code>@zsol</code></a></li> <li><a href="https://github.com/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> <li><a href="https://github.com/kar-ganap"><code>@kar-ganap</code></a></li> </ul> <h2>Install ruff 0.15.5</h2> <h3>Install prebuilt binaries via shell script</h3> <pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-installer.sh | sh </code></pre> <h3>Install prebuilt binaries via powershell script</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.15.5</h2> <p>Released on 2026-03-05.</p> <h3>Preview features</h3> <ul> <li>Discover Markdown files by default in preview mode (<a href="https://redirect.github.com/astral-sh/ruff/pull/23434">#23434</a>)</li> <li>[<code>perflint</code>] Extend <code>PERF102</code> to comprehensions and generators (<a href="https://redirect.github.com/astral-sh/ruff/pull/23473">#23473</a>)</li> <li>[<code>refurb</code>] Fix <code>FURB101</code> and <code>FURB103</code> false positives when I/O variable is used later (<a href="https://redirect.github.com/astral-sh/ruff/pull/23542">#23542</a>)</li> <li>[<code>ruff</code>] Add fix for <code>none-not-at-end-of-union</code> (<code>RUF036</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/22829">#22829</a>)</li> <li>[<code>ruff</code>] Fix false positive for <code>re.split</code> with empty string pattern (<code>RUF055</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23634">#23634</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>fastapi</code>] Handle callable class dependencies with <code>__call__</code> method (<code>FAST003</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23553">#23553</a>)</li> <li>[<code>pydocstyle</code>] Fix numpy section ordering (<code>D420</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23685">#23685</a>)</li> <li>[<code>pyflakes</code>] Fix false positive for names shadowing re-exports (<code>F811</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23356">#23356</a>)</li> <li>[<code>pyupgrade</code>] Avoid inserting redundant <code>None</code> elements in <code>UP045</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/23459">#23459</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Document extension mapping for Markdown code formatting (<a href="https://redirect.github.com/astral-sh/ruff/pull/23574">#23574</a>)</li> <li>Update default Python version examples (<a href="https://redirect.github.com/astral-sh/ruff/pull/23605">#23605</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Publish releases to Astral mirror (<a href="https://redirect.github.com/astral-sh/ruff/pull/23616">#23616</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/amyreese"><code>@amyreese</code></a></li> <li><a href="https://github.com/stakeswky"><code>@stakeswky</code></a></li> <li><a href="https://github.com/chirizxc"><code>@chirizxc</code></a></li> <li><a href="https://github.com/anishgirianish"><code>@anishgirianish</code></a></li> <li><a href="https://github.com/bxff"><code>@bxff</code></a></li> <li><a href="https://github.com/zsol"><code>@zsol</code></a></li> <li><a href="https://github.com/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> <li><a href="https://github.com/kar-ganap"><code>@kar-ganap</code></a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/ruff/commit/5e4a3d9c3b381df20f6a52caef0f56ed0ebc74be"><code>5e4a3d9</code></a> Bump 0.15.5 (<a href="https://redirect.github.com/astral-sh/ruff/issues/23743">#23743</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/69c23cc5a3a6cb08d81b01c7d1c2ba0482c3a3b1"><code>69c23cc</code></a> [ty] Render all changed diagnostics in conformance.py (<a href="https://redirect.github.com/astral-sh/ruff/issues/23613">#23613</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/4926bd58204839cb75a8ed1397e824bbc8f644ca"><code>4926bd5</code></a> [ty] Split deferred checks out of <code>types/infer/builder.rs</code> (<a href="https://redirect.github.com/astral-sh/ruff/issues/23740">#23740</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/9a70f5eb2fb0180953418cd6ac037cb3d531e77b"><code>9a70f5e</code></a> Discover markdown files by default in preview mode (<a href="https://redirect.github.com/astral-sh/ruff/issues/23434">#23434</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/3dc78b0a84ee231afb1c3329e11bfc912c236366"><code>3dc78b0</code></a> [ty] Use <code>HasOptionalDefinition</code> for <code>except</code> handlers (<a href="https://redirect.github.com/astral-sh/ruff/issues/23739">#23739</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/a6a5e8d10b8a5185049827be0a304db522b91c9a"><code>a6a5e8d</code></a> [ty] Fix precedence of <code>all</code> selector in TOML configurations (<a href="https://redirect.github.com/astral-sh/ruff/issues/23723">#23723</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/2a5384b0b6e22ab511aec6f8dbb11648befda887"><code>2a5384b</code></a> [ty] Make <code>all</code> selector case sensitive (<a href="https://redirect.github.com/astral-sh/ruff/issues/23713">#23713</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/db77d7b2ae3da8deed64d8889a5cbcea287b52a6"><code>db77d7b</code></a> [ty] Add a diagnostic if a <code>TypeVar</code> is used to specialize a <code>ParamSpec</code>, or ...</li> <li><a href="https://github.com/astral-sh/ruff/commit/db2849068f7d6a1f42cdafec46a7c2c83d39ece3"><code>db28490</code></a> [ty] Override home directory in ty tests (<a href="https://redirect.github.com/astral-sh/ruff/issues/23724">#23724</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/5f0fd91a230972bb9d1e4545ebaed2b7d09158a2"><code>5f0fd91</code></a> [ty] More type-variable default validation (<a href="https://redirect.github.com/astral-sh/ruff/issues/23639">#23639</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ruff/compare/0.15.4...0.15.5">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Trusted by companies shaping the future of agents – including Klarna, Replit, Elastic, and more – LangGraph is a low-level orchestration framework for building, managing, and deploying long-running, stateful agents.
Get started
Install LangGraph:
pip install -U langgraph
Create a simple workflow:
from langgraph.graph import START, StateGraph
from typing_extensions import TypedDict
class State(TypedDict):
text: str
def node_a(state: State) -> dict:
return {"text": state["text"] + "a"}
def node_b(state: State) -> dict:
return {"text": state["text"] + "b"}
graph = StateGraph(State)
graph.add_node("node_a", node_a)
graph.add_node("node_b", node_b)
graph.add_edge(START, "node_a")
graph.add_edge("node_a", "node_b")
print(graph.compile().invoke({"text": ""}))
# {'text': 'ab'}
Get started with the LangGraph Quickstart.
To quickly build agents with LangChain's create_agent (built on LangGraph), see the LangChain Agents documentation.
Tip
For developing, debugging, and deploying AI agents and LLM applications, see LangSmith.
Core benefits
LangGraph provides low-level supporting infrastructure for any long-running, stateful workflow or agent. LangGraph does not abstract prompts or architecture, and provides the following central benefits:
- Durable execution: Build agents that persist through failures and can run for extended periods, automatically resuming from exactly where they left off.
- Human-in-the-loop: Seamlessly incorporate human oversight by inspecting and modifying agent state at any point during execution.
- Comprehensive memory: Create truly stateful agents with both short-term working memory for ongoing reasoning and long-term persistent memory across sessions.
- Debugging with LangSmith: Gain deep visibility into complex agent behavior with visualization tools that trace execution paths, capture state transitions, and provide detailed runtime metrics.
- Production-ready deployment: Deploy sophisticated agent systems confidently with scalable infrastructure designed to handle the unique challenges of stateful, long-running workflows.
LangGraph’s ecosystem
While LangGraph can be used standalone, it also integrates seamlessly with any LangChain product, giving developers a full suite of tools for building agents. To improve your LLM application development, pair LangGraph with:
- LangSmith — Helpful for agent evals and observability. Debug poor-performing LLM app runs, evaluate agent trajectories, gain visibility in production, and improve performance over time.
- LangSmith Deployment — Deploy and scale agents effortlessly with a purpose-built deployment platform for long running, stateful workflows. Discover, reuse, configure, and share agents across teams — and iterate quickly with visual prototyping in LangGraph Studio.
- LangChain – Provides integrations and composable components to streamline LLM application development.
Note
Looking for the JS version of LangGraph? See the JS repo and the JS docs.
Additional resources
- Guides: Quick, actionable code snippets for topics such as streaming, adding memory & persistence, and design patterns (e.g. branching, subgraphs, etc.).
- Reference: Detailed reference on core classes, methods, how to use the graph and checkpointing APIs, and higher-level prebuilt components.
- Examples: Guided examples on getting started with LangGraph.
- LangChain Forum: Connect with the community and share all of your technical questions, ideas, and feedback.
- LangChain Academy: Learn the basics of LangGraph in our free, structured course.
- Case studies: Hear how industry leaders use LangGraph to ship AI applications at scale.
Acknowledgements
LangGraph is inspired by Pregel and Apache Beam. The public interface draws inspiration from NetworkX. LangGraph is built by LangChain Inc, the creators of LangChain, but can be used without LangChain.