DEV Community

mote
mote

Posted on

Run a Vector Database on a Raspberry Pi in 5 Minutes (No Server Required)

Run a Vector Database on a Raspberry Pi in 5 Minutes (No Server Required)

Want to run vector search on a $35 computer with no internet connection? Here is exactly how I did it.

Most vector database tutorials assume you have a cloud account, a decent internet connection, and at least 4GB of RAM. But what if you are building a smart camera, a home assistant, or a small robot? You need something that runs locally, uses minimal resources, and does not require a server.

I tested this on a Raspberry Pi 4 (4GB model) running Raspberry Pi OS. Total setup time: under 5 minutes.

Step 1: Install Rust

If you do not have Rust yet:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
Enter fullscreen mode Exit fullscreen mode

Rust compiles to native ARM binaries, so there is no runtime overhead. Your vector operations will run at near-metal speed.

Step 2: Create a new project

cargo new edge-vector-demo
cd edge-vector-demo
Enter fullscreen mode Exit fullscreen mode

Step 3: Add moteDB

cargo add motedb
Enter fullscreen mode Exit fullscreen mode

That is it. No Docker, no server process, no configuration files. One dependency.

Step 4: Write the code

Replace src/main.rs with:

use motedb::MoteDB;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // Open (or create) the database
    let db = MoteDB::open("./my_vector_db")?;

    // Insert some vectors (e.g., 128-dimensional embeddings)
    let items = vec![
        ("cat_photo_1", vec![0.1, 0.2, 0.3, 0.4, 0.5]),
        ("dog_photo_1", vec![0.9, 0.8, 0.7, 0.6, 0.5]),
        ("cat_photo_2", vec![0.15, 0.25, 0.35, 0.45, 0.55]),
    ];

    for (id, vec) in items {
        db.insert_vector(id, &vec, None)?;
    }

    // Search for similar vectors
    let query = vec![0.12, 0.22, 0.32, 0.42, 0.52];
    let results = db.search("default", &query, 5)?;

    println!("Top results:");
    for r in results {
        println!("  {} (score: {:.4})", r.id, r.score);
    }

    Ok(())
}
Enter fullscreen mode Exit fullscreen mode

Step 5: Run it

cargo run --release
Enter fullscreen mode Exit fullscreen mode

Expected output:

Top results:
  cat_photo_1 (score: 0.9847)
  cat_photo_2 (score: 0.9631)
  dog_photo_1 (score: 0.5234)
Enter fullscreen mode Exit fullscreen mode

Why this matters

Running vector search locally on a Raspberry Pi opens up a lot of possibilities:

  • Smart cameras that recognize objects without sending video to the cloud
  • Home assistants that understand voice commands offline
  • Robots that can navigate and recognize objects on the factory floor
  • Edge AI agents that maintain their own knowledge base

The numbers

On a Raspberry Pi 4 (4GB):

Metric Value
Database size ~2MB for 10K vectors (128-dim)
Memory usage ~15MB during search
Insert latency <1ms per vector
Search latency (10K vectors) ~5ms
Binary size ~3MB

Not bad for a $35 computer with no server.

What about other options?

You could also use:

  • FAISS (Python/C++) - powerful but requires Python runtime on ARM
  • SQLite-vec - great for adding vectors to existing SQLite, but no multimodal support
  • ChromaDB - needs a server process, heavier on resources

For pure embedded use on resource-constrained devices, a zero-dependency Rust library is hard to beat.


Try it yourself

The code is at github.com/motedb/motedb. It is open source and still early-stage - feedback and contributions are welcome.

Have you run vector search on edge devices? What are you using? I would love to compare notes.

Top comments (0)