# How to Set Up a LangGraph Application with pyproject.toml A LangGraph application must be configured with a [LangGraph configuration file](../reference/cli.md#configuration-file) in order to be deployed to LangGraph Platform (or to be self-hosted). This how-to guide discusses the basic steps to setup a LangGraph application for deployment using `pyproject.toml` to define your package's dependencies. This walkthrough is based on [this repository](https://github.com/langchain-ai/langgraph-example-pyproject), which you can play around with to learn more about how to setup your LangGraph application for deployment. !!! tip "Setup with requirements.txt" If you prefer using `requirements.txt` for dependency management, check out [this how-to guide](./setup.md). !!! tip "Setup with a Monorepo" If you are interested in deploying a graph located inside a monorepo, take a look at [this](https://github.com/langchain-ai/langgraph-example-monorepo) repository for an example of how to do so. The final repository structure will look something like this: ```bash my-app/ ├── my_agent # all project code lies within here │ ├── utils # utilities for your graph │ │ ├── __init__.py │ │ ├── tools.py # tools for your graph │ │ ├── nodes.py # node functions for you graph │ │ └── state.py # state definition of your graph │   ├── __init__.py │   └── agent.py # code for constructing your graph ├── .env # environment variables ├── langgraph.json # configuration file for LangGraph └── pyproject.toml # dependencies for your project ``` After each step, an example file directory is provided to demonstrate how code can be organized. ## Specify Dependencies Dependencies can optionally be specified in one of the following files: `pyproject.toml`, `setup.py`, or `requirements.txt`. If none of these files is created, then dependencies can be specified later in the [LangGraph configuration file](#create-langgraph-configuration-file). The dependencies below will be included in the image, you can also use them in your code, as long as with a compatible version range: ``` langgraph>=0.3.27 langgraph-sdk>=0.1.66 langgraph-checkpoint>=2.0.23 langchain-core>=0.2.38 langsmith>=0.1.63 orjson>=3.9.7,<3.10.17 httpx>=0.25.0 tenacity>=8.0.0 uvicorn>=0.26.0 sse-starlette>=2.1.0,<2.2.0 uvloop>=0.18.0 httptools>=0.5.0 jsonschema-rs>=0.20.0 structlog>=24.1.0 cloudpickle>=3.0.0 ``` Example `pyproject.toml` file: ```toml [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "my-agent" version = "0.0.1" description = "An excellent agent build for LangGraph Platform." authors = [ {name = "Polly the parrot", email = "1223+polly@users.noreply.github.com"} ] license = {text = "MIT"} readme = "README.md" requires-python = ">=3.9" dependencies = [ "langgraph>=0.2.0", "langchain-fireworks>=0.1.3" ] [tool.hatch.build.targets.wheel] packages = ["my_agent"] ``` Example file directory: ```bash my-app/ └── pyproject.toml # Python packages required for your graph ``` ## Specify Environment Variables Environment variables can optionally be specified in a file (e.g. `.env`). See the [Environment Variables reference](../reference/env_var.md) to configure additional variables for a deployment. Example `.env` file: ``` MY_ENV_VAR_1=foo MY_ENV_VAR_2=bar FIREWORKS_API_KEY=key ``` Example file directory: ```bash my-app/ ├── .env # file with environment variables └── pyproject.toml ``` ## Define Graphs Implement your graphs! Graphs can be defined in a single file or multiple files. Make note of the variable names of each @[CompiledStateGraph][CompiledStateGraph] to be included in the LangGraph application. The variable names will be used later when creating the [LangGraph configuration file](../reference/cli.md#configuration-file). Example `agent.py` file, which shows how to import from other modules you define (code for the modules is not shown here, please see [this repository](https://github.com/langchain-ai/langgraph-example-pyproject) to see their implementation): ```python # my_agent/agent.py from typing import Literal from typing_extensions import TypedDict from langgraph.graph import StateGraph, END, START from my_agent.utils.nodes import call_model, should_continue, tool_node # import nodes from my_agent.utils.state import AgentState # import state # Define the runtime context class GraphContext(TypedDict): model_name: Literal["anthropic", "openai"] workflow = StateGraph(AgentState, context_schema=GraphContext) workflow.add_node("agent", call_model) workflow.add_node("action", tool_node) workflow.add_edge(START, "agent") workflow.add_conditional_edges( "agent", should_continue, { "continue": "action", "end": END, }, ) workflow.add_edge("action", "agent") graph = workflow.compile() ``` Example file directory: ```bash my-app/ ├── my_agent # all project code lies within here │ ├── utils # utilities for your graph │ │ ├── __init__.py │ │ ├── tools.py # tools for your graph │ │ ├── nodes.py # node functions for you graph │ │ └── state.py # state definition of your graph │   ├── __init__.py │   └── agent.py # code for constructing your graph ├── .env └── pyproject.toml ``` ## Create LangGraph Configuration File Create a [LangGraph configuration file](../reference/cli.md#configuration-file) called `langgraph.json`. See the [LangGraph configuration file reference](../reference/cli.md#configuration-file) for detailed explanations of each key in the JSON object of the configuration file. Example `langgraph.json` file: ```json { "dependencies": ["."], "graphs": { "agent": "./my_agent/agent.py:graph" }, "env": ".env" } ``` Note that the variable name of the `CompiledGraph` appears at the end of the value of each subkey in the top-level `graphs` key (i.e. `:`). !!! warning "Configuration File Location" The LangGraph configuration file must be placed in a directory that is at the same level or higher than the Python files that contain compiled graphs and associated dependencies. Example file directory: ```bash my-app/ ├── my_agent # all project code lies within here │ ├── utils # utilities for your graph │ │ ├── __init__.py │ │ ├── tools.py # tools for your graph │ │ ├── nodes.py # node functions for you graph │ │ └── state.py # state definition of your graph │   ├── __init__.py │   └── agent.py # code for constructing your graph ├── .env # environment variables ├── langgraph.json # configuration file for LangGraph └── pyproject.toml # dependencies for your project ``` ## Next After you setup your project and place it in a GitHub repository, it's time to [deploy your app](./cloud.md).