Skip to content

[Feature]: Stable C ABI for embedded seekdb (multi‑language SDKs) #104

@WSL0809

Description

@WSL0809

Use Case
I would like to use seekdb in “embedded mode” (similar to how pyseekdb works) from other languages such as Rust, Go, or Java, without depending on Python.
Typical scenarios include:

  • Building AI / RAG applications that ship a single binary and embed seekdb directly into the process (SQLite‑style), instead of running a separate seekdb server process.
  • Implementing first‑class SDKs in Rust/Go that can open a local seekdb database directory, execute SQL, and fetch results in‑process, using the same behavior as the current Python embedded module.
  • Using embedded seekdb in environments where starting and managing an extra database process (or bundling Python) is undesirable or not possible.

Describe the solution you'd like
Expose a small, stable C ABI for seekdb’s embedded mode, so that other languages can build FFI bindings on top of it.

Describe alternatives you've considered

  • Running seekdb in server mode and connecting via the MySQL protocol from Rust/Go/Java clients (e.g. using mysql_async, sqlx, JDBC). This works today and is stable, but:
    • Requires managing a separate seekdb process.
    • Loses the “true embedded” feel (no single‑binary deployment, needs extra config/ports).
  • Embedding CPython inside Rust/Go and calling the existing pyseekdb module. This reuses the current embedded implementation, but:
    • Adds a Python runtime dependency and increases deployment complexity.
    • Makes startup, packaging, and debugging heavier for non‑Python ecosystems.
  • Directly FFI‑binding to C++ classes/functions (e.g. ObLiteEmbed::open/connect) via mangled symbols. This is fragile because C++ ABI and exception boundaries are not stable or guaranteed across compilers and versions, and is not suitable as a public SDK strategy.

Metadata

Metadata

Assignees

No one assigned
    No fields configured for Feature.

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions