From b074db2b6452e6a96bfd83559b83fd0b8dac1f62 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Thu, 8 May 2025 23:54:55 -0700 Subject: [PATCH 01/16] Update README.md --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 3f48ec28..db2bdf4b 100644 --- a/README.md +++ b/README.md @@ -12,18 +12,14 @@ [![PyPI version](https://img.shields.io/pypi/v/cocoindex?color=5B5BD6)](https://pypi.org/project/cocoindex/) [![PyPI - Downloads](https://img.shields.io/pypi/dm/cocoindex)](https://pypistats.org/packages/cocoindex) - [![CI](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml/badge.svg?event=push&color=5B5BD6)](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml) [![release](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml/badge.svg?event=push&color=5B5BD6)](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml) [![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s) - - - CocoIndex is the world's first open-source engine that supports both custom transformation logic and incremental updates specialized for data indexing.

- CocoIndex + CocoIndex Features

With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes. From 7e51aea6ad3096c4f3e883029739a81f77c7ab35 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Thu, 8 May 2025 23:57:25 -0700 Subject: [PATCH 02/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db2bdf4b..53ec5f62 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ CocoIndex is the world's first open-source engine that supports both custom transformation logic and incremental updates specialized for data indexing.

- CocoIndex Features + CocoIndex Features

With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes. From d3eb3b133bed98d6c53d769736fa491545736203 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Thu, 8 May 2025 23:58:04 -0700 Subject: [PATCH 03/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 53ec5f62..e9ea8f99 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ CocoIndex is the world's first open-source engine that supports both custom transformation logic and incremental updates specialized for data indexing.

- CocoIndex Features + CocoIndex Features

With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes. From 37eb006ec2cf0484d19d1fae4c4e2cd008647801 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Thu, 8 May 2025 23:59:48 -0700 Subject: [PATCH 04/16] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e9ea8f99..481b73e6 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,13 @@ [![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s) -CocoIndex is the world's first open-source engine that supports both custom transformation logic and incremental updates specialized for data indexing. +CocoIndex is ultra performant data transformation framework, core engine written in Rust. The problem it tries to solve is to make it easy to prepare fresh data for AI - either embedding, knowledge graph, or a series of data transformation - and take the real-time data pipeline beyond traditional SQL. +

CocoIndex Features

-With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes. + +The philosophy is to have the framework handle the source updates, and having developers only focus on defining a series of data transformation, inspired by spreadsheet. ## Quick Start: From 1f73cb1c0bdf8d57622c879bbbaaa169d579ae43 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 00:01:41 -0700 Subject: [PATCH 05/16] Update README.md --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 481b73e6..3f762bdd 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,28 @@ CocoIndex is ultra performant data transformation framework, core engine written The philosophy is to have the framework handle the source updates, and having developers only focus on defining a series of data transformation, inspired by spreadsheet. +## Data Flow programming +CocoIndex follows [Data flow](https://en.wikipedia.org/wiki/Dataflow_programming) programming model. Compare with traditional orchestration framework, where data is opaque. In CocoIndex data and data operation are first class citizen, and there's no side effects for each data operation. All data are observable in each transformation, with lineage out of the box. + +Particularly, user don't define data operations like creation, update, deletion. But rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations like when to create, update, or delete. For example: + +```python +// ingest +data['content'] = flow_builder.add_source(...) + +// transform +data['out'] = data['content'] + .transform(...) + .transform(...) + +// collect data +collector.collect(...) + +// export to db, vector db, graph db ... +collector.export(...) +``` + + ## Quick Start: If you're new to CocoIndex ๐Ÿค—, we recommend checking out the ๐Ÿ“– [Documentation](https://cocoindex.io/docs) and โšก [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart). We also have a โ–ถ๏ธ [quick start video tutorial](https://youtu.be/gv5R8nOXsWU?si=9ioeKYkMEnYevTXT) for you to jump start. From bbd3bd2a34f25eb602a58589af8bc97f14cc8f4f Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 00:02:45 -0700 Subject: [PATCH 06/16] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 3f762bdd..05a2f8fd 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,12 @@ collector.collect(...) collector.export(...) ``` +## Data Freshness +As a data framework, CocoIndex takes it to the next level on data freshness. Incremental processing is one of the core values provided by CocoIndex. +The frameworks takes care of +- Change data capture +- Figuring out what exactly needs to be updated, and only updating that without having to recompute everything throughout. +This makes it fast to reflect any source updates to the target store. If you have concerns with surfacing stale data to AI agents and are spending lots of efforts working on infra piece to optimize the latency, the framework actually handles it for you. ## Quick Start: From c15d046ebe7f5feb086ef961a08626f3f47eed7f Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 00:11:47 -0700 Subject: [PATCH 07/16] Update README.md --- README.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 05a2f8fd..9218b2cb 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,11 @@ collector.export(...) ## Data Freshness As a data framework, CocoIndex takes it to the next level on data freshness. Incremental processing is one of the core values provided by CocoIndex. + +

+ Incremental Processing +

+ The frameworks takes care of - Change data capture - Figuring out what exactly needs to be updated, and only updating that without having to recompute everything throughout. @@ -55,7 +60,10 @@ This makes it fast to reflect any source updates to the target store. If you hav ## Quick Start: -If you're new to CocoIndex ๐Ÿค—, we recommend checking out the ๐Ÿ“– [Documentation](https://cocoindex.io/docs) and โšก [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart). We also have a โ–ถ๏ธ [quick start video tutorial](https://youtu.be/gv5R8nOXsWU?si=9ioeKYkMEnYevTXT) for you to jump start. +If you're new to CocoIndex, we recommend checking out +- ๐Ÿ“– [Documentation](https://cocoindex.io/docs) +- โšก [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart) +- ๐ŸŽฌ [Quick Start Video Tutorial](https://youtu.be/gv5R8nOXsWU?si=9ioeKYkMEnYevTXT) ### Setup 1. Install CocoIndex Python library @@ -64,17 +72,12 @@ If you're new to CocoIndex ๐Ÿค—, we recommend checking out the ๐Ÿ“– [Documentati pip install -U cocoindex ``` -2. Setup Postgres with pgvector extension; or bring up a Postgres database using docker compose: - - - Make sure Docker Compose is installed: [docs](https://docs.docker.com/compose/install/) - - Start a Postgres SQL database for cocoindex using our docker compose config: +2. [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one. CocoIndex uses it for incremental processing. - ```bash - docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoindex/refs/heads/main/dev/postgres.yaml) up -d - ``` ### Start your first indexing flow! Follow [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart) to define your first indexing flow. + A common indexing flow looks like: ```python From 98177f67edb24a66549e64689e24af94d82b6c17 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 00:14:49 -0700 Subject: [PATCH 08/16] Update README.md --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9218b2cb..f5f0e3bb 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ collector.export(...) As a data framework, CocoIndex takes it to the next level on data freshness. Incremental processing is one of the core values provided by CocoIndex.

- Incremental Processing + Incremental Processing

The frameworks takes care of @@ -66,6 +66,7 @@ If you're new to CocoIndex, we recommend checking out - ๐ŸŽฌ [Quick Start Video Tutorial](https://youtu.be/gv5R8nOXsWU?si=9ioeKYkMEnYevTXT) ### Setup + 1. Install CocoIndex Python library ```bash @@ -75,7 +76,8 @@ pip install -U cocoindex 2. [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one. CocoIndex uses it for incremental processing. -### Start your first indexing flow! +### Define data flow + Follow [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart) to define your first indexing flow. A common indexing flow looks like: @@ -119,10 +121,11 @@ def text_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoind ``` It defines an index flow like this: -![Flow diagram](docs/docs/core/flow_example.svg) -### Play with existing example and demo -Go to the [examples directory](examples) to try out with any of the examples, following instructions under specific example directory. +Data Flow + + +## Examples and demo | Example | Description | |---------|-------------| From 53b234e51f1df0fc838d49f9b64864f7e89312a5 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 00:16:14 -0700 Subject: [PATCH 09/16] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index f5f0e3bb..4c6094ae 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,7 @@ pip install -U cocoindex ### Define data flow -Follow [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart) to define your first indexing flow. - -A common indexing flow looks like: +Follow [Quick Start Guide](https://cocoindex.io/docs/getting_started/quickstart) to define your first indexing flow. An example flow looks like: ```python @cocoindex.flow_def(name="TextEmbedding") From 67a8f6266e75d12bcf5f7e561bda4cf754487096 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 00:21:41 -0700 Subject: [PATCH 10/16] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c6094ae..c54b08a6 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ It defines an index flow like this: Data Flow -## Examples and demo +## ๐Ÿš€ Examples and demo | Example | Description | |---------|-------------| @@ -135,8 +135,9 @@ It defines an index flow like this: | [Docs to Knowledge Graph](examples/docs_to_knowledge_graph) | Extract relationships from Markdown documents and build a knowledge graph | | [Embeddings to Qdrant](examples/text_embedding_qdrant) | Index documents in a Qdrant collection for semantic search | | [FastAPI Server with Docker](examples/fastapi_server_docker) | Run the semantic search server in a Dockerized FastAPI setup | +| [Product_Taxonomy_Knowledge_Graph](examples/product_taxonomy_knowledge_graph) | Build knowledge graph for product recommendations | -More coming and stay tuned! If there's any specific examples you would like to see, please let us know in our [Discord community](https://discord.com/invite/zpA9S2DR7s) ๐ŸŒฑ. +More coming and stay tuned ๐Ÿ‘€! ## ๐Ÿ“– Documentation For detailed documentation, visit [CocoIndex Documentation](https://cocoindex.io/docs), including a [Quickstart guide](https://cocoindex.io/docs/getting_started/quickstart). @@ -157,5 +158,8 @@ Join our community here: - โ–ถ๏ธ [Subscribe to our YouTube channel](https://www.youtube.com/@cocoindex-io) - ๐Ÿ“œ [Read our blog posts](https://cocoindex.io/blogs/) +## Support us: +We are constantly improving, and more features and examples are coming soon. If you love this project, please give us a star โญ at GitHub repo [![GitHub](https://img.shields.io/github/stars/cocoindex-io/cocoindex?color=5B5BD6)](https://github.com/cocoindex-io/cocoindex) to stay tuned and help us grow. + ## License CocoIndex is Apache 2.0 licensed. From 716bd0ba98519537670884cab3817968e2e0deff Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 10:34:16 -0700 Subject: [PATCH 11/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c54b08a6..39956556 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ collector.export(...) As a data framework, CocoIndex takes it to the next level on data freshness. Incremental processing is one of the core values provided by CocoIndex.

- Incremental Processing + Incremental Processing

The frameworks takes care of From 0a7f15cd3b40e50046608a650f39fac903de23d7 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 10:36:22 -0700 Subject: [PATCH 12/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39956556..7b23e185 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ collector.export(...) ``` ## Data Freshness -As a data framework, CocoIndex takes it to the next level on data freshness. Incremental processing is one of the core values provided by CocoIndex. +As a data framework, CocoIndex takes it to the next level on data freshness. **Incremental processing** is one of the core values provided by CocoIndex.

Incremental Processing From 2c6f97868b1403d6ec1f1853024a1d3849fcdaec Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 13:43:07 -0700 Subject: [PATCH 13/16] Update README.md --- README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7b23e185..96337626 100644 --- a/README.md +++ b/README.md @@ -17,32 +17,32 @@ [![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s) -CocoIndex is ultra performant data transformation framework, core engine written in Rust. The problem it tries to solve is to make it easy to prepare fresh data for AI - either embedding, knowledge graph, or a series of data transformation - and take the real-time data pipeline beyond traditional SQL. +CocoIndex is ultra performant data transformation framework, core engine written in Rust. The problem it tries to solve is to make it easy to prepare fresh data for AI - either creating embedding, building knowledge graph, or performing other data transformations - and take the real-time data pipeline beyond traditional SQL.

CocoIndex Features

-The philosophy is to have the framework handle the source updates, and having developers only focus on defining a series of data transformation, inspired by spreadsheet. +The philosophy is to have the framework handle the source updates, and having developers only focus on defining a series of data transformation, inspired by spreadsheets. ## Data Flow programming -CocoIndex follows [Data flow](https://en.wikipedia.org/wiki/Dataflow_programming) programming model. Compare with traditional orchestration framework, where data is opaque. In CocoIndex data and data operation are first class citizen, and there's no side effects for each data operation. All data are observable in each transformation, with lineage out of the box. +Unlike a workflow orchestration framework where data is usually opaque, in CocoIndex, data and data operations are first class citizens. CocoIndex follows the idea of [Dataflow](https://en.wikipedia.org/wiki/Dataflow_programming) programming model. Each transformation creates a new field solely based on input fields, without hidden states and value mutation. All data before/after each each transformation is observable, with lineage out of the box. -Particularly, user don't define data operations like creation, update, deletion. But rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations like when to create, update, or delete. For example: +Particularly, users don't define data operations like creation, update, deletion. But rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations like when to create, update, or delete. For example: ```python -// ingest +# import data['content'] = flow_builder.add_source(...) -// transform +# transform data['out'] = data['content'] .transform(...) .transform(...) -// collect data +# collect data collector.collect(...) -// export to db, vector db, graph db ... +# export to db, vector db, graph db ... collector.export(...) ``` @@ -54,8 +54,9 @@ As a data framework, CocoIndex takes it to the next level on data freshness. **I

The frameworks takes care of -- Change data capture -- Figuring out what exactly needs to be updated, and only updating that without having to recompute everything throughout. +- Change data capture. +- Figure out what exactly needs to be updated, and only updating that without having to recompute everything. + This makes it fast to reflect any source updates to the target store. If you have concerns with surfacing stale data to AI agents and are spending lots of efforts working on infra piece to optimize the latency, the framework actually handles it for you. From 130c356c6a454361696eef69a2e3108fbf1b485a Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 13:44:55 -0700 Subject: [PATCH 14/16] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 96337626..7daa4d3d 100644 --- a/README.md +++ b/README.md @@ -17,18 +17,18 @@ [![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s) -CocoIndex is ultra performant data transformation framework, core engine written in Rust. The problem it tries to solve is to make it easy to prepare fresh data for AI - either creating embedding, building knowledge graph, or performing other data transformations - and take the real-time data pipeline beyond traditional SQL. +**CocoIndex** is an ultra performant data transformation framework, with its core engine written in Rust. The problem it tries to solve is to make it easy to prepare fresh data for AI - either creating embedding, building knowledge graphs, or performing other data transformations - and take real-time data pipelines beyond traditional SQL.

CocoIndex Features

-The philosophy is to have the framework handle the source updates, and having developers only focus on defining a series of data transformation, inspired by spreadsheets. +The philosophy is to have the framework handle the source updates, and having developers only worry about defining a series of data transformation, inspired by spreadsheet. ## Data Flow programming Unlike a workflow orchestration framework where data is usually opaque, in CocoIndex, data and data operations are first class citizens. CocoIndex follows the idea of [Dataflow](https://en.wikipedia.org/wiki/Dataflow_programming) programming model. Each transformation creates a new field solely based on input fields, without hidden states and value mutation. All data before/after each each transformation is observable, with lineage out of the box. -Particularly, users don't define data operations like creation, update, deletion. But rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations like when to create, update, or delete. For example: +**Particularly**, users don't define data operations like creation, update, or deletion. Rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations such as when to create, update, or delete. ```python # import From c7e488807382b3b72ff3509b9a2ae30d8dc1e78a Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 16:01:33 -0700 Subject: [PATCH 15/16] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7daa4d3d..0577d24a 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,10 @@ The philosophy is to have the framework handle the source updates, and having developers only worry about defining a series of data transformation, inspired by spreadsheet. -## Data Flow programming -Unlike a workflow orchestration framework where data is usually opaque, in CocoIndex, data and data operations are first class citizens. CocoIndex follows the idea of [Dataflow](https://en.wikipedia.org/wiki/Dataflow_programming) programming model. Each transformation creates a new field solely based on input fields, without hidden states and value mutation. All data before/after each each transformation is observable, with lineage out of the box. +## Dataflow programming +Unlike a workflow orchestration framework where data is usually opaque, in CocoIndex, data and data operations are first class citizens. CocoIndex follows the idea of [Dataflow](https://en.wikipedia.org/wiki/Dataflow_programming) programming model. Each transformation creates a new field solely based on input fields, without hidden states and value mutation. All data before/after each transformation is observable, with lineage out of the box. -**Particularly**, users don't define data operations like creation, update, or deletion. Rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations such as when to create, update, or delete. +**Particularly**, users don't explicitly mutate data by creating, updating and deleting. Rather, they define something like - for a set of source data, this is the transformation or formula. The framework takes care of the data operations such as when to create, update, or delete. ```python # import From 8a62d80875e84fcb8d61dd51d9005b06726c9264 Mon Sep 17 00:00:00 2001 From: CocoIndex Dev Date: Fri, 9 May 2025 20:30:40 -0700 Subject: [PATCH 16/16] update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 0577d24a..251128dd 100644 --- a/README.md +++ b/README.md @@ -152,15 +152,12 @@ Welcome with a huge coconut hug ๐Ÿฅฅโ‹†๏ฝกหš๐Ÿค—. We are super excited for commu Join our community here: - ๐ŸŒŸ [Star us on GitHub](https://github.com/cocoindex-io/cocoindex) -- ๐Ÿ’ฌ [Start a GitHub Discussion](https://github.com/cocoindex-io/cocoindex/discussions) - ๐Ÿ‘‹ [Join our Discord community](https://discord.com/invite/zpA9S2DR7s) -- ๐• [Follow us on X](https://x.com/cocoindex_io) -- ๐Ÿš [Follow us on LinkedIn](https://www.linkedin.com/company/cocoindex/about/) - โ–ถ๏ธ [Subscribe to our YouTube channel](https://www.youtube.com/@cocoindex-io) - ๐Ÿ“œ [Read our blog posts](https://cocoindex.io/blogs/) ## Support us: -We are constantly improving, and more features and examples are coming soon. If you love this project, please give us a star โญ at GitHub repo [![GitHub](https://img.shields.io/github/stars/cocoindex-io/cocoindex?color=5B5BD6)](https://github.com/cocoindex-io/cocoindex) to stay tuned and help us grow. +We are constantly improving, and more features and examples are coming soon. If you love this project, please drop us a star โญ at GitHub repo [![GitHub](https://img.shields.io/github/stars/cocoindex-io/cocoindex?color=5B5BD6)](https://github.com/cocoindex-io/cocoindex) to stay tuned and help us grow. ## License CocoIndex is Apache 2.0 licensed.