Skip to content

[Upstream-Sync] [FEATURE] Add Ladybug target (Kuzu successor) — upstream PR #1487 #52

@bashandbone

Description

@bashandbone

Summary

Adapt the upstream new target from cocoindex-io/cocoindex#1487: add Ladybug as a new target-ladybug feature-gated graph database target in Recoco, replacing the archived Kuzu project.

Background

  • Kuzu (MIT-licensed property graph DB) was archived in October 2025.
  • Ladybug is its actively maintained fork with an identical Cypher API server interface.
  • Upstream PR #1487 adds Ladybug as a first-class target, with a note to eventually retire the Kuzu target.
  • Recoco already has a full target-kuzu implementation in crates/recoco-core/src/ops/targets/kuzu.rs using the same API server-based thin-client approach.

What changes upstream?

  • New file: rust/cocoindex/src/ops/targets/ladybug.rs — a near-identical copy of kuzu.rs with all Kuzu* symbols renamed to Ladybug*
  • rust/cocoindex/src/ops/targets/mod.rs — adds pub mod ladybug
  • rust/cocoindex/src/ops/registration.rs — registers the Ladybug factory, cloning the reqwest_client

Action for Recoco

  1. Create crates/recoco-core/src/ops/targets/ladybug.rs by adapting the upstream file. This is largely a mechanical rename of kuzuladybug, with one API callsite to verify (see note below).
  2. Update crates/recoco-core/src/ops/targets/mod.rs to add:
    #[cfg(feature = "target-ladybug")]
    pub mod ladybug;
    Also update the #[cfg(any(...))] guard on pub mod shared to include target-ladybug.
  3. Update crates/recoco-core/Cargo.toml:
    • Add target-ladybug feature: target-ladybug = ["dep:reqwest", "recoco-utils/reqwest", "target-neo4j"] (same deps as target-kuzu)
    • Add target-ladybug to the all-targets and full bundles
  4. Register the Ladybug factory in registration (wherever kuzu::register is called).
  5. Decide on a deprecation or migration path for target-kuzu — upstream recommends retiring Kuzu in favour of Ladybug.

⚠️ API compatibility note

Recoco's kuzu.rs calls http::request(|| ...) (zero-arg closure), while the upstream ladybug.rs calls http::request(&self.reqwest_client, |client| ...) (two-arg form). Verify which signature recoco-utils/http currently exposes before copying the upstream code verbatim.

Recoco mapping

Upstream Recoco
rust/cocoindex/src/ops/targets/ladybug.rs crates/recoco-core/src/ops/targets/ladybug.rs
rust/cocoindex/src/ops/targets/mod.rs crates/recoco-core/src/ops/targets/mod.rs
rust/cocoindex/src/ops/registration.rs Registration module in recoco-core
Feature target-kuzu (upstream, to be deprecated) target-kuzu in Recoco (consider deprecation path)

References

Metadata

Metadata

Labels

cargoCargo and dependency related issuesenhancementNew feature or requestupstream-syncIssues for syncing updates with our upstream (cocoindex-io/cocoindex)

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions