Semantic Versioning for sqlite-vec
​
sqlite-vec
is pre-v1, so according to the rules of Semantic Versioning, so "minor" release like "0.2.0" or "0.3.0" may contain breaking changes.
But what exactly counts as a "breaking change" in a SQLite extension? The line isn't so clear, unforetunately. Here are a all the surfaces that COULD count as a "breaking change":
- SQL functions and columns on virtual tables
- The C API (extension entrypoints)
- "Bindings" like the official
pip
andnpm
packages - Release assets like the pre-compile extensions
What counts as a "breaking change"? ​
Changes to SQL functions ​
- Re-naming or removing an SQL function
- Changing the number of required SQL parameters
Changes to SQL virtual tables ​
- The number of
Changes to the C API ​
Currently there is no "official" C API for sqlite-vec
. However, there are entrypoints defined in C that C developers or developers using FFI can call. Any changes to these entrypoints would be a breaking change.
Compile-time options ​
The removal of any compile time options
When is v1.0
coming? ​
In a few months! The main problems I want to solve before v1.0
include:
- Metadata columns
- Metadata filtering
- ANN indexing
- Quantization + pre-transformations
Once those items are complete, I will likely create a v1.0
release, along with renaming the vec0
virtual table modile to vec1
. And if future major releases are required, a v2.0
major releases will be made with new vec2
virtual tables and so on.
Ideally, only a v1
major release would be required. But who knows what the future has in store with vector search!
In general, I will try my best to maximize stability and limit the number of breaking changes for future sqlite-vec
versions.