Skip to content

Release history

graphiti releases

Build Real-Time Knowledge Graphs for AI Agents

All releases

17 shown

No immediate action
v0.29.1 Breaking risk

Attribute guards + saga timestamps

v0.29.0 Breaking risk
Breaking changes
  • Episode indices changed from 1-based to 0-based; update code parsing [Episode N] headers or relying on episode_indices
  • Kuzu schema migration required: add reference_time TIMESTAMP column to RelatesToNode_ via ALTER TABLE RelatesToNode_ ADD reference_time TIMESTAMP
  • Attribute dicts on nodes/edges no longer overwrite first-class fields (uuid, group_id, created_at, timestamps); set these fields directly
Notable features
  • Combined node + edge extraction in single LLM call via use_combined_extraction=True on extract_nodes_and_edges_bulk
  • Multi-episode batched extraction with concatenate_episodes helper, [Episode N] headers, and episode_indices mapping
  • New Graphiti.summarize_saga(saga_id) API with SagaNode support for multi-episode narrative summarization
Full changelog

Release Notes — graphiti-core 0.29.0

Summary

0.29.0 is the first of two releases focused on making ingestion meaningfully cheaper and the search pipeline easier to evolve. The headline changes:

Cheaper ingestion. A new combined node + edge extraction path lets a single LLM call cover what previously took two, and node/edge extraction can now batch multiple episodes into one prompt. Timestamp resolution (valid_at / invalid_at) has also been split into its own step so it doesn't compete with structural fact extraction.
Search pipeline rework. A large internal restructure of graphiti_core/search/search.py lays the groundwork for upcoming search and reranker changes — no public API changes, but tracing coverage is much improved.
New saga abstraction. A summarize_saga(saga_id) API on Graphiti, backed by SagaNode and a refreshed prompt, gives a first-class way to roll up multi-episode narratives.
Quality-of-life. A fact_triple episode type, episode_metadata for filtering, safer attribute merging that no longer clobbers first-class fields, and a podcast example that runs against an embedded FalkorDB with no external DB.
How this affects developers

Defaults are unchanged. Combined extraction is opt-in via use_combined_extraction=True on extract_nodes_and_edges_bulk. Existing ingestion code keeps working as-is.
Episode indices are now 0-based. If you parse [Episode N] headers or rely on episode_indices from extraction results, update your offsets accordingly.
Kuzu users — schema migration required. RelatesToNode_ now expects a reference_time TIMESTAMP column. New databases get it automatically; existing stores need a one-time ALTER TABLE RelatesToNode_ ADD reference_time TIMESTAMP.
Custom attributes are now safer to set. Attribute dicts on nodes/edges no longer overwrite first-class fields (uuid, group_id, created_at, timestamps). If you were depending on that overwrite behavior, you'll need to set those fields directly.
New public surface to know about: Graphiti.summarize_saga(saga_id), the fact_triple episode type, and EpisodicNode.episode_metadata for custom filtering keys.
Highlights

Efficiency: fewer, smarter LLM calls during ingestion

Combined node + edge extraction (feature-flagged). A single LLM call can now produce both nodes and edges for an episode. Pass use_combined_extraction=True to extract_nodes_and_edges_bulk to opt in; default behavior is unchanged. Backed by a new prompts/extract_nodes_and_edges.py and utils/maintenance/combined_extraction.py.
Multi-episode batched extraction. _extract_and_resolve_nodes and extract_edges now accept a list of episodes, build a shared prompt with [Episode N] headers (new concatenate_episodes helper), and attach episode_indices to each extracted node/edge so callers can map results back to their source episode.
Decoupled timestamp resolution. New extract_timestamps / extract_timestamps_batch prompts let valid_at / invalid_at be resolved in a dedicated post-extraction step, so structural fact extraction is no longer entangled with date parsing.
Architecture

Search pipeline rework. Major restructure of graphiti_core/search/search.py (~1k lines changed) and new tracing test coverage, paving the way for upcoming search/reranker changes.
Sagas. New summarize_saga(saga_id) API on Graphiti, plus a refreshed summarize_sagas prompt and supporting helpers (saga_get_previous_episode_uuid, saga_get_episode_contents).
fact_triple episode type and an episode_metadata dict on EpisodicNode for customer-defined filtering keys.
Safer attribute merging on edges and nodes — first-class fields (uuid, group_id, created_at, timestamps) are no longer overwritten when an attribute dict happens to contain a matching key.
reference_time preserved through bulk edge save, and added as a column on the Kuzu RelatesToNode
schema. Existing Kuzu users may need a one-time ALTER TABLE RelatesToNode
ADD reference_time TIMESTAMP.
Prompt refinements

Dedup (nodes & edges): tightened scope, looser two-entity rule in the combined extraction path.
Fact extraction: detail-preservation rule, broader entity capture for qualified objects.
Refreshed summarize_sagas prompt.
Examples / DX

examples/podcast/podcast_runner.py now runs against an embedded FalkorDB (falkordblite) with no external database, and exercises edge + node hybrid search post-ingest.
Notable internal changes

Driver tweaks in graph_operations.py and record_parsers.py.
Episode indexing is now 0-based (was 1-based in the first iteration of multi-episode extraction).
pytest bumped to 9.0.3 in server/ and mcp_server/.
Lockfile and dependency refreshes (uv group, voyageai, groq, google-genai, uvicorn, pyright, pytest-asyncio).
Coming next

The next release will continue this architectural track — expect the combined extraction path to graduate toward the default ingestion mode, additional batching across edge resolution and dedup, and follow-on search-pipeline changes building on the rework that landed here.

mcp-v1.0.2 Security relevant
Security fixes
  • Cypher injection vulnerability via graphiti-core 0.28.1
v0.28.2 Security relevant
Security fixes
  • Hardened search filters against Cypher injection
Notable features
  • GLiNER2 hybrid LLM client
v0.28.1 Security relevant
Security fixes
  • Diskcache replaced with SQLite-based cache to address a CVE.
Full changelog

What's Changed

  • fix: extract custom edge attributes on first episode ingestion by @prasmussen15 in https://github.com/getzep/graphiti/pull/1242
  • fix: replace diskcache with sqlite-based cache to resolve CVE by @jackaldenryan in https://github.com/getzep/graphiti/pull/1238
  • chore: bump version to 0.28.1 by @prasmussen15 in https://github.com/getzep/graphiti/pull/1243

Full Changelog: https://github.com/getzep/graphiti/compare/v0.28.0...v0.28.1

v0.28.0 Mixed
Security fixes
  • Removed PII from log messages
Notable features
  • Batch entity summarization
  • Neptune and Kuzu database drivers
  • Simplified extraction pipeline
Full changelog

What's Changed

  • feat: simplify extraction pipeline and add batch entity summarization by @prasmussen15 in https://github.com/getzep/graphiti/pull/1224
  • chore(deps): update dependencies to fix dependabot alerts by @jackaldenryan in https://github.com/getzep/graphiti/pull/1225
  • feat: driver operations architecture redesign by @prasmussen15 in https://github.com/getzep/graphiti/pull/1232
  • Bump graphiti-core[falkordb] from 0.26.3 to 0.27.1 in /mcp_server by @dependabot[bot] in https://github.com/getzep/graphiti/pull/1231
  • feat: implement Neptune and Kuzu driver operations by @prasmussen15 in https://github.com/getzep/graphiti/pull/1235
  • chore: bump version to 0.28.0 and document graph driver architecture by @prasmussen15 in https://github.com/getzep/graphiti/pull/1236
  • fix: remove PII from log messages by @prasmussen15 in https://github.com/getzep/graphiti/pull/1237

Full Changelog: https://github.com/getzep/graphiti/compare/v0.27.1...v0.28.0

v0.27.1 Bug fix

## What's Changed * fix(summary): exclude duplicate edges from node summary generation

v0.27.0 New feature
Notable features
  • Extracted edge facts added to entity summaries
  • Entity summary generation when no edges exist
  • Gemini 3 preview model support
v0.26.3 Maintenance

## What's Changed * Add interface override paths for direct database calls

v0.26.2 Bug fix

## What's Changed * Remove filter_existing_duplicate_of_edges call from resolve_extracted_nodes

v0.26.1 Maintenance

## What's Changed * Move saga logic into retrieve_episodes utility function * update

v0.26.0 New feature
Notable features
  • Sagas for graph operations
  • NotImplementedError fallback for GraphOperationsInterface methods
Full changelog

What's Changed

  • Add Sagas by @prasmussen15 in https://github.com/getzep/graphiti/pull/1149
  • Add NotImplementedError fallback for GraphOperationsInterface methods by @prasmussen15 in https://github.com/getzep/graphiti/pull/1154

Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.5...v0.26.0

v0.25.3 Bug fix

Fixed entity extraction for large episode inputs with adaptive chunking.

Beta — feedback welcome: [email protected]