Fabriq
1.x
Docs/Fabriq/Weave (vector store)
Open

Reading2 min
Updated2 Aug 2026
Sourcev1/(ecosystem)/weave.mdx

Weave is a composable RAG pipeline (load → chunk → embed → store → retrieve → assemble) with a pluggable vectorstore.VectorStore port. The fabriqvec adapter (github.com/xraph/weave/vectorstore/fabriq, lives in the weave repo) implements that port over fabriq's Vector plane, so weave's chunk embeddings live in the fabric instead of a parallel store.

This is why fabriq's VectorQuerier gained metadata filtering and DeleteByMeta — to back weave's Search filters and DeleteByMetadata faithfully.

Wiring01

fabriqvec.New takes a fabriq query.VectorQuerier (from f.Vector()) and namespaces all weave vectors under one fabriq entity (default weave_vector).

import (
	"github.com/xraph/weave/engine"
	fabriqvec "github.com/xraph/weave/vectorstore/fabriq"
)

eng, err := engine.New(
	engine.WithStore(metaStore),
	engine.WithVectorStore(fabriqvec.New(f.Vector(), fabriqvec.WithEntity("weave_vector"))),
	// ... or fabriqvec.EngineOption(container) to auto-discover the fabriq facade from DI.
)

The host must ensure the fabriq_embeddings table exists (fabriq migrations) and operate within a fabriq tenant scope. The namespacing entity need not be registered in fabriq's registryfabriq_embeddings is keyed by an arbitrary (tenant, entity, id) triple, so the vector path works without it.

How it maps02

weave VectorStorefabriq VectorQuerier
Upsert(entries)Upsert(entity, id, vector, meta) — weave Content is folded into meta["content"] (fabriq has no content column).
Search(vec, opts)Similar(VectorQuery{Filter: opts.Filter})opts.TenantKey maps to fabriq's tenant scope; MinScore post-filters; Content/Metadata are reconstructed from meta.
Delete(ids)Delete(entity, id) per id.
DeleteByMetadata(filter)DeleteByMeta(entity, filter).
Note

Two deliberate, documented differences from weave's pgvector store: the fabriq-backed Search returns a nil Vector on each hit (fabriq does not return embeddings on search — consumers use content + score + metadata), and TenantKey maps to fabriq's native per-tenant isolation rather than a metadata.tenant_id convention — stronger isolation.