mrkeyoor.com_
Tue 10 Nov 00:36 UTC
Dataevaluationupdated 24 Oct 2026

cocoindex review

CocoIndex is a Python framework with a Rust engine for maintaining derived data as sources change. Its README describes declaring target state and recomputing affected data, including re-embedding changed files. That is the documented design; our recorded sandbox run did not measure incremental processing, retrieval quality or production scale.

+21stars / 7d
Verdict

CocoIndex is worth a focused evaluation when a Python pipeline must keep derived data current. In our October 3, 2026 run at e26e975, install and build steps succeeded, but the test invocation failed and exposed an async-test execution limitation. That supports further setup investigation, not a blanket rejection of the framework. Start with the documented local PDF example, then validate changes, deletions and recovery on your actual target before making an adoption decision.

We ran it

Lab card: what happened when we ran cocoindexScreenshot of cocoindex (cocoindex.io)
Install✓ · 264s203 packages · 6084 MB
Build✓ · 5s
Tests✗ · 527s375 passed · 190 failed · 10 skipped · 10 errors of 575 (pytest)
Known vulns0(pip-audit)
Repo1187 files~194,733 lines of source · 44.4 MB · 10 CI workflows

Answers from our run

Does cocoindex build from source?

Dependencies installed in 264 seconds (203 packages), and the build succeeded in 5 seconds. We cloned commit e26e975 into a clean Debian container with 3 CPUs and no project-specific setup.

Do cocoindex's tests pass?

No. The project's own test command finished in 527 seconds and reported 375 passed, 190 failed, 10 skipped, 10 collection errors (pytest).

Does cocoindex have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use cocoindex?

Teams seeking measured production throughput, embedding savings or retrieval-quality results from this review: our run measured setup commands and a test invocation.

What are the alternatives to cocoindex?

Dagster, dlt. CocoIndex is worth a focused evaluation when a Python pipeline must keep derived data current.

Setup3/5Under the visible evidence rubric, successful install and build steps provide an evaluation starting point. The October 3, 2026 test invocation had async execution failures, and no installed-binary or pipeline workload check is established.
Docs3/5The supplied v1.0.14 quickstart documents dependencies, local state configuration, execution and incremental changes. These extracts do not establish comprehensive documentation quality.
Community2/5The supplied sources show contribution channels and issue 2358 closed as completed. They do not establish support responsiveness or user adoption; this score reflects limited evidence.
Maturity3/5A documented workflow and completed connector issue support a focused evaluation. Our setup run does not establish production reliability, full connector compatibility or recovery behavior.

Discussed on

  1. hnShow HN: CocoIndex – Open-Source Data framework for AI, built for data freshness14 points
  2. hnShow HN: Open-Source Structured Extraction with LLM Using Ollama5 points
  3. hnShow HN: Open-Source ETL to index data4 points
  4. hnShow HN: CocoIndex – Open-Source Data transformation for AI, only process delta4 points
  5. hnCocoIndex – open-source ETL saves you >90% compute for AI workloads4 points

Who it’s for

Python developers evaluating incremental document processing or AI indexes.
Teams that want to test whether caching unchanged transformations reduces repeated work in their own pipeline.
Engineers willing to validate source changes, deletions and recovery against their chosen target.

Who it’s NOT for

Teams seeking measured production throughput, embedding savings or retrieval-quality results from this review: our run measured setup commands and a test invocation.
Teams that need this sandbox result to establish complete connector compatibility or security coverage.
Developers with a one-off conversion job who have no need to maintain derived state between runs.

Setup reality

In our recorded run on October 3, 2026, at commit e26e9757d10f8c2a7a57754132bf799227297279, the install step exited successfully after 264 seconds and the build step after 5 seconds. The dependency metrics recorded 203 packages and 6,084 MB. These are harness step results, not an installed-binary check or a completed pipeline workload.

The test step exited 1 after 527 seconds. Its recorded summary was 375 passed, 190 failed, 10 skipped and 10 errors. The parser's total field was 575, but unique and exhaustive test coverage was not reconciled. The log includes repeated failures saying async functions are not natively supported, so this result does not establish that 190 product features are broken.

The recorded sandbox configuration was 3 CPUs, 8 GB of memory and image ghcr.io/astral-sh/uv:python3.12-bookworm. The install tail identifies a Python 3.11.2 environment; the image tag alone does not establish the runtime. The checkout metrics were 1,187 files, approximately 194,733 source lines and 44.4 MB. Detection found 10 CI workflows, no Dockerfile or Compose file, and Python tests despite no root tests directory.

The audit recorded an advisory total of 0. Audit coverage is unknown, so this is not evidence that all installed dependencies were checked or that the project is secure.

Is incremental processing the reason to choose CocoIndex?

CocoIndex is worth evaluating when you need to update derived data repeatedly as its sources change. The README describes a Python interface backed by a Rust engine: declare the desired target state, run an initial backfill, then process changes on later runs. Its embedding example says unchanged files avoid re-embedding. We did not measure that behavior, its savings or its performance at scale.

For a one-off conversion, first decide whether maintaining state between runs solves a problem you actually have. For an index that changes regularly, the useful question is whether updates and deletions reach the target correctly under your workload.

What our recorded run establishes

Our stored run took place on October 3, 2026, at commit e26e9757d10f8c2a7a57754132bf799227297279. No new execution was performed for this correction.

The install step succeeded in 264 seconds, and the build step succeeded in 5 seconds. Recorded dependency metrics were 203 packages and 6,084 MB. The available record does not separate dependency download time from installation work or establish that an installed CLI was checked. It also contains no completed PDF conversion, embedding benchmark or production workload.

The sandbox configuration recorded 3 CPUs, 8 GB of memory and image ghcr.io/astral-sh/uv:python3.12-bookworm. The install log explicitly says it used a Python 3.11.2 environment. Use that runtime observation rather than inferring Python 3.12 from the image name.

The checkout contained 1,187 files, approximately 194,733 source lines and 44.4 MB. Detection found 10 CI workflows and Python tests, with no root tests directory, Dockerfile or Compose file. Those are repository observations, not evidence of connector reliability.

The failed test invocation needs diagnosis

The harness test step lasted 527 seconds and exited with code 1. Its log reported 190 failed, 375 passed, 10 skipped and 10 errors, and said it was stopping after 200 failures. The pytest summary's own elapsed time was 516.95 seconds; that is distinct from the harness step duration.

The parser also stored a total of 575. We have not reconciled the complete log or verified unique, exhaustive coverage, so these figures should not become a pass percentage or a claim about the full suite.

Many displayed core-test failures say that async functions are not natively supported. This identifies an async-test execution limitation in this invocation. It does not establish that the corresponding application behavior is broken. The tail also names errors in Postgres target, SurrealDB target, Turbopuffer target and Valkey target test modules, without enough detail to diagnose each error. Neither missing credentials nor connector defects can be assigned as a universal cause from this tail.

The audit recorded 0 advisories, but its coverage is unknown. We cannot turn that result into a clean dependency-security assessment.

A useful first evaluation

The supplied quickstart is labeled v1.0.14 and last reviewed July 4, 2026. It documents converting local PDFs to Markdown with Docling, configuring COCOINDEX_DB to use ./cocoindex.db, and running cocoindex update main.py. It describes processing added or modified files and removing the corresponding Markdown output after a source deletion. These are documented behaviors, not observations from our sandbox run.

Follow that example before adding your own services. Check the initial output, change one input, delete another and confirm the resulting target state. Then test a transformation change and restart recovery. For an embedding pipeline, record model calls, elapsed time and tracking storage alongside target storage. Those checks would answer workload questions that our setup run cannot.

Read connector reports with their status and scope

The supplied extract for Doris issue 2358 describes a report against aee7b27d in which failed column DDL could leave tracking state ahead of the actual schema. The issue is marked closed as completed in PR 2359 on September 4, 2026. It should not be presented as a currently open defect. Closure also does not substitute for testing the connector and version you deploy; we did not reproduce the report or verify the fix in our run.

When to consider Dagster or dlt

Dagster's README describes an orchestrator for declared data assets with lineage and observability. Consider it when scheduling and coordinating asset-producing functions is the central requirement.

dlt's README describes loading source data into structured, typed datasets, with schema inference, normalization and incremental loading. Consider it when extraction and loading are the main job.

These are comparisons of documented roles. We did not run either alternative, establish feature parity or show that one replaces every part of a CocoIndex pipeline.

How to read the scores

The scores are editorial assessments, not benchmark results. The rubric is: 1 means substantial documented obstacles; 2 means limited supporting evidence; 3 means a workable evaluation starting point with material gaps; 4 means broad supporting evidence with limited gaps; 5 requires comprehensive supporting evidence for the category. Missing evidence lowers confidence and does not prove poor product quality.

Setup receives 3 because the recorded install and build steps succeeded, while test execution needs investigation and no pipeline workload was verified. Documentation receives 3 because the supplied quickstart gives a concrete local workflow but does not establish the quality or completeness of all documentation. Community receives 2 because the supplied material shows participation channels and a completed issue, without establishing support responsiveness or adoption. Maturity receives 3 because the documented workflow and issue resolution support a trial, while this evidence does not establish production reliability.

Begin with one source and one target. Make adoption depend on correct updates, deletions and recovery in that pipeline, plus measurements of the repeated work you want to avoid.

Alternatives

ProjectWhat it isPick it when
DagsterA data pipeline orchestrator built around declared data assets, lineage and observability.Consider Dagster when coordinating and observing data assets is your main requirement. Its README describes running asset-producing functions at the right time; this review does not establish equivalent incremental recomputation behavior.
dltA Python library for loading source data into structured, typed datasets.Consider dlt when your main task is extraction and loading with schema inference, normalization and incremental loading. Evaluate CocoIndex separately if maintaining transformation-derived target state is central to your pipeline.

What people are saying

  1. [github-trending] cocoindex-io/cocoindex

Sources

  1. CocoIndex README
  2. CocoIndex quickstart
  3. CocoIndex v1.0.20 release
  4. Issue 1779: memoization storage
  5. Issue 2358: Doris schema reconciliation
  6. CocoIndex repository metadata

More data reviews

rerun · telegraf · rocksdb · redash · akshare · DB-GPT · the whole board →