NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4948 most downloaded on PyPI
A temporal graph building library
Last release 26 days ago
08 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
194 releases · first in 2024
One column per month.
fix(ci): bump gh-action-pypi-publish for metadata 2.5 by @prasmussen15 in #1821
Full Changelog: v0.30.0...v0.30.2
v0.30.2 - FalkorDB updates Latest
Latest
Compare
Fixed: Neo4j queries now respect the configured database Neo4jDriver.execute_query() previously ignored the driver's database setting and ran all quer
Fixed: Neo4j queries now respect the configured database
Neo4jDriver.execute_query() previously ignored the driver's database setting and ran all queries (including searches) against the server's home database, while session-based writes used the configured one (#1481, #851, #798). Queries are now correctly routed to the configured database, defaulting to neo4j. A per-call override is also supported via execute_query(..., database_="name").
⚠️ Behavior change for existing deployments:
WHO IS AFFECTED: This only impacts self-hosted Neo4j Enterprise deployments (multi-database support is an Enterprise feature) where the database parameter was manually set to something other than neo4j in the Graphiti client, or where the server's default database was renamed. If you run a standard Neo4j setup with the default neo4j database, no action is needed.
If your server's home database is not named neo4j and you don't pass database to the driver, queries now target neo4j instead of your home database — pass your database name explicitly to keep the old behavior.
If you configured a custom database, reads now correctly target it. Data previously written via execute_query may reside in your home database and may need to be migrated.
Full Changelog: v0.29.3...v0.30.0
v0.30.1 - Neo4j Custom Database Fix, Search Fixes and Other Miscellaneous Fixes
Compare
Allow Edge extraction to keep discovered edge labels by @danielchalef in https://github.com/getzep/graphiti/pull/950
Full Changelog: https://github.com/getzep/graphiti/compare/v0.30.0pre4...v0.30.0pre5
fix: Add edge type validation based on node labels by @danielchalef in https://github.com/getzep/graphiti/pull/948
Full Changelog: https://github.com/getzep/graphiti/compare/v0.30.0pre3...v0.30.0pre4
Improve node dedup prompts by @danielchalef in https://github.com/getzep/graphiti/pull/942
Full Changelog: https://github.com/getzep/graphiti/compare/v0.30.0pre2...v0.30.0pre3
Fix index out of range errors in LLM deduplication responses by @danielchalef in https://github.com/getzep/graphiti/pull/939
Full Changelog: https://github.com/getzep/graphiti/compare/v0.30.0pre1...v0.30.0pre2
Refactor batch deduplication logic to enhance node resolution and track duplicate pairs (#929) by @danielchalef in https://github.com/getzep/graphiti/
Full Changelog: https://github.com/getzep/graphiti/compare/v0.30.0pre0...v0.30.0pre1
Improve node/edge deduplication w/ deterministic matching, LLM fallbacks by @danielchalef in https://github.com/getzep/graphiti/pull/929
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre6...v0.30.0pre0
chore(deps-dev): update redis requirement from <8 to <9 by @dependabot [bot] in #1561
Full Changelog: v0.29.2...v0.29.3
Full Changelog: https://github.com/getzep/graphiti/compare/v0.29.2...v0.29.3
v0.29.3 - FalkorDB and other Optimizations
Compare
deprecate(kuzu): mark Kuzu deprecated; drop from default test matrix by @danielchalef in #1548
Full Changelog: v0.29.1...v0.29.2
Full Changelog: https://github.com/getzep/graphiti/compare/v0.29.1...v0.29.2
Patch release covering quality and reliability improvements landed since 0.29.0.
Patch release covering quality and reliability improvements landed since 0.29.0.
Extraction quality
Attribute-hallucination guards (#1498) — addresses a customer report of up to 9KB of LLM meta-reasoning landing in entity attribute fields (e.g. phones,
industry). The LLM was dumping internal deliberation and echoing schema description text back into values. Three layered defenses:
Structural backstop — cap_string_attributes: drops any string attribute >250 chars before it reaches the graph. Configurable per-field via Pydantic
Field(max_length=...) or globally via GRAPHITI_ATTRIBUTE_MAX_LENGTH. Also handles list[str] (per-item + aggregate cap of max_len * 8). Required-field carve-out
retains the value with a louder WARNING rather than dropping (avoids ValidationError-ing the whole entity). Edge writes use scoped merge for over-cap drops only
— fields the LLM legitimately omitted still clear. group_id flows to the log line for tenant correlation.
Combined-extraction entity & edge precision (#1498) — targets six classes of low-quality entities (multi-choice fragments, clock times, quantities, coordinates,
imperative tip phrases, slogans) plus two systematic edge regressions (location-fragmentation through scenery intermediaries, dropped multi-episode setup
facts).
Locomo 500-example eval (prompt change only):
Saga summarization
Episode-time watermarks for sagas (#1498) — saga (thread summary) timestamps now reflect originating-episode time rather than wall-clock time. SagaNode now
carries two deliberately distinct watermarks:
saga_get_episode_contents now returns list[(content, valid_at)] tuples so callers can compute the watermark. _get_or_create_saga renames now → created_at;
callers pass the episode's valid_at so a newly minted saga's created_at matches the episode that produced it.
Docker / packaging
Docs
Full Changelog: v0.29.0...v0.29.1
v0.29.1 - Optimizations and Efficiencies
Compare
Release Notes — graphiti-core 0.29.0
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.
v0.29.0 - Major efficiency and Internal Architecture changes
Compare
chore: regenerate lockfiles to drop diskcache by @prasmussen15 in https://github.com/getzep/graphiti/pull/1244
Full Changelog: https://github.com/getzep/graphiti/compare/v0.28.1...v0.28.2
Full Changelog: v0.28.1...v0.28.2
v0.28.2 - SECURITY: Harden Search Filters Against Cypher Injection
Compare
fix: extract custom edge attributes on first episode ingestion by @prasmussen15 in https://github.com/getzep/graphiti/pull/1242
Full Changelog: https://github.com/getzep/graphiti/compare/v0.28.0...v0.28.1
Full Changelog: v0.28.0...v0.28.1
feat: simplify extraction pipeline and add batch entity summarization by @prasmussen15 in https://github.com/getzep/graphiti/pull/1224
Full Changelog: https://github.com/getzep/graphiti/compare/v0.27.1...v0.28.0
Full Changelog: v0.27.1...v0.28.0
v0.28.0 - Update GraphDriver Integrations
Compare
feat: simplify extraction pipeline and add batch entity summarization by @prasmussen15 in https://github.com/getzep/graphiti/pull/1224
Full Changelog: https://github.com/getzep/graphiti/compare/v0.27.1...v0.27.2pre1
v0.27.2pre1 - more ingestion efficiency gains Pre-release
Pre-release
Compare
fix(summary): exclude duplicate edges from node summary generation by @prasmussen15 in https://github.com/getzep/graphiti/pull/1223
Full Changelog: https://github.com/getzep/graphiti/compare/v0.27.0...v0.27.1
v0.27.1 - fix duplicate info appearing in summaries
Compare
Fix dependabot security vulnerabilities by @danielchalef in https://github.com/getzep/graphiti/pull/1184
Full Changelog: https://github.com/getzep/graphiti/compare/v0.26.3...v0.27.0
Fix dependabot security vulnerabilities by @danielchalef in https://github.com/getzep/graphiti/pull/1184
Full Changelog: https://github.com/getzep/graphiti/compare/v0.27.0pre1...v0.27.0pre2
Add extracted edge facts to entity summaries by @prasmussen15 in https://github.com/getzep/graphiti/pull/1182
Full Changelog: https://github.com/getzep/graphiti/compare/v0.26.3...v0.27.0pre1
Add interface override paths for direct database calls by @prasmussen15 in https://github.com/getzep/graphiti/pull/1172
Full Changelog: https://github.com/getzep/graphiti/compare/v0.26.2...v0.26.3
Remove filter_existing_duplicate_of_edges call from resolve_extracted_nodes by @prasmussen15 in https://github.com/getzep/graphiti/pull/1169
Full Changelog: https://github.com/getzep/graphiti/compare/v0.26.1...v0.26.2
Move saga logic into retrieve_episodes utility function by @prasmussen15 in https://github.com/getzep/graphiti/pull/1167
Full Changelog: https://github.com/getzep/graphiti/compare/v0.26.0...v0.26.1
Add Sagas by @prasmussen15 in https://github.com/getzep/graphiti/pull/1149
Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.5...v0.26.0
Edge extraction efficiency by @prasmussen15 in https://github.com/getzep/graphiti/pull/1140
Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.4...v0.25.5
use custom instructions in all extraction steps by @prasmussen15 in https://github.com/getzep/graphiti/pull/1148
Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.3...v0.25.4
Fix entity extraction for large episode inputs with adaptive chunking by @danielchalef in https://github.com/getzep/graphiti/pull/1129
Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.2...v0.25.3
chore: Add None defaults to DateFilter date field and PropertyFilter property_value field by @paul-paliychuk in https://github.com/getzep/graphiti/pul
Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.1...v0.25.2
Update Add Triple by @prasmussen15 in https://github.com/getzep/graphiti/pull/1133
Full Changelog: https://github.com/getzep/graphiti/compare/v0.25.0...v0.25.1
Fix/model name config by @ronaldmego in https://github.com/getzep/graphiti/pull/1094
Full Changelog: https://github.com/getzep/graphiti/compare/v0.24.3...v0.25.0
bump by @prasmussen15 in https://github.com/getzep/graphiti/pull/1093
Full Changelog: https://github.com/getzep/graphiti/compare/v0.24.2...v0.24.3
[Doc]: fixing typos in various files by @didier-durand in https://github.com/getzep/graphiti/pull/1067
Full Changelog: https://github.com/getzep/graphiti/compare/v0.24.0...v0.24.1
Bump graphiti-core to v0.23.1 in mcp_server by @danielchalef in https://github.com/getzep/graphiti/pull/1060
Full Changelog: https://github.com/getzep/graphiti/compare/v0.23.1...v0.24.0
Fix entity edge save by @galshubeli in https://github.com/getzep/graphiti/pull/1013
Full Changelog: https://github.com/getzep/graphiti/compare/v0.23.0...v0.23.1
[Improvement] Add GraphID isolation support for FalkorDB multi-tenant architecture
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0...v0.23.0
Add Zep vs Graphiti comparison table to README by @jackaldenryan in https://github.com/getzep/graphiti/pull/1014
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0...v0.22.1pre2
Add Zep vs Graphiti comparison table to README by @jackaldenryan in https://github.com/getzep/graphiti/pull/1014
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0...v0.22.1pre1
fix deprecated cypher pattern by @prasmussen15 in https://github.com/getzep/graphiti/pull/993
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0...v0.22.0
Remove JSON indentation from prompts to reduce token usage by @danielchalef in https://github.com/getzep/graphiti/pull/985
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0pre4...v0.22.0pre5
Add OpenTelemetry distributed tracing support by @danielchalef in https://github.com/getzep/graphiti/pull/982
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0pre3...v0.22.0pre4
Refactor prompt structure: move MESSAGES after instructions by @danielchalef in https://github.com/getzep/graphiti/pull/980
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0pre2...v0.22.0pre3
Refactor summary prompts to use character limit and prevent meta-commentary by @danielchalef in https://github.com/getzep/graphiti/pull/979
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0pre1...v0.22.0pre2
Prompt for shorter summaries with 8 sentence limit by @danielchalef in https://github.com/getzep/graphiti/pull/978
Full Changelog: https://github.com/getzep/graphiti/compare/v0.22.0pre0...v0.22.0pre1
Refactor node extraction; remove summary from attribute extraction by @danielchalef in https://github.com/getzep/graphiti/pull/977
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0...v0.22.0pre0
Since the release of v0.20.4 we have dramatically improved the quality of extractions, significantly reduced the number of runtime errors when adding
Since the release of v0.20.4 we have dramatically improved the quality of extractions, significantly reduced the number of runtime errors when adding an episode, and improved consistency and reliability of graph building.
Full Changelog: https://github.com/getzep/graphiti/compare/v0.20.4...v0.21.0
validate nodes and edges aren't falsey by @prasmussen15 in https://github.com/getzep/graphiti/pull/973
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre12...v0.21.0pre13
Remove ensure_ascii configuration parameter by @danielchalef in https://github.com/getzep/graphiti/pull/969
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre11...v0.21.0pre12
Refactor issue workflows for improved automation by @danielchalef in https://github.com/getzep/graphiti/pull/964
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre10...v0.21.0pre11
fix: Fix typo in JSON entity extraction prompt by @jackaldenryan in https://github.com/getzep/graphiti/pull/953
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre9...v0.21.0pre10
chore: Update edge extraction prompt to paraphrase instead of quote by @danielchalef in https://github.com/getzep/graphiti/pull/957
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre8...v0.21.0pre9
fix: Prevent duplicate edge facts within same episode by @danielchalef in https://github.com/getzep/graphiti/pull/955
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre7...v0.21.0pre8
Improve JSON entity extraction prompt by @jackaldenryan in https://github.com/getzep/graphiti/pull/949
Full Changelog: https://github.com/getzep/graphiti/compare/v0.30.0pre5...v0.21.0pre7
don't save duplicate edges by @prasmussen15 in https://github.com/getzep/graphiti/pull/927
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre5...v0.21.0pre6
Skip entity attribute extraction when no fields defined by @danielchalef in https://github.com/getzep/graphiti/pull/924
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre4...v0.21.0pre5
fix-fulltext-syntax-error by @galshubeli in https://github.com/getzep/graphiti/pull/914
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre3...v0.21.0pre4
Embedding fix by @prasmussen15 in https://github.com/getzep/graphiti/pull/917
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre2...v0.21.0pre3
OpenSearch updates by @prasmussen15 in https://github.com/getzep/graphiti/pull/906
Full Changelog: https://github.com/getzep/graphiti/compare/v0.21.0pre1...v0.21.0pre2
OpenSearch Integration for Neo4j by @prasmussen15 in https://github.com/getzep/graphiti/pull/896
Full Changelog: https://github.com/getzep/graphiti/compare/v0.20.4...v0.21.0pre1
Add return to add_triplet by @prasmussen15 in https://github.com/getzep/graphiti/pull/898
Full Changelog: https://github.com/getzep/graphiti/compare/v0.20.3...v0.20.4
add episode bulk search results by @prasmussen15 in https://github.com/getzep/graphiti/pull/897
Full Changelog: https://github.com/getzep/graphiti/compare/v0.20.2...v0.20.3
Your coding agent can read these notes before it upgrades. Set up the MCP server →