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

    Projects

    Status

    Ready

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions