Repository navigation
Added
- The server stays up under load.
- More MCP tools, resources and prompts.
- A skill for an assistant connected over MCP.
- The docs, grown.
- One release, every registry.
- The documentation's home page shows every way in:
- A client in four languages, one surface.
- Clients safe to point anywhere.
- A company's presets, its command's name, and its keychain.
- The
vectrixdbcommand on a server. - Run it inside a company's registry.
vectrixdb doctortries every part of an install.- A collection keeps up with feeds and pages.
- A release is one button and one approval.
- Container images, for Intel and ARM, signed.
vectrixdb extract-servestarts the extraction service- The key for an extraction service can come from a file.
vectrixdb checkknows the variables Kubernetes sets.- Searches, ingestion and evaluation runs can be traced, off until asked.
- MCP on the server, for a team or a company.
vectrixdb mcpover HTTP serves the reading tools only- A rechunk can be previewed.
- The docs have an index for coding agents and a prompt to give one.
- The test-question writer spreads its questions and judges harder.
stale_evidence()says which questions' quotes have left the index.- Moving pictures of the dashboard.
VectrixSync.cdc()carries deletes to the target.scripts/dashboard_shots.pyretakes the dashboard's pictures.- Single sign-on, before its provider is set up.
- A security group is narrowed to a list of people.
- Emergency sign-in.
- Single sign-on and the People list, together.
- Single sign-on needs somebody named.
- An app's token needs no place on the list.
- Developer Access.
- A path for each endpoint behind a gateway.
vectrixdb checksays what reads each kind of file.- The restricted note says why.
- The brand goes further.
- About, for admins.
- A NOTICE file travels with VectrixDB.
- A web page is read as its content.
- A PDF is read by PDFium, from where its text sits.
- A chart a PDF draws is described.
- The pages the rules are unsure of are read by sight.
- A file is known by its bytes.
- Spreadsheets read as they print.
- Word and PowerPoint read as they print.
- RTF and OpenDocument files are read.
- Who said what, in the languages it was said in.
- What a video shows.
- A picture's values come as rows.
- The walkthrough tries regions in the order you write them.
- The walkthrough makes a Translator.
- The steps have a requirements file.
Changed
vectrixdb checksays when a key leaves reads open.- The
mcpextra needs mcp 2 or later. - A YouTube video with captions is read from them, not transcribed.
- The authenticator's QR code is drawn as the dashboard's own.
- The walkthrough sets how the query app scales.
- Three ways to set sign-in, and passkeys with one of them.
- Emergency sign-in goes with every way in.
- Developer Access is found by the spinner.
- GraphRAG on Bedrock asks with Converse.
- The examples are not in the repository.
- Types are checked as Python 3.12
- The walkthrough's chat model is
gpt-5.4-mini. - The
documentsextra bringspypdfium2andxlrd, - Extraction quality judges prose.
- A masked JSON reply masks everything in it,
- A busy service answers 503.
Fixed
- A signed link stays secret.
- A bot check is refused, not indexed.
- Three optional models are found where they were published.
- Two results that score alike come back in the same order every time.
- Years and figures are not phone numbers.
- A table's stacked column headings head their own columns.
- A footnote mark glued to its word is cut loose on every page,
- Keyword and hybrid search run in the store that holds the text.
VECTRIXDB_OFFLINEholds for the speech model.- The audit before release.
- The README's pictures showed as broken images.
mypy vectrixdbfailed in CI with numpy 2.4's stubs.- The docs no longer describe what left with visibility.
- A guest opening a collection is not asked to sign in.
- Policied counts the same on both pages.
- A test of a killed writer miscounted.
- A fresh checkout passes its own tests.
- A collection's Overview drew nothing for somebody signed in.
- A tab the collection's policy refuses is no longer left blank.
- Counts on a deployment.
- The line under the single sign-on screens sits in the middle.
- The second vector installs with the Azure extra.
- The walkthrough's query app asks people to sign in.
- The walkthrough's query app finds its collections.
- The walkthrough's query app has guests.
- The walkthrough's Cosmos account has one database,
data_db. - The walkthrough's embedding model keeps up with an annual report.
- A collection kept in the cloud opens where nothing was written before.
- A Markdown table whose header leaves out the label column reads right.
- A web page's text has no empty lines of spaces and no empty items.
- An old page reads whole and in time.
- A web page is decoded in the charset it names.
- Step 03 no longer reads a working create as a refusal.
- The records' database is
data_db. - The walkthrough's app is deployed twice: reads and queries apart.
- Reading a file survives a bad hour.
- The walkthrough's dashboard shows the files that would not read.
- A run records the collections it ran over.
- A collection's knowledge graph is kept where every server reads it.
- The overview recomposed, and a guest's overview drawn from it.
- A collection's record is its policy, and nothing else.
Removed
- Visibility, the masking switch and per-document policies on records.
- The dashboard's charts, redrawn, and every list ten a page.
- The error catalogue.
- Masking with an engine that reads meaning, before a document is indexed.
- Who may retrieve from a collection: its policy, checked before anything is searched.
- Visibility is
privateorpublic, and a guest reads excerpts. - The dashboard shows and sets who may retrieve.
- The Azure walkthrough's app makes a collection the way its steps do.
- Each collection's rules in one record every server reads.
- The audit trail and the access log in append blobs nothing can rewrite.
- Readable Cosmos DB items.
- The chunking techniques compared, and the Evaluate page's Chunking tab.
- A cut and a way of searching a host can follow the runs for, or pin.
- Runs are kept by kind:
retrieval/runs/<id>/andchunking/runs/<id>/. - Four more ways to cut and embed.
- A golden row keeps its evidence: the words that answer it.
- The collection pages count every instance's chunks, not one.
- It runs behind a gateway.
VECTRIXDB_TRUSTED_PROXIESsays whoseX-Forwarded-Forto believe.- The OpenAPI document ships with the release.
- Running heads and feet are taken out, and named.
- A chunk knows whether its own page was read by OCR.
- An HTML table in an extractor's reply becomes rows
compare_extractors- A document fetched from a bucket keeps its pictures.
- A walkthrough that deploys the whole thing on Azure
- Where to stop answering is measured, not borrowed.
evaluation.sweep()compares how documents are cut.vectrixdb golden label- Two homes.
- A figure found by what it looks like.
- The rest of the dashboard's trends
- The Evaluate page has five bands: first, top 3, top 5, top 10, missed.
- A reference extraction server
- A queue between the storage event and the worker on Azure
- The server records how long a search took, and the Overview draws it.
- The Overview and Audit pages have charts.
- Every refusal is one shape.
- An app can act as the person using it:
VECTRIXDB_OIDC_API_AUDIENCE. - A rate limit several servers share, and one for keys.
vectrixdb keys add | list | revoke.vectrixdb check --url- A key can be narrower than a role:
collectionsandexpires_in_days. - A key may arrive as
Authorization: Bearer. - Build an app on it
- Put it behind a gateway
- Masking of email addresses, phone numbers and card numbers.
- Reference pages read off the code.
- Two pages for knowing it all.
- A
testextra - A collection's health says whether it has a knowledge graph
- Evaluate every setup, and pick one of three.
- Golden files from anywhere, and a template to fill.
- A golden file is checked before a run, against one published schema.
- A golden answer can be one page of a document.
- The walkthrough's files are a mirror of the storage account.
vectrixdb golden templateandvectrixdb evaluate.- The Evaluate pages.
- A Function App that evaluates when the golden file changes.
- Azure's semantic ranker, chosen search by search.
- Expected documents are looked up before an evaluation searches.
- Older runs, one menu away.
- A note when a run is missing documents.
- The golden file a run used, for an admin to download.
vectrixdb check, an env file and a template.- The access log on the server's output.
relevance: how good a match is, from 0 to 1, the same on every engine.- The same number from Azure AI Search and OpenSearch.
- A collection's card says what it can do and what it is built with.
- A chunk's text is sent when somebody asks for that chunk.
- Opening a whole document is its own permission,
document.read. - Search excerpts, cut on the server.
- The quality report says why.
- People sign in to the server and its dashboard.
- Passkeys.
- How you sign in.
- Confirm it's you.
- Passwords, only if you want them.
- A lock that grows.
- Single sign-on by security group and an address list.
- Guests and shared collections.
- API keys for scripts.
- Sign-in kept where several servers can share it.
- Passkeys only, if you want that.
- A certificate in place of a client secret.
- A company's own name, logo and colour.
- The dashboard is light by default,
- Roles.
- A signed-in person can search a collection that carries a policy.
- An access log.
- Policy and filter pushdown on OpenSearch.
embeddings=on OpenSearch, with Bedrock.reranker=onVectrix.- A burst of events.
vectrixdb.evaluation.- A reference AWS stack
search(vectors=)andvector_weights.- More than one dense model locally.
- Documents over REST.
- The dashboard reads documents through the server.
keep_source: the Markdown a document was indexed from is kept.- Front matter.
- The worker reads an original once.
- The figure block.
describe_figures=.- Extraction is a slot.
- Engines for what is not text yet.
- Extras named for what the file becomes.
embed_heading=Trueonadd_document().- Tables are rows wherever they come from.
- XLSX, PPTX and CSV loaders.
- Rerank on Azure AI Search means the service's semantic ranker.
- Sentences survive the page break, and figures are chunks of their own.
- An ingestion worker for every event source.
- Citations.
- Engine pushdown on Azure AI Search.
- The dashboard, rebuilt.
- Inspection routes
"rerank": trueon/text-search- Every REST write mints an index build id
- Entitlement policies: a filter a collection cannot be queried without.
- A slimmer wheel: e5-small-v2 is fetched once instead of shipped.
- An audit sink under an object lock.
- An extraction quality signal, measured before it was shipped.
- A decision can be restated.
- Provenance on every chunk, and on the ingestion record.
- The evidence pack.
- A timing floor, for the one channel a filter cannot close.
- The write path's half of the policy: a value no rule can decide on.
- A live row level security suite, gated.
- A test kit for your own policies, shipped rather than kept in ours.
- A document the policy could never show anybody is refused at the write.
- The write path is audited too.
- A policied read can run as a database role, so PostgreSQL enforces it.
- Translating a policy into SQL is off the plan.
revoke(): change entitlements across many chunks in one call.- The wheel job runs the README's own first example.
- The id lookups are gated too, and a closed collection answers nothing.
- A policied collection searched through
Collectionsays so. - An append-only PostgreSQL sink for decision records.
- A decision record for every policied read, and somewhere to put it.
- The README covers conversation memory and the MCP server.
- Lakebase and Aurora PostgreSQL can be run against the real service.
- Every documentation page with a Python example now runs in CI.
- Nine filter operators gained tests.
- Thirteen regression tests, each with a replay.
- Every storage backend now passes the contract suite on every push.
- A collection can be written past RAM.
- Graph quality block.
- Examples gallery and governance.
- Developer experience block.
- Memory block: memory is finite and facts conflict.
- Azure AI Search storage backend.
- Ingestion block: where RAG quality is decided.
- Trust block: measured, reproducible, published.
search(rerank=False)DenseEmbedder.embed(pad_to_longest=True)- Testing block.
tokenizer.encode_batch(pad_to_longest=True)search(explain=True)- Fusion control.
- Query expansion and HyDE.
- Field boosts for keyword search.
- Snapshots.
rebuild_index()- Read-only, memory-mapped opens.
AsyncVectrixadd_many()- The filter grammar is documented
scripts/compare_modes.pyimport vectrixdbcosts 4 ms, down from 585 ms warm and 1.2 s cold.- Nothing downloads unless asked.
- Downloads are checksummed.
Vectrixis a real context manager.- numpy in, numpy out.
- Notebook reprs and progress.
- An explicit public surface.
- Concurrency is documented
- Memory per vector is measured
- Python 3.14
ProductQuantizer.fitruns in seconds instead of minutes.- Token budgets on search.
score_gap- Conversation memory
- An MCP server
tier="graph"now builds a knowledge graph.- Entity resolution that understands names
config.entity_similarity_thresholdis finally read.- Confidence labels on relationships
- Typing marker (
py.typed). - A public exception hierarchy
- CI that runs before release.
Security
- The audit before release.
- The dashboard runs no inline script, and its policy refuses all of it.
- The chart library is pinned by its hash.
- Any-origin CORS stops the start while sign-in is on.
- Every reply carries security headers.
- A collection or document name could run script in the dashboard.
- Session cookies only this host can set.
- A collection name was used as a filesystem path with nothing checked.
- An empty API key was replaced by the environment's real one.
- A user in no groups saw every document.
- Cosmos DB queries now use bind parameters.
- Databricks SQL values are bound, not escaped.
Changed
- The Azure walkthrough pushes each collection's record, and records every decision.
- Graph routes refuse in words a person can act on.
- CI tests what it claims to.
- The benchmarks were run again
- A missing OpenAI key is a
ConfigurationError, - The sidebar folds from its own header.
- Search results lead with relevance.
- A search mode the chosen collection cannot do is greyed out and says why.
- A card no longer says "hybrid" beside a tag that says "dense".
- The Quality tab's "Worst chunks" is "Below the quality line".
- The start-up banner says the API key is set and does not show it.
- The count of things that need attention is red, at zero too.
- Settings is a menu behind a gear in the top bar, not a page.
- The dashboard's look.
- A build id is shown as an id.
- Settings no longer lists the models on the machine.
- The dashboard works at three widths.
- Audit record schema version 2.
- The library no longer writes to stdout.
- Coverage is 85.1%, from 50.4%,
- mypy is clean and CI gates on it.
- The README led nowhere.
- PyPI's Documentation link pointed back at the README.
- uv is documented, because it already worked.
- The bundled English dense model is now bge-small-en-v1.5 (INT8).
- Graph search says when it fell back.
- Community detection and summarisation run only when the graph changed.
- The regex extractor sees lowercase prose.
- Type checking is a ratchet with teeth.
- The core install is five dependencies instead of thirteen.
- The document index was completely broken on SQLite.
- The one-line quick start failed on a clean install.
Deprecated
Removed
setup.pyandrequirements.txt,filter_sql, ahead of its schedule.
Fixed
- A scanned page in two columns was read across the columns.
- Text that loops scored a perfect 1.0 on extraction quality.
- No collection card alone on a row.
- The keys table says what a key may do in full.
- The hand-written notebooks are out of
tests/. - The CI coverage job would have failed on its first run.
- Cosmos DB asked to create the document containers on every write.
- The dashboard said "1 chunks".
- A hybrid search spent most of its time on highlights nothing read.
scripts/compare_modes.py --docdeleted part of the page it updates.- The README's comparison table undersold two of the engines it compares.
scripts/replay.pycounted a replay that never ran as one that passed.- Three scripts ignored
--helpand did their whole job. - Benchmark results say what produced them.
- OpenSearch scores came back as one minus the engine's score,
- The MCP server did not start on a fresh install.
- A Markdown document of headings alone was indexed as nothing.
requestswas imported and never declared.- The OpenAI embedder's errors were garbled.
- Tests skipped far more than they needed to without an optional package.
- Seven API test files could not be collected in CI
- The golden graph fixture depended on what else was installed.
- One test left the API modules re-imported for every test after it,
vectrixdb checksaid there was no admin when single sign-on maps one,- Rerank scored every result the same.
- Search results could come back without their text.
- The Overview counted no documents.
- A viewer was offered what a viewer cannot do.
- The sign-in card named ways in the server does not have.
- A guest's shared collections table split on a phone.
- Opening an Azure index could remove its semantic configuration.
vectrixdb serve --pathkept sign-in state in the wrong folder.- The dashboard at tablet and phone widths.
- A folded sidebar showed a squeezed copy of its name.
- API keys were compared with
==. - A selective filter could miss documents that match.
- An open sidebar drawer could not be closed.
- The menu button did nothing on a desktop.
- On a phone the dashboard's text overlapped.
- An upgraded server could show the old dashboard.
- A search repeated after a write returned the answer from before it.
- A delete never reached the storage backend.
- A revocation did not revoke anything a store served.
- Clicking a point in the dashboard did nothing.
LocalFetchercould not read a real file URI on Windows.- The Azure backend dropped its filter on a semantic query.
- The REST server never saved the ANN index after a write.
- The dashboard's Rerank and Late interaction modes were dense search.
- The dashboard said "Read Only" on a server with no key
- The sparse index only knew ASCII letters.
- A delete kept the build id.
- The decision record's
duration_msincluded the timing floor's sleep. - BM25 counted documents the principal was refused.
- Four read paths on
Collectionwere never gated. - A wholesale denial returned instantly with
time_ms=0.0. mode="sparse"refused a principal it had been given.- A plain
pip install vectrixdbcould not create a collection. vectrixdb-mcpanswered a missing extra with a stack trace.scroll()applied its filter after cutting the page.- Seven filter shapes raised out of the middle of a search.
- A bounding box could not cross the antimeridian.
ColBERTEncoderreturned random vectors.- The binary quantiser answered metrics it cannot measure.
- The product quantiser's euclidean returned squared L2
- A non-finite vector encoded to an ordinary-looking code.
- The one live-backend job could never run.
- A selective filter returned nothing at all.
- Reading from a store that never held a document raised.
- A missing model raised a bare
FileNotFoundError. - The scalar quantiser truncated where it should round.
- The product quantiser's cosine ranked by projection, not angle.
- The product quantiser crashed on any duplicate-heavy corpus.
is_models_installed()said no on a correct install.vectrixdb serve --no-dashboardserved the dashboard.index_textaccepted a chunk size and discarded it.VectrixSync.incremental()wasfull()under another name.- Deleting memories by an empty id list deleted everything.
$inand$ninwere wrong for every list-valued field.- Absent, null and empty were the same thing to three operators.
- A failed search on Lakebase returned an empty result set.
- A collection that would not load was dropped in silence.
- The binary quantiser could fit to NaN and report success.
- Aurora PostgreSQL's hybrid search accepted a filter and ignored it.
- A sparse model that cannot run was swapped for BM25 in silence.
VectrixSync.full(collections=[])copied every collection.- Lakebase lost the vector on a round trip and could not update at all.
- Delta Lake reported success whatever happened.
- A search limit of zero returned one result.
- The dashboard's file upload never worked.
- A heavily deleted collection got slower with no sign of why.
- One unbroken token could stop an ingest.
- An explicit empty filter returned everything instead of nothing.
- Cosine search could miss its own best hit.
- Graph extraction dropped or dangled relationships when entities merged.
- Merging two extraction results reset a fact to inferred.
LLMExtractor.extract_batch()ignoredbatch_size.- Three crashes and a silent miscount in the search helpers.
- The chunker could exceed the size it was given, and repeat an offset.
VectrixSync.full()copied nothing and reported success.VectrixDB.with_auto_scaling()raised TypeError on every call.- Graph extraction over more than one chunk crashed.
- The global graph searcher stashed a score on somebody else's dataclass.
- Enterprise search returned documents nobody was cleared to see.
- A collection reported HNSW parameters it was not built with.
- An installed ColBERT model was reported as missing.
vectrixdb download-models --type colbertraised KeyError.- A failed model download left its zip behind.
TextAnalyzer(stopwords=set())stripped English stopwords anyway.- A new
Pointcarried a naive timestamp. - The missing-dependency hint dropped the extra it names.
create_app(db_path=...)ignored its argument.POST /api/v1/documentsraised on every call.- The benchmarks page quoted e5-small-v2 numbers as bge-small-en-v1.5.
- A deleted vector could hide the documents that remained.
- Graph mode returned results in an order its scores did not explain.
- Vector search spent most of its time outside the index.
AuroraPostgreSQLStoragecould not be instantiated.- Readers in other processes failed while a writer was busy.
- A process that only searched rewrote the index file on close.
- Malformed filters escaped the parser as
AttributeError. - Docs examples that could not run.
- Search did not work. Four separate defects, now all fixed.
- The reranker stage never ran for bundled models.
- BM25 uses BM25's IDF.
- The sparse index saw no CJK text.
- Vectors in the local document store are float32 blobs.
NativeHNSWIndexis usable now.create_app()can be called more than once.- The LLM and hybrid extractors could not be constructed.
DeltaLakeStoragecould not be instantiated.get()andsimilar()raised on every call.- A graph with no entities raised on every query.
- A graph with no communities was indistinguishable from no graph.
- Storage backends no longer swallow failures.
- Adding the same text twice crashed.
geo_radiussilently returned too few documents.StringIndexcontainsbehaved asequals.- The SQLite backend is now actually thread-safe.
SyncStatus.lag_secondswas wrong by the machine's UTC offset.- The Delta Lake backend wrote local-time timestamps
__version__said2.1.0while the package was2.1.7.
Known limitations
- The bundled model is the weaker one for conversation memory.
Every entry in full: CHANGELOG.md