VelesDB v1.12.0
·
2832 commits
to develop
since this release
[1.12.0] - 2026-04-05
Added
- Cross-collection MATCH queries (Issue #495) —
@collectionannotation on MATCH node patterns
enables cross-collection graph queries. Syntax:MATCH (p:Product@products)-[:STORED_IN]->(inv:Inventory@inventory).
Results are enriched with payloads from annotated collections (alias-prefixed fields). - MATCH via
/queryendpoint — MATCH queries can now be executed viaDatabase::execute_query
using_collectionparameter orSELECT ... FROM <collection> WHERE MATCH ...syntax.
Previously, MATCH was rejected at the Database level. - Cross-type JOIN tests — VectorCollection JOIN MetadataCollection validated with BDD tests.
- Graph API parity — 7 new REST endpoints for complete graph operations:
DELETE /collections/{name}/graph/edges/{id}— remove edge by IDGET /collections/{name}/graph/edges/count— total edge countGET /collections/{name}/graph/nodes— list all node IDsGET /collections/{name}/graph/nodes/{id}/edges— node edges with direction filter (in/out/both)GET/PUT /collections/{name}/graph/nodes/{id}/payload— get/upsert node payloadPOST /collections/{name}/graph/traverse/parallel— multi-source BFS traversalPOST /collections/{name}/graph/search— embedding similarity search on graph nodes
- CLI graph commands —
graph remove-edge,graph count,graph search - REPL graph commands —
.graph remove-edge,.graph count,.graph search,.graph store-payload,.graph get-payload,.graph nodeswith full help documentation - Core —
GraphCollection::traverse_bfs_parallel()for multi-source BFS with deduplication - OpenAPI — all new graph endpoints registered in API documentation
- Tests — 238 BDD tests, 4447 lib tests, 13 new server tests
Performance
- Bitmap pre-filter for filtered search (#487) — adaptive strategy selection based on
real selectivity: full-scan brute-force for ≤1% selectivity, HNSW+bitmap for 1-30%,
post-filter fallback for >30%. Eliminates massive over-fetching on selective filters - CSR graph traversal v2 (#491) — CsrSnapshot with edge IDs + labels, ArcSwap lock-free
adjacency, EdgePredicate pushdown (290ns for label-filtered BFS vs 3.4µs unfiltered = 12x),
lazy CSR rebuild on read instead of every mutation - Bulk insert v2 pipeline (#488) — DirectVectorWriter bypasses ShardedVectors overhead,
AsyncIndexBuilder with background thread for deferred HNSW construction ComponentScoresoptimization (#476) —SmallVec<[(&'static str, f32); 4]>eliminates per-result heap allocation- Bitmap NEQ support —
Neqconditions now use universe bitmap subtraction - Secondary index backfill —
create_indexscans existing payloads to populate the index - LIKE→BM25 fallback — metadata-only LIKE queries use BM25 text index for candidate narrowing
- Native batch edge loading —
add_edges_batchwith single lock acquisition cycle (1M+ edges/s) - 19 functions CC > 8 reduced to ≤ 8 — all non-SIMD functions now comply with Codacy CC ≤ 8
Fixed
- BFS dedup — CSR and EdgeStore BFS no longer produce duplicate results for nodes
reachable via multiple paths (diamond graph fix). - DISTINCT in early-return paths (#475) —
SELECT DISTINCTnow applied in NOT-similarity and union query paths. - NEAR + MATCH + metadata filter (#474) — co-occurring metadata filters no longer silently dropped in hybrid search.
list_indexesincludes secondary indexes — was only returning property/range indexes.rrf_kpropagated tohybrid_search_with_filter(#472) — was hardcoded to 60.- CSR label filter — edges with unresolvable labels now excluded when rel_type filter is active.
- Cross-collection enrichment — logs
tracing::warnwhen@collectionreferences a non-existent collection. - AsyncIndexBuilder drain in flush —
flush()andflush_full()now drain the AIB buffer into HNSW. - Tauri
drop_index— usesrequire_vector_collectioninstead of deprecatedrequire_collection. - LangChain
filter=kwarg — backward-compatible alias restored alongsidemetadata_filter=.
Changed (Breaking)
- BFS cycle behavior — BFS no longer re-emits already-visited nodes when a cycle closes.
Code relying on duplicate entries for cycle detection must be updated. ComponentScorestype — changed fromSmallVec<[(String, f32); 4]>toSmallVec<[(&'static str, f32); 4]>.
External code constructingSearchResultwith custom component scores must use&'static strliterals.- Python
relationship_types=alias (#490) —traverse_bfs/dfsnow accept bothrel_types=andrelationship_types=. - CLI commands restructured — flat commands (
velesdb list) grouped into sub-commands (velesdb collection list). - License — added Attribution clause for public-facing applications (visible link
to velesdb.com required, Enterprise license waives requirement). - Rate limit — increased default from 100 to 100K QPS for local-first deployment.
What's Changed
- perf(hnsw): recall at 100K scale + panic→Result + test fixes by @cyberlife-coder in #494
- license: add Attribution clause for public-facing applications by @cyberlife-coder in #496
- feat: add image search tutorial (Hamming + CLIP two-pass pipeline) by @cyberlife-coder in #506
- refactor: align tutorial naming with article (Bouncer/Detective) by @cyberlife-coder in #507
- Release: develop → main (perf optimizations + graph API parity + CI updates) by @cyberlife-coder in #497
Full Changelog: v1.11.0...v1.12.0