WunDeeDB.jl

WunDeeDB.jl: An easy to use, zero config, WAL, SQLite backend vector database - Published in JOSS (2025)

https://github.com/mantzaris/wundeedb.jl

Science Score: 93.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 9 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

embedded julia julialang vector-database
Last synced: 6 months ago · JSON representation

Repository

Your just-works / zero-config / embedded / WAL: vector database

Basic Info
Statistics
  • Stars: 10
  • Watchers: 1
  • Forks: 1
  • Open Issues: 0
  • Releases: 1
Topics
embedded julia julialang vector-database
Created about 1 year ago · Last pushed 8 months ago
Metadata Files
Readme License

README.md

WunDeeDB.jl

License: MIT Documentation Build Status DOI

WunDeeDB is a vector DataBase with a SQLite backend

(link to docs)

WunDeeDB is a Julia package for storing and querying embeddings in a SQLite database. It supports a variety of numerical types (including Float16, Float32, Float64, and various integer types) and can integrate with approximate nearest neighbor indices (like HNSW or LM‐DiskANN). By default, the module provides a linear fallback for distance queries if no ANN method is enabled.

HNSW: Malkov, Y. A., & Yashunin, D. A. (2018). Efficient and robust approximate nearest neighbor search using hierarchical navigable small world graphs. IEEE transactions on pattern analysis and machine intelligence, 42(4), 824-836.

LM-DiskANN: Pan, Y., Sun, J., & Yu, H. (2023, December). Lm-diskann: Low memory footprint in disk-native dynamic graph-based ann indexing. In 2023 IEEE International Conference on Big Data (BigData) (pp. 5987-5996). IEEE.

Using the package (Quick examples for HNSW/LM-DiskANN, and linear)

Minimal code snippet showing how to create a database, insert a couple embeddings, and then run searches with HNSW, LM‐DiskANN, and a linear fallback. (We assume each approach uses a separate DB for illustration.)

Install via: (@v1.9) pkg> add https://github.com/mantzaris/WunDeeDB.jl

```julia using WunDeeDB

1) Example: HNSW

hnswdb = "temphnsw.sqlite" initializedb(hnswdb, 3, "Float32"; ann="hnsw") insertembeddings(hnswdb, "node1", Float32[0.0, 0.0, 0.0]) insertembeddings(hnswdb, "node2", Float32[1.0, 1.0, 1.0])

search for top-1 neighbor using HNSW adjacency

foundhnsw = searchann(hnswdb, Float32[0.1, 0.1, 0.1], "euclidean"; topk=1) println("HNSW found: ", found_hnsw)

2) Example: LM-DiskANN

lmdiskanndb = "templmdiskann.sqlite" initializedb(lmdiskanndb, 3, "Float32"; ann="lmdiskann") insertembeddings(lmdiskanndb, "nodeA", Float32[0.5, 0.5, 0.4]) insertembeddings(lmdiskanndb, "nodeB", Float32[0.8, 0.9, 0.7])

search for top-2 neighbors using LM-DiskANN adjacency

foundlmdiskann = searchann(lmdiskanndb, Float32[0.55, 0.55, 0.35], "euclidean"; topk=2) println("LM-DiskANN found: ", found_lmdiskann)

3) Example: Linear fallback (no ann)

lineardb = "templinear.sqlite" initializedb(lineardb, 3, "Float32"; ann="") insertembeddings(lineardb, "X", Float32[0.0, 1.0, 2.0]) insertembeddings(lineardb, "Y", Float32[1.0, 1.0, 2.0])

fallback linear search:

foundlinear = searchann(lineardb, Float32[0.1, 1.0, 2.1], "euclidean"; topk=2) println("Linear fallback found: ", found_linear) ```

and some more examples

```julia using WunDeeDB

1) Initialize a database, dimension=3, Float32, no ann

dbpath = "mydemo.sqlite" initializedb(dbpath, 3, "Float32"; keepconnopen=true, description="Demo DB", ann="")

2) Insert Embeddings

- single key => single embedding

- multiple keys => vector-of-vectors

insertembeddings(dbpath, "key1", Float32[0.1, 0.2, 0.3]) insertembeddings(dbpath, ["key2", "key3"], [Float32[1.0, 1.1, 1.2], Float32[9.0, 9.1, 9.2]])

3) Retrieve Embeddings

- single key => single vector

- multiple keys => dictionary of key => vector

Single Key

myembedding = getembeddings(dbpath, "key1")
println("key1 embedding: ", my
embedding)

Multiple keys

someembeddings = getembeddings(dbpath, ["key2", "key3"]) println("Retrieved keys: ", keys(someembeddings)) println("key2 embedding => ", someembeddings["key2"]) println("key3 embedding => ", someembeddings["key3"])

4) Delete Embeddings by Keys

- Single or multiple keys can be removed

deleteembeddings(dbpath, "key1") deleteembeddings(dbpath, ["key2", "key3"])

After deletion, retrieving them returns nothing or an error

checkafterdelete = getembeddings(dbpath, "key1") println("key1 after deletion => ", checkafterdelete) # likely nothing or error string

5) Close DB

closedb() # or closedb(db_path) if your code does that

```

read the documentation for more details on the variety of functions.

naming of the package

In his book How JavaScript Works, Douglas Crockford advocates for spelling the word "one" as "wun" to better align with its pronunciation. He argues that the traditional spelling does not conform to standard English pronunciation rules and that having the word for 1 start with a letter resembling 0 is problematic. Since a vector database is a database for 1-D objects, it is called Wun-Dee-DB.

Along with a simple name should be the simple approach for a: zero-config, embedded, WAL, just works vector database.

Citing this work

  • Mantzaris, A. V., (2025). WunDeeDB.jl: An easy to use, zero config, WAL, SQLite backend vector database. Journal of Open Source Software, 10(110), 8033, https://doi.org/10.21105/joss.08033

  • @article{Mantzaris2025, doi = {10.21105/joss.08033}, url = {https://doi.org/10.21105/joss.08033}, year = {2025}, publisher = {The Open Journal}, volume = {10}, number = {110}, pages = {8033}, author = {Alexander V. Mantzaris}, title = {WunDeeDB.jl: An easy to use, zero config, WAL, SQLite backend vector database}, journal = {Journal of Open Source Software} }

Owner

  • Name: a.v.mantzaris
  • Login: mantzaris
  • Kind: user
  • Location: USA

Excited about the future of technology. Happy to participate in shaping that future through theory and practice.

JOSS Publication

WunDeeDB.jl: An easy to use, zero config, WAL, SQLite backend vector database
Published
June 20, 2025
Volume 10, Issue 110, Page 8033
Authors
Alexander V. Mantzaris ORCID
Department of Statistics and Data Science, University of Central Florida (UCF), USA
Editor
Mehmet Hakan Satman ORCID
Tags
ANN Embeddings Search Vector DB

GitHub Events

Total
  • Create event: 6
  • Commit comment event: 3
  • Issues event: 1
  • Release event: 1
  • Watch event: 6
  • Issue comment event: 1
  • Push event: 96
  • Pull request event: 2
  • Fork event: 1
Last Year
  • Create event: 6
  • Commit comment event: 3
  • Issues event: 1
  • Release event: 1
  • Watch event: 6
  • Issue comment event: 1
  • Push event: 96
  • Pull request event: 2
  • Fork event: 1

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 3
  • Total Committers: 1
  • Avg Commits per committer: 3.0
  • Development Distribution Score (DDS): 0.0
Past Year
  • Commits: 3
  • Committers: 1
  • Avg Commits per committer: 3.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
mantzaris a****s@g****m 3

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 1
  • Total pull requests: 3
  • Average time to close issues: less than a minute
  • Average time to close pull requests: about 2 hours
  • Total issue authors: 1
  • Total pull request authors: 2
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.0
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 3
  • Average time to close issues: less than a minute
  • Average time to close pull requests: about 2 hours
  • Issue authors: 1
  • Pull request authors: 2
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.0
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • JuliaTagBot (1)
Pull Request Authors
  • mantzaris (2)
  • jbytecode (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 1
juliahub.com: WunDeeDB

Your just-works / zero-config / embedded / WAL: vector database

  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 8.3%
Average: 33.5%
Dependent packages count: 35.7%
Forks count: 40.2%
Stargazers count: 50.0%
Last synced: 6 months ago

Dependencies

.github/workflows/ci.yml actions
  • actions/checkout v4 composite
  • julia-actions/setup-julia v2 composite
.github/workflows/documentation.yml actions
  • actions/checkout v4 composite
  • julia-actions/cache v2 composite
  • julia-actions/setup-julia v2 composite