DEV Community

Alex Spinov
Alex Spinov

Posted on

LanceDB Has a Free API: A Serverless Vector Database That Runs Embedded

LanceDB is a serverless vector database that runs embedded in your application — no server process, no Docker, no infrastructure. Just import and use.

Why LanceDB Matters

Vector databases like Pinecone and Weaviate require servers. LanceDB runs inside your app process — like SQLite for vectors. Zero latency, zero ops, zero cost.

What you get for free:

  • Embedded: runs in your process (like SQLite)
  • Zero infrastructure needed
  • Automatic indexing (IVF-PQ, disk-based ANN)
  • Multi-modal: vectors, text, images, video in one table
  • Python and JavaScript SDKs
  • Lance columnar format (faster than Parquet)
  • Versioned data (time travel)
  • Full-text search alongside vector search

Quick Start

pip install lancedb
Enter fullscreen mode Exit fullscreen mode
import lancedb

# Open database (creates directory)
db = lancedb.connect("./my-vectors")

# Create table with data
data = [
    {"text": "AI is transforming industries", "vector": [0.1, 0.2, 0.3], "category": "tech"},
    {"text": "Machine learning basics", "vector": [0.4, 0.5, 0.6], "category": "tech"},
    {"text": "Cooking with herbs", "vector": [0.7, 0.8, 0.9], "category": "food"},
]
table = db.create_table("articles", data)

# Vector search
results = table.search([0.15, 0.25, 0.35]).limit(5).to_pandas()
print(results)

# Search with filter
results = (
    table.search([0.15, 0.25, 0.35])
    .where("category = 'tech'")
    .limit(5)
    .to_pandas()
)
Enter fullscreen mode Exit fullscreen mode

With Embeddings (Auto-embed)

import lancedb
from lancedb.embeddings import get_registry

# Use sentence-transformers for automatic embedding
model = get_registry().get("sentence-transformers").create(name="all-MiniLM-L6-v2")

class Article(lancedb.pydantic.LanceModel):
    text: str = model.SourceField()
    vector: lancedb.pydantic.Vector(model.ndims()) = model.VectorField()
    category: str

db = lancedb.connect("./my-vectors")
table = db.create_table("articles", schema=Article)

# Add data — embedding happens automatically
table.add([
    Article(text="AI is transforming industries", category="tech"),
    Article(text="Machine learning basics", category="tech"),
    Article(text="Best pasta recipes", category="food"),
])

# Search by text — auto-embedded
results = table.search("artificial intelligence").limit(5).to_pandas()
Enter fullscreen mode Exit fullscreen mode

Full-Text Search + Vector Search

# Create full-text search index
table.create_fts_index("text")

# Hybrid search: combine vector similarity + keyword matching
results = (
    table.search("machine learning", query_type="hybrid")
    .limit(10)
    .to_pandas()
)
Enter fullscreen mode Exit fullscreen mode

JavaScript Client

import * as lancedb from "@lancedb/lancedb";

const db = await lancedb.connect("./my-vectors");

const table = await db.createTable("articles", [
  { text: "AI is transforming", vector: [0.1, 0.2, 0.3] },
  { text: "ML basics", vector: [0.4, 0.5, 0.6] },
]);

const results = await table.search([0.15, 0.25, 0.35]).limit(5).toArray();
Enter fullscreen mode Exit fullscreen mode

Links


Building embedded AI search? Check out my developer tools on Apify or email spinov001@gmail.com for custom solutions.

Top comments (0)