# Pregel

> **Class** in `@langchain/langgraph`

📖 [View in docs](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel)

The Pregel class is the core runtime engine of LangGraph, implementing a message-passing graph computation model
inspired by [Google's Pregel system](https://research.google/pubs/pregel-a-system-for-large-scale-graph-processing/).
It provides the foundation for building reliable, controllable agent workflows that can evolve state over time.

Key features:
- Message passing between nodes in discrete "supersteps"
- Built-in persistence layer through checkpointers
- First-class streaming support for values, updates, and events
- Human-in-the-loop capabilities via interrupts
- Support for parallel node execution within supersteps

The Pregel class is not intended to be instantiated directly by consumers. Instead, use the following higher-level APIs:
- StateGraph: The main graph class for building agent workflows
  - Compiling a StateGraph will return a CompiledGraph instance, which extends `Pregel`
- Functional API: A declarative approach using tasks and entrypoints
  - A `Pregel` instance is returned by the entrypoint function

## Signature

```javascript
class Pregel
```

## Extends

- `PartialRunnable<InputType | CommandType | null, OutputType, PregelOptions<Nodes, Channels, ContextType>>`

## Implements

- `PregelInterface<Nodes, Channels, ContextType>`

## Properties

- `autoValidate`
- `cache`
- `channels`
- `checkpointer`
- `config`
- `debug`
- `inputChannels`
- `interruptAfter`
- `interruptBefore`
- `lc_kwargs`
- `lc_runnable`
- `lc_serializable`
- `name`
- `nodes`
- `outputChannels`
- `retryPolicy`
- `stepTimeout`
- `store`
- `streamChannels`
- `streamMode`
- `lc_aliases`
- `lc_attributes`
- `lc_id`
- `lc_secrets`
- `lc_serializable_keys`
- `streamChannelsAsIs`
- `streamChannelsList`

## Methods

- [`_batchWithConfig()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/_batchWithConfig)
- [`_callWithConfig()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/_callWithConfig)
- [`_getOptionsList()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/_getOptionsList)
- [`_separateRunnableConfigFromCallOptions()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/_separateRunnableConfigFromCallOptions)
- [`_streamLog()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/_streamLog)
- [`_transformStreamWithConfig()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/_transformStreamWithConfig)
- [`assign()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/assign)
- [`asTool()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/asTool)
- [`batch()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/batch)
- [`clearCache()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/clearCache)
- [`getGraph()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getGraph)
- [`getGraphAsync()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getGraphAsync)
- [`getName()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getName)
- [`getState()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getState)
- [`getStateHistory()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getStateHistory)
- [`getSubgraphs()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getSubgraphs)
- [`getSubgraphsAsync()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/getSubgraphsAsync)
- [`invoke()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/invoke)
- [`pick()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/pick)
- [`pipe()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/pipe)
- [`stream()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/stream)
- [`streamEvents()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/streamEvents)
- [`streamLog()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/streamLog)
- [`toJSON()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/toJSON)
- [`toJSONNotImplemented()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/toJSONNotImplemented)
- [`transform()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/transform)
- [`updateState()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/updateState)
- [`validate()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/validate)
- [`withConfig()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/withConfig)
- [`withFallbacks()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/withFallbacks)
- [`withListeners()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/withListeners)
- [`withRetry()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/withRetry)
- [`isRunnable()`](https://reference.langchain.com/javascript/langchain-langgraph/pregel/Pregel/isRunnable)

## Examples

### Example 1

```typescript
// Using StateGraph API
const graph = new StateGraph(annotation)
  .addNode("nodeA", myNodeFunction)
  .addEdge("nodeA", "nodeB")
  .compile();

// The compiled graph is a Pregel instance
const result = await graph.invoke(input);
```

### Example 2

```typescript
// Using Functional API
import { task, entrypoint } from "@langchain/langgraph";
import { MemorySaver } from "@langchain/langgraph-checkpoint";

// Define tasks that can be composed
const addOne = task("add", async (x: number) => x + 1);

// Create a workflow using the entrypoint function
const workflow = entrypoint({
  name: "workflow",
  checkpointer: new MemorySaver()
}, async (numbers: number[]) => {
  // Tasks can be run in parallel
  const results = await Promise.all(numbers.map(n => addOne(n)));
  return results;
});

// The workflow is a Pregel instance
const result = await workflow.invoke([1, 2, 3]); // Returns [2, 3, 4]
```

---

[View source on GitHub](https://github.com/langchain-ai/langgraphjs/blob/dc37d3cd62bf88272cdc874e37354ae83ac01660/libs/langgraph-core/src/pregel/index.ts#L384)