Skip to content
Back to skills

964 Setup 2a6ed823

BSecurity

- [Installation](#installation) - [Loading the Extension](#loading-the-extension) - [Binary Serialization Helper](#binary-serialization-helper) - [NumPy Integration](#numpy-integration) - [Connection Setup Pattern](#connection-setup-pattern) - [SQLite Version Requirements](#sqlite-version-requirements) - [MacOS Considerations](#macos-considerations)

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
databasespythonrustgorubybashsqlnodegit

Works with

  • cli

Security analysis

B88/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 964-setup_2a6ed823 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 964 Setup 2a6ed823?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 964 Setup 2a6ed823
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-964-setup-2a6ed823/badge)](https://www.skillsdirectory.com/skills/tools-only-964-setup-2a6ed823)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# sqlite-vec Setup

## Table of Contents
- [Installation](#installation)
- [Loading the Extension](#loading-the-extension)
- [Binary Serialization Helper](#binary-serialization-helper)
- [NumPy Integration](#numpy-integration)
- [Connection Setup Pattern](#connection-setup-pattern)
- [SQLite Version Requirements](#sqlite-version-requirements)
- [MacOS Considerations](#macos-considerations)

## Installation

### Python
```bash
pip install sqlite-vec
```

### Other Languages
- Node.js: `pnpm add sqlite-vec`
- Ruby: `gem install sqlite-vec`
- Go: `go get -u github.com/asg017/sqlite-vec/bindings/go`
- Rust: `cargo add sqlite-vec`

## Loading the Extension

### Python
```python
import sqlite3
import sqlite_vec

db = sqlite3.connect(":memory:")
db.enable_load_extension(True)
sqlite_vec.load(db)
db.enable_load_extension(False)

# Verify installation
vec_version, = db.execute("select vec_version()").fetchone()
print(f"vec_version={vec_version}")
```

### CLI
```sql
.load ./vec0
select vec_version();
```

## Binary Serialization Helper

### serialize_float32()
Converts a Python list of floats into the compact BLOB format sqlite-vec expects:

```python
from sqlite_vec import serialize_float32
import struct

embedding = [0.1, 0.2, 0.3, 0.4]

# Using the helper function
blob = serialize_float32(embedding)

# Equivalent to:
blob = struct.pack("%sf" % len(embedding), *embedding)

# Use in queries
db.execute(
    "INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)",
    [1, serialize_float32(embedding)]
)
```

### serialize_int8()
For int8 vectors:

```python
from sqlite_vec import serialize_int8

int_vector = [1, 2, 3, 4]
blob = serialize_int8(int_vector)
```

## NumPy Integration

### Using NumPy Arrays
NumPy arrays can be passed directly as they implement the Buffer protocol. Cast to float32:

```python
import numpy as np

embedding = np.array([0.1, 0.2, 0.3, 0.4])

# Must cast to float32
db.execute(
    "SELECT vec_length(?)",
    [embedding.astype(np.float32)]
)
```

### register_numpy()
For advanced NumPy integration with static blobs:

```python
from sqlite_vec import register_numpy
import numpy as np

# Create a NumPy array of vectors
vectors = np.array([
    [1.0, 2.0, 3.0],
    [4.0, 5.0, 6.0],
    [7.0, 8.0, 9.0]
], dtype=np.float32)

# Register as a static blob table
register_numpy(db, "my_vectors", vectors)

# Query the static blob table
results = db.execute(
    "SELECT rowid, vector FROM my_vectors"
).fetchall()
```

## Connection Setup Pattern

Complete setup pattern for Python:

```python
import sqlite3
import sqlite_vec
from sqlite_vec import serialize_float32
import struct

# Create connection
db = sqlite3.connect(":memory:")  # or use a file path
db.enable_load_extension(True)
sqlite_vec.load(db)
db.enable_load_extension(False)

# Verify version
sqlite_version, vec_version = db.execute(
    "select sqlite_version(), vec_version()"
).fetchone()
print(f"sqlite_version={sqlite_version}, vec_version={vec_version}")

# Create vec0 table
db.execute("""
    CREATE VIRTUAL TABLE vec_items USING vec0(
        embedding float[4]
    )
""")

# Insert vectors
items = [
    (1, [0.1, 0.1, 0.1, 0.1]),
    (2, [0.2, 0.2, 0.2, 0.2]),
    (3, [0.3, 0.3, 0.3, 0.3])
]

with db:
    for rowid, vector in items:
        db.execute(
            "INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)",
            [rowid, serialize_float32(vector)]
        )

# Query
query = [0.25, 0.25, 0.25, 0.25]
results = db.execute(
    """
    SELECT rowid, distance
    FROM vec_items
    WHERE embedding MATCH ?
      AND k = 2
    ORDER BY distance
    """,
    [serialize_float32(query)]
).fetchall()
```

## SQLite Version Requirements

sqlite-vec requires SQLite 3.41+ for full functionality. Check version:

```bash
python -c 'import sqlite3; print(sqlite3.sqlite_version)'
```

### Upgrade Options
1. Use `pysqlite3` package (bundles updated SQLite)
2. Compile custom SQLite with LD_PRELOAD/DYLD_LIBRARY_PATH
3. Upgrade Python version (3.12+ usually has recent SQLite)

## MacOS Considerations

Default MacOS Python doesn't support SQLite extensions. Solutions:

1. Use Homebrew Python: `brew install python`
2. Use `/opt/homebrew/bin/python3` instead of system Python
3. Install `pysqlite3` package

Error indicating this issue:
```
AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension'
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.