mrkeyoor.com_
Sat 26 Sept 21:09 UTC
Dataevaluationupdated 26 Aug 2026

lancedb review

LanceDB is an embedded retrieval database for vectors, text, metadata, and multimodal files, built on the Lance columnar format. Python, TypeScript, and Rust applications can keep local tables in process, while the same project also connects to a managed remote service for teams that do not want to operate storage themselves.

+51stars / 7d
Verdict

Our LanceDB build ran for 806 seconds and failed because -lpython3.11 was missing, then the test command hit the same linker error after 758 seconds, so this source checkout did not clear either gate. Try a published SDK when you want an embedded multimodal retrieval layer and value Arrow ecosystem integration. Choose a server-first database if network isolation and cluster operations are clearer requirements than in-process storage.

We ran it

Lab card: what happened when we ran lancedbScreenshot of lancedb (lancedb.com/docs)
Install✓ · 77s869 packages
Build✗ · 806s
Tests✗ · 758sran, no count parsed
Repo709 files~180,750 lines of source · 20.2 MB · 19 CI workflows

Answers from our run

Does lancedb build from source?

Dependencies installed in 77 seconds (869 packages), and the build failed. We cloned commit 94d484f into a clean Debian container with 3 CPUs and no project-specific setup.

Do lancedb's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use lancedb?

Contributors expecting the root Rust workspace to build in a plain toolchain image: our build and test commands both stopped because the linker could not find -lpython3.11.

What are the alternatives to lancedb?

Qdrant, Chroma, Milvus. Our LanceDB build ran for 806 seconds and failed because `-lpython3.

Setup2/5SDKs are simple, but our 806-second source build failed linking
Docs4/5Quickstart and SDK references exist, though the README is sales-heavy
Community5/511,284 stars with active August 2026 releases and issue work
Maturity3/5Broad SDK scope, but v0.37.1 breaks Rust API and source checks failed

Discussed on

  1. hnShow HN: Lance – Alternative to Parquet for ML data85 points
  2. hnBuilding an E2E Encrypted Chat Application with LanceDB and Libsodium27 points
  3. hnGPU-Accelerated Indexing in LanceDB19 points
  4. hnShow HN: LanceDB is an embedded vector database with a native JavaScript API10 points
  5. hnLanceDB – Developer-friendly, serverless vector database for AI applications9 points

Who it’s for

AI application developers who want vector, full-text, and SQL-style retrieval in one data layer.
Python or TypeScript teams that prefer an embedded local database during development.
Data engineers already using Arrow, Pandas, Polars, DuckDB, LangChain, or LlamaIndex.
Teams willing to pin SDK versions and test local and remote behavior separately.
Claude Code users who want the repository's development plugin for writing and reviewing LanceDB pipelines.

Who it’s NOT for

Contributors expecting the root Rust workspace to build in a plain toolchain image: our build and test commands both stopped because the linker could not find -lpython3.11.
Teams that treat local embedded storage and the managed remote service as identical: release notes and open issues distinguish embedded, remote, Python, Node, and Rust behavior.
TypeScript users who need frictionless JSON columns today: issue 4062 reports inserts failing unless Arrow field metadata is attached, while issue 4063 asks for a helper.
Buyers who cannot absorb API changes: v0.37.1 includes a breaking Rust builder change.
Operators wanting a ready-made distributed service with explicit cluster administration in the README: LanceDB's open-source pitch is embedded and local, while managed scale belongs to its cloud product.

Setup reality

Our sandbox installed 869 Rust packages in 77 seconds. The build failed with exit 101 after 806 seconds, and tests failed with exit 101 after 758 seconds. Both log tails end at the linker error unable to find library -lpython3.11; no test result summary was produced.

Most users should install a published Python, TypeScript, or Rust SDK rather than compile every workspace member. A source build spans Rust plus Python and Node bindings, so matching native Python development libraries and the repository toolchain matters. Remote use also needs a cloud endpoint and credentials.

The checkout had 709 files, about 180,750 source lines, 19 CI workflow files, a Compose file, no root Dockerfile, and no tests directory in our scan. It occupied 20.2 MB before dependencies. Local table files, object storage configuration, embedding functions, index choices, and SDK-specific Arrow types become part of application design.

Embedded retrieval is LanceDB's clearest advantage

LanceDB puts vector search, full-text search, filtering, and SQL-style queries beside the application instead of requiring a separate database server for local use. Tables use the Lance columnar format and can contain vectors, metadata, text, images, video references, and other Arrow-compatible data. Python, TypeScript, and Rust SDKs make that model accessible without forcing every team to write Rust. A REST API and managed remote product cover a different deployment path.

The repository itself is much larger than an embedded quickstart implies. Our checkout at commit 94d484f contained 709 files, about 180,750 source lines, and 20.2 MB before dependencies. Rust crates share the tree with Python, Node, and Java work, documentation, CI, and release tooling. That breadth is useful for cross-language support, but it also means a root workspace build can cross language boundaries that an ordinary SDK user never sees.

Published SDKs avoid the full workspace build

The README sends new users to a quickstart and separate Python, TypeScript, Rust, and REST references. That is the sensible route for application evaluation. A Python developer can install a wheel, while a Node developer can use the published package; neither should need to compile every binding to decide whether table creation, ingestion, and search fit the product. Rust contributors and packagers face a different setup because workspace members include native bindings.

Our install fetched 869 Rust packages in 77 seconds. The later build ran for 806 seconds before the linker reported that it could not find -lpython3.11 while compiling the Python binding. The log does not say whether the correct remedy is a system package, another Python version, or a workspace selection, so we will not prescribe one from that evidence alone. It does show that the measured source checkout needs more than the supplied toolchain image.

What happened when we ran it

Our unprivileged lab-rust:1 sandbox completed dependency installation in 77 seconds. The build failed with exit code 101 after 806 seconds. Its final lines say rust-lld: error: unable to find library -lpython3.11, followed by could not compile lancedb-python. The container had 3 CPUs, 12 GB of RAM, no secrets, and commit 94d484f.

The test command also failed with exit code 101 after 758 seconds. Its log ends with the same missing -lpython3.11 linker library, this time while compiling the lancedb library test. No passing, failing, or skipped test count was produced in the supplied result. The useful conclusion is narrow: installation resolved, but both compilation gates stopped before the workspace could be evaluated.

Local and remote paths need separate acceptance tests

LanceDB presents open-source local tables and its managed cloud as one ecosystem, but they do not have identical transport or implementation paths. Release v0.37.1 includes fixes explicitly labeled Python, Node, Rust, and remote, alongside shared table and query changes. One release item says storage options could be ignored when opening a remote table; another covers HTTP2 stream errors. Treat SDK language and connection mode as two axes in the test matrix.

Our 758-second test attempt never reached a result summary, so it provides no evidence about embedded or remote queries. Build an application-level set around the chosen path: schema creation, append and merge behavior, vector dimensions, filters, full-text indexing, version reads, deletion, compaction, and error propagation. If development uses local tables but production uses cloud, run the same fixtures against both rather than assuming API similarity guarantees matching behavior.

JSON support still exposes Arrow details

Issue 4062 reports that a TypeScript insert into a JSON column fails unless the Arrow field carries the required extension metadata. Issue 4063 proposes a helper so users do not have to construct that field manually. Related issues request automatic conversion between native objects and JSON strings, plus indexing inside JSON paths and full-text search over JSON fields. The activity shows active work, while current users still need to understand the physical Arrow representation.

The repository installed 869 packages before our linker failure, reflecting a broad data stack rather than a tiny key-value library. Keep schemas explicit and versioned, especially across Python and TypeScript clients. Test nullable fields, nested data, JSON serialization, and Arrow metadata on the exact SDK release. A convenient vector API does not remove the need to understand how non-vector columns are encoded and returned.

v0.37.1 still carries breaking API changes

Release v0.37.1 was published on August 10, 2026. Its notes mark the Rust add_columns change as breaking because it now uses a builder. The release also adds full-text configuration, batched blob reads, streaming transform controls, index jobs, and LSM operations, with many fixes across language bindings. A pre-1.0 version can reasonably evolve, but downstream applications should pin packages and read language-specific notes before upgrading.

GitHub records a push on August 26, 2026, 11,284 stars, and 470 open issues excluding pull requests. The repository page's 607 combined issues and pull requests should not be called a bug count. Nineteen CI workflow files show considerable automation, yet our 806-second build failure proves that CI coverage does not make every fresh source environment self-sufficient. Published artifacts and contributor builds deserve different setup scores.

Choose embedded convenience or a server boundary

LanceDB is most persuasive when an application wants local retrieval without operating a database daemon, especially when Arrow, Pandas, Polars, or DuckDB already appear in the data flow. Qdrant and Milvus make the network-service boundary more explicit. Chroma offers another local-first retrieval model. None is a universal replacement because persistence, concurrency, filtering, scaling, and operational ownership differ.

Our failed build does not show that the published SDKs are unusable; it shows that the complete source workspace did not compile in the measured environment. Start with the exact SDK and storage path intended for production. If it works, then decide whether embedded state inside application processes simplifies ownership or merely hides a database concern that should live behind a service. For contributors, resolve and document the Python 3.11 linker requirement before trusting root-workspace checks.

Alternatives

ProjectWhat it isPick it when
Qdrant gh↗A vector search server with filtering, persistence, APIs, and managed-cloud options.pick this instead when a dedicated network service and server operations fit better than an embedded database.
Chroma gh↗An AI retrieval database with a simple local developer path and client-server modes.pick this instead when a smaller retrieval API and its ecosystem match the application better than Lance and Arrow integration.
Milvus gh↗A distributed vector database aimed at large server and cloud deployments.pick this instead when the main requirement is an operated distributed cluster rather than embedded local tables.

What people are saying

  1. [github-trending] lancedb/lancedb

Sources

  1. LanceDB README
  2. LanceDB v0.37.1 release
  3. Issue 4062: TypeScript JSON column inserts
  4. Issue 4063: JSON field helper
  5. LanceDB Claude Code marketplace

More data reviews

toasty · gfwlist · simdjson · go-stock · sqlitebrowser · hydradb · the whole board →