CocoIndex Community Forum and Support Channels: Getting Help with Incremental Data Pipelines
The CocoIndex community primarily gathers on Discord for real-time support, while GitHub Discussions and Issues track bugs and feature requests, complemented by comprehensive documentation and video tutorials.
CocoIndex is a declarative, incremental indexing framework maintained in the cocoindex-io/cocoindex repository. Whether you're troubleshooting a pipeline built with the Rust core engine or seeking advice on connector implementations, knowing where to find CocoIndex community forum or support channels ensures you get timely help from maintainers and contributors.
Official Community Forum and Support Channels
Discord Community Forum
The Discord server at https://discord.com/invite/zpA9S2DR7s serves as the primary community forum for CocoIndex. This is the fastest way to get help with incremental pipeline logic, discuss architecture decisions involving the Rust core, or share projects in the #showcase channel. The maintainers actively monitor this space for questions about specific implementation details, such as using mount_each in cocoindex/_internal/api.py or debugging target state reconciliation in cocoindex/_internal/target_state.py.
GitHub Discussions and Issues
For bug reports, feature requests, and detailed technical discussions, use the GitHub repository at https://github.com/cocoindex-io/cocoindex/issues. When reporting issues with specific components—such as the App class in cocoindex/_internal/app.py or the live component framework in cocoindex/_internal/live_component.py—include minimal reproduction code and specify whether you're using the default SQLite state database or an external connector like PostgreSQL.
Documentation and Video Resources
The official documentation at https://cocoindex.io/docs provides API references and architecture diagrams for understanding the relationship between components, target states, and the Mount API. The YouTube channel at https://www.youtube.com/@cocoindex-io offers video tutorials covering advanced topics like building custom connectors in python/cocoindex/connectors/ or implementing memoized functions with @coco.fn.
Understanding the CocoIndex Architecture
To effectively engage with the community, understanding CocoIndex's core architecture helps you ask precise questions. The framework consists of a Python ergonomic layer and a high-performance Rust core that handles parallel chunking, change detection, and persistence.
| Concept | What it does | Core implementation |
|---|---|---|
| App | Top‑level entry point that ties a user‑defined main function to the incremental engine. |
[cocoindex/_internal/app.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/_internal/app.py) |
| Component | A processing unit identified by a stable component path; owns a set of target states. | [cocoindex/_internal/component_ctx.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/_internal/component_ctx.py) |
| Target State | Declared description of a resource that must exist (e.g., a table row, a file). | [cocoindex/_internal/target_state.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/_internal/target_state.py) |
| Mount API | mount, mount_each, use_mount, mount_target – async‑first helpers to launch components and retrieve results. |
[cocoindex/_internal/api.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/_internal/api.py) |
| Live Component | Background‑running component that continuously processes a live data source (e.g., a Kafka topic). | [cocoindex/_internal/live_component.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/_internal/live_component.py) |
| Environment | Holds configuration, lifespan hooks, and the Rust core handle. | [cocoindex/_internal/environment.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/_internal/environment.py) |
| Rust Core | High‑performance async engine (parallel chunking, change detection, persistence). | rust/core crate (built via uv run maturin develop). |
| Connectors | Plug‑ins that turn external systems into targets (Postgres, SQLite, Qdrant, S3, Kafka, etc.). | python/cocoindex/connectors/… (e.g., [postgres.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/connectors/postgres.py)) |
| Ops | Re‑usable data‑processing utilities (text splitting, LLM extraction, embeddings). | python/cocoindex/ops/… (e.g., [text.py](https://github.com/cocoindex-io/cocoindex/blob/main/python/cocoindex/ops/text.py)) |
The engine persists a state database (SQLite by default) that records the stable path of each component, the hash of its code, and the hash of each target's declared data. On every App.update(), the engine computes new hashes, determines which components changed, and re-executes only the changed components and downstream dependents.
Building Incremental Pipelines: Code Examples
When asking for help in community channels, referencing these canonical patterns helps maintainers understand your context.
Basic File Indexing Pipeline
This example walks a local directory, splits files into text chunks, embeds them, and upserts into PostgreSQL:
import pathlib
import cocoindex as coco
from cocoindex.connectors import localfs, postgres
from cocoindex.ops.text import RecursiveSplitter
@coco.fn(memo=True)
async def index_file(file: localfs.FileLike, table: postgres.TableTarget) -> None:
for chunk in RecursiveSplitter().split(await file.read_text()):
vector = await embed(chunk.text)
table.declare_row(text=chunk.text, embedding=vector)
@coco.fn
async def main(src_dir: pathlib.Path):
table = await coco.use_mount(postgres.declare_table_target, "mydb", table_name="docs")
table.declare_vector_index(column="embedding")
await coco.mount_each(index_file, localfs.walk_dir(src_dir).items(), table)
coco.App(
coco.AppConfig(name="DocsIndex"),
main,
src_dir=pathlib.Path("./docs")
).update_blocking(report_to_stdout=True)
Live Kafka-to-Postgres Stream
For questions about live components and streaming sources:
import cocoindex as coco
from cocoindex.connectors import kafka, postgres
@coco.fn
async def process_message(msg: kafka.Message, table: postgres.TableTarget):
data = json.loads(msg.value)
table.declare_row(id=data["id"], payload=data["payload"])
@coco.fn
async def main():
source = await coco.use_mount(kafka.consume_topic, topic="events")
table = await coco.use_mount(postgres.declare_table_target, "mydb", table_name="events")
await coco.mount(kafka.LiveKafkaConsumer, source, table, processor=process_message)
coco.App(coco.AppConfig(name="KafkaIngest"), main).update_blocking()
Key Source Files for Contributors
When reporting bugs or requesting features, reference these specific files:
Summary
- Discord serves as the primary real-time CocoIndex community forum for questions and showcases.
- GitHub Issues track bugs in specific files like
cocoindex/_internal/app.pyor connectors. - Documentation and YouTube provide self-service resources for understanding the Rust core and Python API.
- The framework combines a thin Python ergonomic layer with a high-performance Rust core engine.
- Connectors and Ops follow consistent patterns in
python/cocoindex/for extending functionality.
Frequently Asked Questions
How do I get help with a specific error in my CocoIndex pipeline?
Post the error message and relevant code snippet in the Discord #help channel or create a GitHub Issue if it appears to be a bug. Include details about your environment, such as whether you're using the default SQLite state database or external targets like PostgreSQL, and reference specific methods like mount_each or declare_row that are failing.
Where can I share my CocoIndex project with the community?
Use the #showcase channel on Discord or tag @cocoindex_io on X (Twitter). The maintainers actively highlight community projects that demonstrate innovative uses of incremental indexing, custom connectors in python/cocoindex/connectors/, or creative applications of the LiveComponent framework.
How do I report a bug in the Rust core engine?
File a GitHub Issue in the cocoindex-io/cocoindex repository with reproduction steps and any panic logs. The Rust core handles parallel processing, change detection, and persistence, so include information about your data volume, connector types (Postgres, Kafka, etc.), and whether the issue occurs during initial indexing or incremental updates.
Is there a mailing list or forum outside of Discord and GitHub?
Currently, Discord serves as the primary CocoIndex community forum, supplemented by GitHub Discussions for long-form technical conversations about architecture decisions. The documentation site at https://cocoindex.io/docs and the YouTube channel provide official tutorials and API references for asynchronous learning without real-time interaction.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →