Most vector libraries optimize for a static corpus. Real systems do not stay still: agents write memories continuously, documents get corrected, users invoke the right to erasure, and teams need to reproduce what a retriever saw last Tuesday.
ChronoVec is an approximate-nearest-neighbour index built for that case. Every record carries a version interval, so queries can read the index as of any past moment, deletions physically reclaim space on a bounded budget, and continuous writes never force a rebuild — or block a reader.
pip install chronovec
The same native core is available through the other mainstream package managers once published:
cargo add chronovec
npm install @chronovec/native
Building from source requires a C++20 compiler and CMake —
pip install .handles that automatically. See Getting started for full instructions.
Portable builds use baseline CPU instructions. If every deployment CPU supports
AVX2, opt in with -DCHRONOVEC_ENABLE_AVX2=ON for faster x86 distance kernels.
Why ChronoVec exists
1. Query the past
t1 = index.insert(1, embedding)
index.delete(1)
index.search(query, k=10) # now: id 1 is gone
index.search(query, k=10, snapshot=t1) # as of t1: id 1 is there
Audit, reproducible evaluation, and retrieval regression debugging all need this. ChronoVec makes the snapshot part of the retrieval API.
2. Delete for real, on a budget
index.delete(user_vector_id)
index.vacuum(oldest_snapshot=index.clock + 1, budget_versions=64)
vacuum physically reclaims at most budget_versions expired records — no full rebuild. For compliance workflows, logical deletion is immediate and physical reclamation is explicit and bounded.
3. Write continuously without blocking readers
Writes never block reads. A reader snapshots an immutable view and queries it lock-free, even while a batch is in progress. Reads and writes compose: insert, delete, and query concurrently from multiple threads with no coordination at the reader.
4. Branch and speculate
from chronovec import AgentMemory
memory = AgentMemory(384)
memory.add(1, embedding, text="base knowledge")
plan = memory.branch("hypothesis")
plan.add(2, other, text="speculative — not yet committed")
plan.search(query) # sees base + speculation
memory.search(query) # main never saw the speculation
plan.discard() # abandon speculation; purge later
Agent memory with snapshot isolation: spawn a branch, explore speculatively, discard or merge. Each branch gets its own private delta index by default, so there's no fixed branch-count ceiling.
5. Survive a crash
index = Index(768, wal_path="index.wal")
index.insert_many(ids, vectors)
# process dies here —
index = Index(768, wal_path="index.wal") # replays the log; nothing lost
Writes are logged before they are applied. A torn tail from a crash mid-append is detected by CRC, dropped, and the file truncated cleanly.
Quick start
Quickstart
from chronovec import Collection
# In-memory collection, for easy prototyping. Add persistence easily below!
collection = Collection(dimensions=3)
# Add records in batches; update() and delete() use the same ids-oriented API.
collection.add(
ids=["doc1", "doc2"], # unique per record
embeddings=[[1, 0, 0], [0, 1, 0]], # or pass embedding_function= and add documents only
documents=["This is document1", "This is document2"],
metadatas=[{"source": "notion"}, {"source": "google-docs"}], # filter on these!
)
# Query the 2 most similar results. get() fetches by id/filter without a search.
results = collection.query(
[1, 0, 0],
k=2,
# where={"source": "notion"}, # optional metadata filter
# snapshot=collection.snapshot(), # optional: read as of an earlier point in time
)
For text embedding, pass either the original batch callable or ChronoVec's provider-neutral adapter. The adapter keeps document and query embedding separate when your model needs different instructions:
from chronovec import Collection, CustomEmbedding
embedder = CustomEmbedding(
embed_documents=my_embed_documents, # list[str] -> list[list[float]]
embed_query=my_embed_query, # str -> list[float]
)
collection = Collection(dimensions=384, embedding_function=embedder)
collection.add(ids=["doc1"], documents=["This is document1"])
results = collection.query(query_text="find document one", k=1)
Objects exposing embed_documents and embed_query are accepted directly,
as are LlamaIndex-style get_text_embedding_batch and
get_query_embedding objects. ChronoVec does not install or select a model
provider; use the provider library that fits your application.
For local Sentence Transformers models, install the optional adapter:
pip install "chronovec[sentence-transformers]"
from chronovec import Collection, SentenceTransformerEmbedding
embedding = SentenceTransformerEmbedding("sentence-transformers/all-MiniLM-L6-v2")
collection = Collection(384, embedding_function=embedding)
For hosted providers, ChronoVec wraps LiteLLM so one adapter covers OpenAI, Cohere, Bedrock, Azure, and the rest of LiteLLM's provider list without ChronoVec depending on any of them directly:
pip install "chronovec[litellm]"
Pass the provider secret explicitly from your environment:
import os
from chronovec import Collection, ProviderEmbedding
embedding = ProviderEmbedding(
provider="openai",
model="text-embedding-3-small",
api_key=os.environ["OPENAI_API_KEY"],
)
collection = Collection(1536, embedding_function=embedding)
Add persistence with a Client, which opens (or creates) named collections
that checkpoint themselves to disk after every mutation — no separate save
call:
from chronovec import Client
client = Client("./data") # omit the path for "./.chronovec"
# get_collection, list_collections, delete_collection also available!
collection = client.get_or_create_collection("docs", dimensions=3)
collection.add(ids=["doc1"], embeddings=[[1, 0, 0]], documents=["This is document1"])
Inspect a persistent store with chronovec list ./data or chronovec inspect ./data docs.
# Install from source — cmake runs automatically
pip install ".[dev]"
from chronovec import Index, Collection
# Low-level API: int64 ids, NumPy vectors
index = Index(384, metric="cosine", page_capacity=256, nprobe=16)
t1 = index.insert(1, embedding)
index.insert(2, other_embedding)
for hit in index.search(query, k=10):
print(hit.id, hit.distance)
index.delete(1)
index.vacuum(oldest_snapshot=index.clock + 1, budget_versions=64)
index.save("memories.cvec")
restored = Index.load("memories.cvec")
# High-level API: string ids, metadata, rich filtering
memory = Collection(dimensions=768, metric="cosine")
memory.add(ids=["doc-a"], embeddings=[v], metadatas=[{"lang": "en", "score": 0.9}])
before = memory.snapshot()
memory.add(ids=["doc-a"], embeddings=[corrected])
memory.query(q, k=5, where={"lang": "en"}) # latest
memory.query(q, k=5, where={"lang": "en"}, snapshot=before) # as of `before`
where supports $eq $ne $gt $gte $lt $lte $in $nin $contains $regex $and $or.
# Async API for FastAPI / asyncio — same shape as Collection, awaited
from chronovec import AsyncCollection
memory = AsyncCollection(768, embedding_function=my_embed)
await memory.add(ids=["doc-a"], documents=["the user prefers dark mode"])
results = await memory.query(query_text="appearance settings", k=5)
Framework integrations
| Integration | Import | Notes |
|---|---|---|
| LangChain | chronovec.integrations.langchain.ChronoVecVectorStore |
Full VectorStore subclass with branching for LCEL chains |
| LlamaIndex | chronovec.integrations.llamaindex.ChronoVecLlamaStore |
Node storage contract, metadata filtering |
| LangGraph | chronovec.integrations.langgraph.LangGraphMemory |
Maps one graph thread_id to one isolated ChronoVec branch |
| DuckDB | chronovec.duckdb_adapter.ChronoDuckDBAdapter |
SQL UDF interface (experimental) |
| SQLite | native virtual table | Embedded, durable via SQLite WAL |
| Rust | bindings/rust/chronovec |
Raw Index tier plus an ergonomic collection::Collection (string ids, metadata, filters — same vocabulary as Python's Collection) |
| Go | bindings/go/chronovec |
Raw Index tier via cgo, plus an ergonomic Collection (any-typed ids, map[string]any metadata, where=-style filter maps) built from scratch — no Rust crate for Go to reuse |
| Node.js | bindings/node (@chronovec/native) |
Raw Index tier plus an ergonomic Collection (string ids, metadata, filter DSL as plain where= objects), via napi-rs wrapping the Rust crate. ids are bigint (JS number can't hold the full id range losslessly) |
# LangChain — branching LCEL chains
from chronovec.integrations.langchain import ChronoVecVectorStore
store = ChronoVecVectorStore(embedding=embeddings, dimensions=384)
store.add_texts(["the user prefers dark mode"])
with store.branch("hypothesis") as scratch:
scratch.add_texts(["speculative memory"])
scratch.similarity_search("theme") # sees both
store.similarity_search("theme") # speculation discarded
# LlamaIndex
from chronovec.integrations.llamaindex import ChronoVecLlamaStore
store = ChronoVecLlamaStore(dimensions=768)
index = VectorStoreIndex.from_vector_store(store)
Language support
| Language | Status |
|---|---|
| C / C++ | Native library and stable C ABI (bindings/rust/chronovec-sys/native/include/chronovec.h) |
| Python | Stable — Client/Collection for applications, Index for low-level control |
| Rust | Supported alpha — source-available, not yet published to crates.io; the native core builds from the crate |
| Go | Supported alpha — github.com/mchl-labs/chronovec/bindings/go/chronovec via cgo |
| Node.js | Supported alpha — source-available, not yet published to npm; builds platform binaries from source |
| SQLite | Integration — loadable virtual table and static-registration library |
See the support and maturity matrix for the exact compatibility and guarantee boundary.
Performance
Measured fresh against chromadb, faiss-ivfflat, and hnswlib on SIFT-128, GloVe-25, and GIST-960, up to 500,000 live vectors — ChronoVec leads on the workload it's built for, and the margin grows with scale rather than shrinking:
- Write-heavy workloads: chronovec holds ~140–150k replacement-pairs/s at high recall across every churn epoch tested at 200k live vectors — 16.5x faiss's steady-state throughput at that scale (vs. 2x at 10k; faiss's
remove_idscost compounds with corpus size). hnswlib stays roughly 70x below chronovec throughout, and chroma didn't complete this workload above 10,000 live vectors — three independent attempts at 50k/100k/200k all exceeded their 5–24 minute time budgets. - Concurrent reads during writes: chronovec is the only one of the four that's both provably safe (snapshot isolation) and fast — hnswlib and faiss don't document concurrent read+write as safe at all, and chroma is safe but ~980x slower at p99 at 200,000 live vectors.
- Metadata-filtered search: chronovec's page-skipping gets faster as the filter tightens, an advantage that holds from 50k through 500k live vectors; hnswlib gets up to 100x slower at tight filters, and faiss's post-filter approach is fast but falls short of its recall target by up to 80 points and, at scale, stops returning k results for the majority of queries.
For a corpus that's built once and never mutated afterward, hnswlib and faiss both out-query chronovec by ~1.5–2x at matched recall on SIFT-128/GloVe-25 — that's the price of the versioning machinery above, and if your index never changes, either is a fine choice. ChronoVec overtakes hnswlib again at 960 dimensions. ChronoVec is for the other workload: agents writing memories, RAG corpora receiving corrections, CDC streams, and systems that need deletion, historical replay, or filtered queries against a corpus that keeps changing.
See docs/performance.md for full numbers, methodology, and the regression gate protocol.
The public comparison suite is reproducible from a clean checkout: install the
benchmark extra, fetch the named ANN-Benchmarks files, then run
benchmarks/run_all.sh. The command writes machine-readable JSON results and
skips only engines that are not installed; see the benchmark instructions.
Examples
| Example | What it shows |
|---|---|
examples/agent_memory.py |
Branching, speculation, time travel, vacuum |
examples/langgraph_branching_memory.py |
LangGraph-style trajectory evaluation with isolated ChronoVec memory branches |
examples/lats_chronovec.py |
Persistent-delta LATS tree search with 85 live isolated trajectories and atomic publish |
examples/lats_benchmark.py |
LATS at scale: configurable depth/branching-factor, async concurrent rollouts, checkpoint/resume, and a benchmark against a copy-per-trajectory baseline |
examples/rag_time_travel.py |
Query corpus as of t-1 after an update |
examples/streaming_updates.py |
High-churn loop: insert/delete/vacuum, amplification stays flat |
examples/compliance_deletion.py |
GDPR erasure: delete + vacuum + verify gone at any snapshot |
Flagship demo: agent memory
Run the offline demo—no model key, database, or service required:
pip install chronovec
python examples/agent_memory.py
It captures an interaction, retries a mistaken memory update on an isolated
branch, and merges the corrected result without contaminating the original
timeline. For the broader mutable-RAG workflow, see
examples/mutable_rag.py.
Documentation
| Getting started | Install, build, 3-minute tour |
| Migrating from Chroma | Familiar API, snapshots, branching, and deletion semantics |
| Architecture | MVCC, page structure, routing, reclamation |
| API reference | All public classes and methods |
| Integrations | LangChain, LlamaIndex, DuckDB, SQLite, Rust |
| Use cases | Agent memory, RAG with history, compliance, streaming |
| Performance | Benchmarks, methodology, regression gates |
| Contributing | Build from source, conventions, how to add tests |
Using ChronoVec from a coding agent
If you are building or modifying code that uses ChronoVec inside Claude Code, a skill file is included that teaches the agent the API idioms, snapshot timing, branching patterns, and common footguns. It activates automatically when relevant. The skill lives at .claude/skills/chronovec/chronovec/SKILL.md and can be invoked explicitly with /chronovec.
Citing ChronoVec
If ChronoVec contributes to your research or publication, please cite it:
@software{chronovec,
title = {ChronoVec: A Versioned Vector Index with Snapshot Isolation},
author = {Rottoli, Michael},
year = {2026},
url = {https://github.com/mchl-labs/chronovec},
license = {Apache-2.0}
}
The repository also includes a machine-readable
CITATION.cff file.
Status
- Solid: MVCC correctness, bounded reclamation, lock-free reads, checkpoint save/load, sanitizer targets (ASan/UBSan/TSan), C-ABI fuzzing, comprehensive test suite (3,700+ lines).
- Stable: The Python API and C ABI are production-supported. Writers serialize on a single MVCC lock (lock-free reads, not multiwriter mutation).
- Supported alpha: Rust, Go, and Node.js bindings have release CI but do not yet carry the Python API's compatibility promise.
- Experimental: DuckDB adapter (not thread-safe, minimal test coverage), SQLite dqlite failover.
- Async:
AsyncCollectionis available for asyncio/FastAPI applications; the low-levelIndexcan be called throughasyncio.to_thread()when needed.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chronovec-1.0.0.tar.gz.
File metadata
- Download URL: chronovec-1.0.0.tar.gz
- Upload date:
- Size: 4.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2c22d3887393251cd7c981dc51470dee2a02caeda53dd7e69066c57d3c9be5a
|
|
| MD5 |
a5278df08f31d3b773436919679db015
|
|
| BLAKE2b-256 |
8559f603b320b90232573d5558e8de18994c30228e6f139db6dda6e66ec6622a
|
Provenance
The following attestation bundles were made for chronovec-1.0.0.tar.gz:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0.tar.gz -
Subject digest:
d2c22d3887393251cd7c981dc51470dee2a02caeda53dd7e69066c57d3c9be5a - Sigstore transparency entry: 2753791627
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 188.3 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16976aecd573b46b9224a09b8622bab8d14e5b094f444fe5b57c785ad447037f
|
|
| MD5 |
5213470b0e10788600b2510133a28cc7
|
|
| BLAKE2b-256 |
6714e903b87a59f813366282afebaaa784d516c9134818df96d023abef037e5e
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp313-cp313-win_amd64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp313-cp313-win_amd64.whl -
Subject digest:
16976aecd573b46b9224a09b8622bab8d14e5b094f444fe5b57c785ad447037f - Sigstore transparency entry: 2753791671
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 290.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c1f86c243da3361bd3a12fc65c26e7a756f96a31822da69dba0baff9f0d90c3
|
|
| MD5 |
9e3898f5ab5ff34e7008865190f79436
|
|
| BLAKE2b-256 |
633ece1063899bd5e847319fbe8641d97fe86706e055d9ff9bbe9feb489e55b0
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
1c1f86c243da3361bd3a12fc65c26e7a756f96a31822da69dba0baff9f0d90c3 - Sigstore transparency entry: 2753791642
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 183.4 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcce19cdb834bbce7ca83223166e28e598c71fa8a1a66f67f64447add96c4546
|
|
| MD5 |
2455e2b55af02b3c1e30a3232d5b2316
|
|
| BLAKE2b-256 |
2a18d0eecdb4a49f6b40d01857a9bd3227b5be0a95a6b9fab690386f00d2f912
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
fcce19cdb834bbce7ca83223166e28e598c71fa8a1a66f67f64447add96c4546 - Sigstore transparency entry: 2753791654
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 188.3 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a54c5dd69f91b0ec3fdca2102b43f1e6741305e003b3bc3bf39ae0827ccbd77a
|
|
| MD5 |
b48c4bfe1fb1aee66d68a82a9629abbd
|
|
| BLAKE2b-256 |
8ad01414f762450065b0d6478139930a07959736a5d32cae230ccde9ff655c51
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp312-cp312-win_amd64.whl -
Subject digest:
a54c5dd69f91b0ec3fdca2102b43f1e6741305e003b3bc3bf39ae0827ccbd77a - Sigstore transparency entry: 2753791630
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 290.3 kB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
292b5f383329a2b3a2d9908232973f5b3c52e951eff9b3eb0f9f3aec6f087b0a
|
|
| MD5 |
6385102ea2ea1f9607fd96a46fe91ec0
|
|
| BLAKE2b-256 |
4a0289235b3282b6d868f4e0aecef75e6b51842c6db53ce988e84483021a7a21
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
292b5f383329a2b3a2d9908232973f5b3c52e951eff9b3eb0f9f3aec6f087b0a - Sigstore transparency entry: 2753791636
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 183.4 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
460578cc450385e14e93fee5952bbb042689db7a353102a166cf7112e83f846b
|
|
| MD5 |
cd480e502861cd868fc57434e0c9040c
|
|
| BLAKE2b-256 |
81e611226bff0c5ffecbe7e502f614183fb40cc7e1db00949e0025dd32062094
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
460578cc450385e14e93fee5952bbb042689db7a353102a166cf7112e83f846b - Sigstore transparency entry: 2753791633
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 188.3 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
220dc54b183391ba23ee88f0b9c1843e31b909aa5926f24126b3d5ea21d2bd91
|
|
| MD5 |
6c74fb1e007924296378f8c779ddb0e6
|
|
| BLAKE2b-256 |
e29c0f9b543e84a53756449c6694bd1dad079381c436690f83d8115c0b38d18f
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp311-cp311-win_amd64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp311-cp311-win_amd64.whl -
Subject digest:
220dc54b183391ba23ee88f0b9c1843e31b909aa5926f24126b3d5ea21d2bd91 - Sigstore transparency entry: 2753791667
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 290.3 kB
- Tags: CPython 3.11, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b35d6c19107b160712a2ab7d71d105977c6cae02fbafc4c2faef7cfe21ff7eb4
|
|
| MD5 |
713ac9b4379251f357a0b2b9c8d9a42b
|
|
| BLAKE2b-256 |
747c89e560902770d94edce9f9562e3cb48d70ab70e32b02c0f366774b5fdaf6
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
b35d6c19107b160712a2ab7d71d105977c6cae02fbafc4c2faef7cfe21ff7eb4 - Sigstore transparency entry: 2753791661
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file chronovec-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: chronovec-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 183.4 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82ef6b743c19d0d3f0ba0ac1732daa807d9343498996d7793e117978d7d6e0e1
|
|
| MD5 |
928b90d79dc33b1fb5b8e6819433c277
|
|
| BLAKE2b-256 |
8ccc970a3b4c96340b9d54636c52687e4ddfe4876931c556d667ebf834c4b625
|
Provenance
The following attestation bundles were made for chronovec-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on mchl-labs/chronovec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chronovec-1.0.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
82ef6b743c19d0d3f0ba0ac1732daa807d9343498996d7793e117978d7d6e0e1 - Sigstore transparency entry: 2753791639
- Sigstore integration time:
-
Permalink:
mchl-labs/chronovec@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mchl-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0402b3f26e79bb0ae70287f1488e6bda0b52cd0b -
Trigger Event:
workflow_dispatch
-
Statement type: