WunDeeDB.jl
WunDeeDB.jl: An easy to use, zero config, WAL, SQLite backend vector database - Published in JOSS (2025)
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
Repository
Your just-works / zero-config / embedded / WAL: vector database
Basic Info
- Host: GitHub
- Owner: mantzaris
- License: mit
- Language: Julia
- Default Branch: main
- Homepage: https://mantzaris.github.io/WunDeeDB.jl
- Size: 815 KB
Statistics
- Stars: 10
- Watchers: 1
- Forks: 1
- Open Issues: 0
- Releases: 1
Topics
Metadata Files
README.md
WunDeeDB.jl
WunDeeDB is a vector DataBase with a SQLite backend
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: ", myembedding)
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
- Twitter: avmantzaris
- Repositories: 34
- Profile: https://github.com/mantzaris
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
Authors
Tags
ANN Embeddings Search Vector DBGitHub 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
Top Committers
| Name | 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
- Homepage: https://mantzaris.github.io/WunDeeDB.jl
- Documentation: https://docs.juliahub.com/General/WunDeeDB/stable/
- License: MIT
-
Latest release: 1.0.1
published 8 months ago
Rankings
Dependencies
- actions/checkout v4 composite
- julia-actions/setup-julia v2 composite
- actions/checkout v4 composite
- julia-actions/cache v2 composite
- julia-actions/setup-julia v2 composite
