# StateNodeSpec

> **Class** in `langgraph`

📖 [View in docs](https://reference.langchain.com/python/langgraph/graph/_node/StateNodeSpec)

## Signature

```python
StateNodeSpec(
    self,
    runnable: StateNode[NodeInputT, ContextT],
    metadata: dict[str, Any] | None,
    input_schema: type[NodeInputT],
    retry_policy: RetryPolicy | Sequence[RetryPolicy] | None,
    cache_policy: CachePolicy | None,
    ends: tuple[str, ...] | dict[str, str] | None = EMPTY_SEQ,
    defer: bool = False,
)
```

## Extends

- `Generic[NodeInputT, ContextT]`

## Constructors

```python
__init__(
    self,
    runnable: StateNode[NodeInputT, ContextT],
    metadata: dict[str, Any] | None,
    input_schema: type[NodeInputT],
    retry_policy: RetryPolicy | Sequence[RetryPolicy] | None,
    cache_policy: CachePolicy | None,
    ends: tuple[str, ...] | dict[str, str] | None = EMPTY_SEQ,
    defer: bool = False,
) -> None
```

| Name | Type |
|------|------|
| `runnable` | `StateNode[NodeInputT, ContextT]` |
| `metadata` | `dict[str, Any] \| None` |
| `input_schema` | `type[NodeInputT]` |
| `retry_policy` | `RetryPolicy \| Sequence[RetryPolicy] \| None` |
| `cache_policy` | `CachePolicy \| None` |
| `ends` | `tuple[str, ...] \| dict[str, str] \| None` |
| `defer` | `bool` |


## Properties

- `runnable`
- `metadata`
- `input_schema`
- `retry_policy`
- `cache_policy`
- `ends`
- `defer`

---

[View source on GitHub](https://github.com/langchain-ai/langgraph/blob/d27d4b2d9895a4aa83170b4aaa135878f99c7fd6/libs/langgraph/langgraph/graph/_node.py#L84)