Cocoindex changelog: what's new each month
Every stable Cocoindex release summarised by month: the highlights, new features, improvements, fixes and anything you need to act on. 3 months covered; the current month updates daily.
October 2026 · so far
1 release: 1.0.25
October brought performance improvements and memory optimizations across Cocoindex, along with enhancements to the Rust SDK and GPU handling capabilities.
Highlights
- GPUPool rewritten in Rust with support for acquiring multiple GPUs at once and improved event loop reliability.
- Significant memory reduction for declared target states through early release and encoded row storage.
- Fingerprint computation now ~9× faster by computing plain data natively.
- New memo state recollection option for states that depend on function body reads.
- Target handlers can now skip reconciliation for unchanged values to improve performance on partial updates.
New
- Environment.close() method to explicitly release LMDB environments and allow reopening without waiting for garbage collection.
- MemoStateOutcome.recollectafterrun option to have memo state functions re-collected after a re-run when their results depend on what the function read.
- Rust SDK support for per-item memoization with #[cocoindex::function(memo, batching)] decorator.
- contextkey! macro for Rust SDK.
- Connector schemas can now be derived from Rust row types via SchemaFields and TableSchema::fromrow.
- tracksvaluefingerprint option for target handlers to skip reconcile() calls for rows with unchanged values.
Improved
- GPUPool can now acquire multiple whole GPUs at once instead of single GPUs.
- GPUPool no longer loses wake-ups across event loops.
- Performance improved for large target updates.
- Declared target states now released immediately after pre-commit instead of held in memory.
- Python row values stored in encoded form to reduce memory footprint.
- Fingerprint computation for both fingerprintobject and memo fingerprints now uses native plain data handling.
Fixed
- Large component memory usage reduced by ~1.33 GiB on a 1.14 M-row component through optimized state storage.
September 2026
4 releases: 1.0.21 → 1.0.24
September brought critical fixes for concurrency and memoization, along with API changes for custom target connectors. The month focused on reliability improvements across the engine and state management.
- Custom target connector sinks: returning ChildTargetDef lists is deprecated in favor of per-action child slots.
- Sinks with callbacks that compare equal but differ in type no longer share sink identity.
- Callbacks that cannot be weak-referenced (e.g. NamedTuple instances) now raise TypeError.
Highlights
- Fixed long App.update() runs on Linux that could hang permanently due to LMDB write transaction issues.
- Resolved spurious re-execution of memoized functions under concurrency and during notebook reloads.
- Updated custom target connector sink API to use per-action child slots instead of returning lists.
- Fixed embedding response alignment in LiteLLM integration.
- Added Lua syntax-aware code splitting support via tree-sitter grammar.
New
- Lua language support for syntax-aware code splitting.
- Per-action child slots for container sinks (TargetActionSink.fromfnwithchildren and fromasyncfnwithchildren).
- Explicit component activity tracking independent of reference counting.
Improved
- Target action sinks now use value-based identity instead of previous behavior.
- Memoized components now execute once when run concurrently with the same memo key, with queued runs reusing results.
- Memoization now persists through notebook cell re-runs and importlib.reload operations.
- Child target provider generation is now properly refreshed for newly created target states.
- Component exception handlers receive the original typed Python exception instead of wrapping.
- Event loop no longer blocks during iterator cleanup.
Fixed
- Schema reconciliation for Neo4j and FalkorDB during full reprocessing.
- Column DDL failures in Doris are no longer silently swallowed.
- Windows app target path parsing in CLI.
- Child-existence reconciliation logic on demote-only deletes.
- Merged target-action batch failures now confined to failing component instead of propagating.
- LiteLLM embedding responses misaligned with inputs.
August 2026
2 releases: 1.0.19 → 1.0.20
August brought critical stability fixes and security updates to Cocoindex. The month focused on resolving issues with indexing consistency and memoization reliability.
Highlights
- Fixed target invalidation preservation through memoization to prevent stale cached results
- Resolved inverted index corruption on component deletion that could cause data inconsistency
- Patched critical security vulnerabilities in dependencies (CVSS 7.5 DoS and XSS issues)
- Improved schema consistency handling during failed column migrations
New
- New example demonstrating meeting notes to knowledge graph conversion using SurrealDB
Improved
- Fingerprint key canonicalization now deterministic for consistent memoization
- Column schema evolution in LanceDB now applies under full reprocess for data integrity
- Dependency chain upgraded with security alerts cleared
Fixed
- Inverted target-owner index now correctly cleared on component deletion
- SQLite schema consistency preserved when column migrations fail
- Memoization cache now properly invalidates targets to prevent stale data
- Security vulnerabilities in SurrealDB (quinn-proto DoS) and ammonia (XSS) patched
Summaries are written automatically from the official release notes (full changelog ↗); check the original notes before relying on a detail. Cocoindex: pricing, features and alternatives · All changelogs
