How they differ
Compare features
Usage differences between Enterprise and Embedded
The quickstart guide shows both LanceDB Embedded connections and Enterprisedb://...
connections. Once connected to LanceDB, the table API is largely the same: create a table, search,
filter, evolve the schema, and store multimodal records. However, there are some semantic differences
worth understanding when your code is talking to LanceDB Enterprise.
1. Connection model
In LanceDB Enterprise, your app connects via adb://... URI and sends requests to the cluster API.
The cluster executes table operations on your behalf. Your code is coupled to a managed service endpoint,
whereas LanceDB Embedded is directly coupled to local or object-storage paths.
2. Returned table type
Connecting to an Enterprise table viaopen_table(...) returns a RemoteTable, unlike LanceDB Embedded,
which returns a LanceTable. RemoteTable is a catalog-backed table accessed through a server/cluster,
and does not support all the same methods as LanceTable (see below).
3. Materialization APIs
For Python users working with LanceDB Enterprise,RemoteTable does not support table-level
materialization methods like table.to_arrow() or table.to_pandas(). This protects users from
accidentally materializing tables that are too large to fit in memory.
Instead, materialize results through query/search builders, for example
table.search(...).limit(...).to_pandas() for a vector or full-text search, or
table.search().where(...).limit(...).to_arrow() for a filtered scan. For quick previews, use
table.head().
4. Maintenance lifecycle
In LanceDB Embedded, you run maintenance yourself:optimize() compacts data files, adds new rows to
existing indexes, and removes old table versions. In Enterprise, the cluster runs this work — along with
async write and reindexing workflows — as background jobs, and the SDK’s maintenance calls do not trigger
it. On an Enterprise table, the synchronous Python optimize(), compact_files(), and
cleanup_old_versions() only emit a warning, and the asynchronous Python, TypeScript, and Rust clients
reject optimize() as not supported.
That means maintenance is managed by platform behavior and cluster configuration, not by explicit
per-table maintenance calls in your application code.
5. Guardrails and limits
Enterprise can enforce platform-level guardrails, such as index/table limits and safety checks around operations likemerge_insert when too many rows are unindexed. LanceDB Embedded mostly exposes
storage/format-level behavior, and you tune many lifecycle tasks yourself.
This means an operation in LanceDB Enterprise can fail due to service-level policy, not just because
of local table shape or schema mismatch.
As a rule of thumb, all you need to remember is this: treat
db://... as a network service boundary,
use query builders to fetch results, and otherwise interact with your tables as you would in LanceDB
Embedded.Which one should I use?
It’s very simple to get started with LanceDB Embedded: Get started withpip install lancedb and begin ingesting
your data and vectors into LanceDB. LanceDB Embedded (open source) makes sense when your dataset fits on one machine, traffic is still
modest, and your team is comfortable handling maintenance tasks such as compaction or reindexing itself.
Move to LanceDB Enterprise when retrieval becomes shared infrastructure for your business: your data or traffic has
outgrown a single machine, you need private deployment options, or you want platform support for monitoring, security,
and large-scale feature workflows.
If these sound like your use cases, reach out to us and we can help you scope your workload and arrange an Enterprise proof of concept.