Fast, embedded, and multi-modal DB based on SQLite for AI-powered applications.
Project description
beaver is a simple, local, and embedded database designed to manage complex, modern data types without requiring a database server, built on top of SQLite.
Design Philosophy
beaver is built with a minimalistic philosophy for small, local use cases where a full-blown database server would be overkill.
- Minimal Dependencies: The core library has minimal dependencies (
numpy,pydantic,rich,typer). Advanced features (like the REST server) are optional extras. - Safe Concurrency: Thread-safe and multi-process-safe by default, with robust inter-process locking.
- Local-First: A single, portable SQLite file is the default.
- Fast & Performant: Zero network latency for local operations and an optional, in-memory read cache.
- Standard SQLite: The database file is 100% compatible with any standard SQLite tool, ensuring data portability.
- Pythonic API: Designed to feel like a natural extension of your code, using standard Python data structures and Pydantic models.
Installation
Install the core library:
pip install beaver-db
To include optional features, you can install them as extras:
# For the REST API server and client
pip install "beaver-db[remote]"
# To install all optional features at once
pip install "beaver-db[full]"
Docker
You can also run the BeaverDB REST API server using Docker.
docker pull ghcr.io/syalia-srl/beaver:latest
docker run -p 8000:8000 -v $(pwd)/data:/app ghcr.io/syalia-srl/beaver
Quickstart
Get up and running in 30 seconds. This example showcases a dictionary, a list, and full-text search in a single script.
from beaver import BeaverDB, Document
# 1. Initialize the database
db = BeaverDB("data.db")
# 2. Use a namespaced dictionary for app configuration
config = db.dict("app_config")
config["theme"] = "dark"
print(f"Theme set to: {config['theme']}")
# 3. Use a persistent list to manage a task queue
tasks = db.list("daily_tasks")
tasks.push("Write the project report")
tasks.push("Deploy the new feature")
print(f"First task is: {tasks[0]}")
# 4. Use a collection for document storage and search
articles = db.collection("articles")
doc = Document(
id="sqlite-001",
body="SQLite is a powerful embedded database ideal for local apps.",
)
articles.index(doc)
# Perform a full-text search
results = articles.match(query="database")
top_doc, rank = results[0]
print(f"FTS Result: '{top_doc.body}'")
db.close()
Features
- Key-Value Dictionaries: A Pythonic, dictionary-like interface for storing any JSON-serializable object or Pydantic model within separate namespaces. Includes TTL support for caching.
- Blob Storage: A dictionary-like interface for storing binary data (e.g., images, PDFs) with associated JSON metadata.
- Persistent Lists: A full-featured, persistent Python list supporting
push,pop,prepend,deque, slicing, and in-place updates. - Persistent Priority Queue: A high-performance, persistent priority queue perfect for task orchestration across multiple processes.
- Probabilistic Sketches: Track cardinality and membership for millions of items in constant space using HyperLogLog and Bloom Filters.
- Document Collections: Store rich documents combining a vector embedding and Pydantic-based metadata.
- Vector Search: Fast, multi-process-safe linear vector search using an in-memory
numpy-based index. - Full-Text & Fuzzy Search: Automatically index and search through document metadata using SQLite's FTS5 engine, with optional fuzzy search for typo-tolerant matching.
- Knowledge Graph: Create directed, labeled relationships between documents and traverse the graph to find neighbors or perform multi-hop walks.
- Pub/Sub System: A powerful, thread and process-safe publish-subscribe system for real-time messaging with a fan-out architecture.
- Time-Indexed Logs: A specialized data structure for structured, time-series logs. Query historical data by time range or create a live, aggregated view.
- Event-Driven Callbacks: Listen for database changes in real-time. Subscribe to events on specific managers to trigger workflows or update UIs.
- Inter-Process Locking: Robust, deadlock-proof locks. Use
db.lock('task_name')to coordinate arbitrary scripts, orwith db.list('my_list') as l:to perform atomic, multi-step operations. - Pydantic Support: Optionally associate
pydantic.BaseModels with any data structure for automatic, recursive data validation and (de)serialization. - Deployment: Instantly serve your database over a RESTful API with
beaver serveand interact with it via thebeaverCLI. - Data Export & Backups: Dump any data structure to a portable JSON file with a single
.dump()command.
Documentation
For a complete API reference, in-depth guides, and more examples, please visit the official documentation at:
Contributing
Contributions are welcome! If you think of something that would make beaver more useful for your use case, please open an issue or submit a pull request.
License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file beaver_db-1.3.0.tar.gz.
File metadata
- Download URL: beaver_db-1.3.0.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6769c960057e8d529b94aa6af72ad145c4735b7c7792716be80faba1acca6ce9
|
|
| MD5 |
f7987f5ceb1299212a16632823e6df54
|
|
| BLAKE2b-256 |
b7f46140a1186446e32f2764ea016a6fc637f841a53a730467527950f9c812c4
|
File details
Details for the file beaver_db-1.3.0-py3-none-any.whl.
File metadata
- Download URL: beaver_db-1.3.0-py3-none-any.whl
- Upload date:
- Size: 79.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f54c04ef7b079bd3a4312c8fce86d941cf0b52645f76c70e6dd160a76fba9190
|
|
| MD5 |
80890ea917311cec529779fbd771bdc4
|
|
| BLAKE2b-256 |
1d31f49965bfbf1ec2ab112ed55bc0e4971ec54ce7f1507f729c218093dbf7f7
|