Skip to content
EZGraph Get started

No EZGraph key required. Free production use. No runtime fee. Bring your own model provider. Support Jev. Run in your own infrastructure. Optional support is available.

One application comparison

Less application plumbing.
Inspect the evidence.

QuoteGraph and QuoteLanggraph implement an insurance quote journey with five stages, validation, corrections, deterministic rating, and acceptance. This case compares the application code in those two implementations.

Measurement snapshot: October 9, 2026. Source file hashes and raw counts are included in the downloadable inventory.

The measured result

50.3% fewer application lines in this example.

EZGraph: 657 normalized graph-application lines. Direct LangGraph: 1,322. The difference is 665 lines under the stated method.

These are application-maintained lines. Both runtime libraries are excluded. The shared backend implementations are measured separately at 287 normalized lines each; controllers, prompts, tests, and configuration are outside the headline.

The result measures code size in these implementations. It does not measure developer time, runtime performance, model accuracy, or reliability.

Normalized graph-application lines
EZGraph application657
Direct LangGraph application1,322

7 EZGraph graph files; 4 direct LangGraph graph/session files. Different organization contributes to the count.

Application responsibilities

What the supplied layer absorbs.

ResponsibilityEZGraph applicationDirect comparison application
Model/tool roundsNodes declare prompts and tools; the runtime handles common rounds and dispatch.The graph class maintains its own model invocation and dispatch loop.
State and historyTyped node channels and named history spaces follow the runtime contract.The application maintains state shape and stage/history bookkeeping.
Transitions and responsesHandlers return shared outcomes such as go(), direct(), and finish().The application implements response selection and routing around its stage logic.
Session lifecycleThe engine coordinates restore, invocation, and persistence.A dedicated application session-store module and invocation path supply that behavior.
Domain policyValidation, catalog matching, rating, and acceptance remain application code.The same kinds of domain responsibilities remain application code.

The integration is the point: one contract connects these responsibilities across stages. A team can also extract reusable helpers in its direct LangGraph application.

Structure you can navigate

Find a stage's responsibilities in its node.

The EZGraph application has a graph definition, a state registry, and five stage files. The direct implementation places most graph behavior in one graph class, with separate state, types, and session-store modules. File organization is a choice, and it affects this result.

A driver validation change belongs in DriverNode. A graph-wide model default belongs in the graph definition. History sharing is declared in historySpaces. This supplies an established location for each concern across EZGraph applications.

EZGraph fileNormalized linesRaw lines
src/graphs/quote-graph/quote-graph.ts5081
src/graphs/quote-graph/quote-graph.state.ts6689
src/graphs/quote-graph/nodes/coverage.node.ts81115
src/graphs/quote-graph/nodes/driver.node.ts85109
src/graphs/quote-graph/nodes/history.node.ts83111
src/graphs/quote-graph/nodes/quote.node.ts178232
src/graphs/quote-graph/nodes/vehicle.node.ts114141

Direct LangGraph application inventory

Direct LangGraph fileNormalized linesRaw lines
src/graphs/quote-langgraph/quote-langgraph.ts10191160
src/graphs/quote-langgraph/quote-langgraph.state.ts83103
src/graphs/quote-langgraph/quote-session-store.ts177212
src/graphs/quote-langgraph/quote-types.ts4357

Separately counted controllers: 47 versus 74 normalized lines. Backend helpers: 287 versus 287. Full paths, hashes, and counts are in the snapshot.

Compare behavior as well as code

A shorter loop needs a precise contract.

EZGraph centralizes tool schema validation, corrective results, dispatch, outcomes, and diagnostics. The direct application demonstrates the code needed for its chosen loop and session design.

The two loops have a material difference.

The direct comparison selects the first tool call from a model candidate. EZGraph supports its defined batch behavior. The implementations share a product journey, but this evidence does not establish complete behavioral parity for multi-tool candidates.

A modern LangGraph application can compose LangChain agents and middleware rather than write every model/tool round by hand. An equivalent baseline using those helpers has not been counted here. This case demonstrates this repository's applications; it does not establish the smallest possible LangGraph implementation.

Read the upstream composition options ↗
Method and limitations

Reproduce the number, then assess the fit.

The measurement script excludes blank lines, full-line comments, and imports from selected TypeScript files. It counts the remaining physical lines. Formatting choices still matter; this is not an abstract syntax or complexity metric.

The selected files cover graph definitions, node/stage behavior, state definitions, and the comparison's session/type modules. The headline excludes runtime libraries, prompts, controllers, tests, configuration, and backend helpers.

In a pico-web checkout with an ezgraph-demo sibling
node scripts/ezgraph-compare-metrics.mjs ../ezgraph-demo

The snapshot records the measurement date, repository base revision, and SHA-256 hashes for each measured file. Match the hashes when reproducing this particular result; a moving branch may contain newer application code.

  • The baseline is a specific direct implementation, with its own organization and helper choices.
  • Shared backend counts do not establish complete semantic equivalence.
  • Runtime size and the work performed inside EZGraph are outside the count.
  • No development-time, performance, reliability, or adoption experiment is represented by this number.
Download the complete measurement snapshot
Inspect the primary evidence

Source and contract references.

Start with one workflow

Give your next LangGraph application a consistent foundation.

Run the starter, inspect the session, and decide whether the node contract fits your team.

Run your first workflow