SDK and Multi-Language Architecture#
Overview#
LanceDB is a multimodal vector database built on the Lance columnar format. Its architecture centers on a Rust core library that is exposed to application developers through language-specific SDK wrappers.
Supported interfaces :
| Interface | Package / Endpoint |
|---|---|
| Python SDK | pip install lancedb |
| TypeScript/Node.js SDK | npm install @lancedb/lancedb |
| Rust SDK | lancedb crate on crates.io |
| Java SDK | Maven — cloud/enterprise REST client |
| REST API | https://docs.lancedb.com/api-reference/rest |
Architecture: Rust Core + Language Bindings#
The core library lives at rust/lancedb/. The Python and TypeScript SDKs are native-binding wrappers compiled against it — they are not pure-language reimplementations.
- Python SDK uses pyo3 to generate Rust↔Python bindings. Rust binding source lives at
python/src/; the Python package source atpython/lancedb/. - TypeScript/Node.js SDK uses napi-rs for Rust↔Node.js bindings. Rust binding source lives at
nodejs/src/; the TypeScript package source atnodejs/lancedb/. - Cargo workspace at the repository root ties
rust/lancedb,nodejs, andpythontogether as a single Rust workspace.
Both the Python and TypeScript SDKs require Cargo and protoc to build from source because they compile Rust as part of their build step.
Java SDK: REST Client, Not a Native Binding#
The Java SDK is architecturally distinct from the Python and TypeScript SDKs. It is a pure REST client — it does not embed or compile the Rust library. Instead it communicates with a remote LanceDB Cloud or Enterprise deployment over HTTP.
The entry point is LanceDbNamespaceClientBuilder, which assembles HTTP headers (x-lancedb-database, x-api-key) and connects to the cloud endpoint https://<db>.<region>.api.lancedb.com.
Current limitations:
- Only supports LanceDB Cloud and Enterprise (remote) modes. Local/embedded database mode is not yet available.
- An open issue tracks adding local database support to the Java SDK, with intent to establish a reusable pattern for future language bindings.
The Java project is a standalone Maven project (java/) and is not part of the Cargo workspace.
Platform Support and Unsupported Environments#
Node.js SDK prebuilt binaries#
Because the TypeScript SDK embeds compiled Rust, platform support is constrained by available prebuilt native libraries. Supported platforms for @lancedb/lancedb :
- Linux — x86_64 and aarch64 (glibc and musl)
- macOS — Intel (x86_64) and Apple Silicon (M1/M2/ARM)
- Windows — x86_64 and aarch64
Users on unlisted platforms must build from source.
Mobile and cross-platform frameworks#
Mobile (iOS, Android), Flutter, and React Native are not supported. The Rust core and its FFI wrappers are designed for server-side and desktop environments. There is no mobile build target, and no official integration for cross-platform frameworks like Flutter or React Native.
For environments where native bindings are unavailable, the REST API is the only viable integration path: it has no runtime compilation requirement and works wherever HTTP is available.
Repository Layout Quick Reference#
| Path | Contents |
|---|---|
rust/lancedb/ | Rust core library — the source of truth for all behavior |
python/ | Python SDK (pyo3 bindings + Python package) |
nodejs/ | TypeScript/Node.js SDK (napi-rs bindings + TS package) |
java/ | Java REST client for Cloud/Enterprise |
node/ | Deprecated legacy TypeScript package |
docs/ | Documentation source |
Contributing guides per SDK: Python · TypeScript · General