Skip to main content

SQLite-backed KV store (Rust+PyO3) for large media blobs with structured data support

Project description

KohakuVault

High-performance, SQLite-backed storage with dual interfaces: dict-like for blobs (key-value) and list-like for sequences (columnar). Rust core with Pythonic APIs.

Quick Start

pip install kohakuvault

KV Store - Dict-like interface for binary blobs (images, videos, documents):

from kohakuvault import KVault

vault = KVault("data.db")
vault["image:123"] = image_bytes
vault["video:456"] = video_bytes
data = vault["image:123"]

# Bulk writes with smart caching (NEW in v0.2.2!)
with vault.cache(64*1024*1024):
    for i in range(10000):
        vault[f"key:{i}"] = data
# Auto-flushes on exit!

Columnar Storage - List-like interface for typed sequences (timeseries, logs, events):

from kohakuvault import ColumnVault

cv = ColumnVault("data.db")

# Primitives
cv.create_column("temperatures", "f64")
temps = cv["temperatures"]
temps.extend([23.5, 24.1, 25.0])
print(temps[0])  # 23.5

# High-performance bulk writes with cache (v0.4.1!)
with temps.cache():
    for temp in sensor_readings:
        temps.append(temp)  # 10-100x faster!

# Efficient slice reading (NEW in v0.4.2!)
values = temps[100:200]  # 20-237x faster than loops!
print(len(values))  # 100

# Efficient slice writing (NEW in v0.4.2!)
temps[100:200] = [25.0 + i * 0.1 for i in range(100)]  # Batch update!

# Structured data (v0.3.0!)
cv.create_column("users", "msgpack")
users = cv["users"]
users.append({"name": "Alice", "age": 30, "tags": ["vip"]})
print(users[0])  # {'name': 'Alice', 'age': 30, 'tags': ['vip']}

# Strings with encoding (v0.3.0!)
cv.create_column("messages", "str:utf8")
messages = cv["messages"]
messages.append("Hello, 世界!")
print(messages[0])  # 'Hello, 世界!'

DataPacker - Rust-based serialization (NEW in v0.3.0!):

from kohakuvault import DataPacker

# MessagePack for structured data (variable-size)
packer = DataPacker("msgpack")
packed = packer.pack({"user": "alice", "score": 95.5})
data = packer.unpack(packed, 0)

# MessagePack with fixed size (NEW in v0.5.0!)
packer_fixed = DataPacker("msgpack:128")  # Fixed 128 bytes (pads if smaller, errors if larger)
packed = packer_fixed.pack({"small": "data"})  # Padded to 128 bytes

# Bulk operations
records = [{"id": i, "val": i*1.5} for i in range(1000)]
packed_all = packer.pack_many(records)  # Concatenated bytes

# Unpack with offsets (for variable-size)
offsets = [0, len(packer.pack(records[0]))]  # Calculate offsets
unpacked = packer.unpack_many(packed_all, offsets=offsets)

Features

  • Dual interfaces: Dict for blobs (KVault), List for sequences (ColumnVault)
  • Zero external dependencies: Single SQLite file, no services required
  • Memory efficient: Stream multi-GB files, dynamic chunk growth
  • Type-safe columnar: Fixed-size (i64, f64, bytes:N) and variable-size (bytes, str, msgpack, cbor)
  • Rust performance: Native speed with Pythonic ergonomics
  • Smart caching: Write-back cache for 10-100x faster bulk writes (v0.4.1!)
  • Efficient slicing: Batch read/write for 20-237x faster range access (NEW in v0.4.2!)
  • Variable-size setitem: Size-aware updates with fragment management (NEW in v0.4.2!)
  • Structured data: Store dicts/lists directly with MessagePack/CBOR (v0.3.0)
  • DataPacker: Rust-based serialization with multi-encoding support (v0.3.0)

Performance (M1 Max MacBook Pro, 50K entries)

KVault

Write (with cache):

  • 16KB entries: 24K ops/sec, 377 MB/s
  • 1KB entries: 195K ops/sec, 191 MB/s

Read:

  • 16KB entries: 63K ops/sec, 987 MB/s
  • 1KB entries: 165K ops/sec, 162 MB/s

ColumnVault Write (extend with cache)

  • i64: 12.5M ops/sec, 95 MB/s (486x faster than uncached append)
  • f64: 12.5M ops/sec, 95 MB/s (468x faster than uncached append)
  • msgpack: 1.3M ops/sec, 22 MB/s (1168x faster than uncached append)

ColumnVault Slice Read (v0.4.2)

  • f64: 2.3M ops/sec, 17 MB/s (237x faster than single-element loop)
  • i64: 2.0M ops/sec, 15 MB/s (135x faster than single-element loop)
  • bytes:32: 99K ops/sec, 3 MB/s (101x faster than single-element loop)
  • msgpack: 338K ops/sec, 10 MB/s (79x faster than single-element loop)

Hardware: M1 Max MacBook Pro 1TB SSD

  • QD1 Sequential: 3,600 MB/s read, 5,100 MB/s write
  • QD64 4K Random: 670 MB/s read, 140 MB/s write

Full benchmark: python examples/benchmark.py --entries 50000

Best Practices

Handling Many Large Binary Files

For thousands of large binaries (images, videos, documents), use a hybrid approach:

from kohakuvault import KVault, ColumnVault

kv = KVault("media.db")
cv = ColumnVault(kv)  # Share same database

# Store metadata in columnar (efficient for large lists)
cv.create_column("image_ids", "i64")
cv.create_column("image_names", "bytes")
cv.create_column("image_sizes", "i64")
cv.create_column("upload_times", "i64")

ids = cv["image_ids"]
names = cv["image_names"]
sizes = cv["image_sizes"]
times = cv["upload_times"]

# Store actual binaries in KV store
for img_id, img_data, img_name in image_stream:
    # Metadata in columnar (fast append, efficient iteration/filtering)
    ids.append(img_id)
    names.append(img_name)
    sizes.append(len(img_data))
    times.append(int(time.time()))

    # Binary data in KV (optimized for large blobs)
    kv[f"blob:{img_id}"] = img_data

# Query metadata without loading binaries
for i in range(len(ids)):
    if sizes[i] > 1024 * 1024:  # Find images > 1MB
        print(f"Large image: {names[i].decode()}")
        # Load binary only when needed
        data = kv[f"blob:{ids[i]}"]

Why this pattern?

  • ✅ Columnar optimized for append-heavy metadata (millions of entries)
  • ✅ KV optimized for large binary blobs (streaming, caching)
  • ✅ Can query/filter metadata without loading binaries
  • ✅ Both share same SQLite file (single-file deployment)
  • ✅ Efficient iteration over metadata, lazy loading of binaries

Installation

pip install kohakuvault  # When published to PyPI
pip install .            # From source

Platform Support:

  • ✅ Linux (x86_64)
  • ✅ Windows (x86_64)
  • ✅ macOS (Apple Silicon M1/M2/M3/M4 only - ARM64)
  • ❌ macOS Intel (x86_64) - not supported

Development

Prerequisites: Python 3.10+, Rust (rustup.rs)

# Setup
git clone https://github.com/yourusername/kohakuvault.git
cd kohakuvault
python -m venv .venv && source .venv/bin/activate  # or .venv\Scripts\activate on Windows
pip install -e .[dev]
maturin develop  # Build Rust extension (once)

# Workflow
# - Edit Python files → changes live immediately
# - Edit Rust files → run `maturin develop` to rebuild

# Tools
pytest                  # Run tests
black src/kohakuvault   # Format Python
cargo fmt               # Format Rust
maturin build --release # Build production wheel

Usage

Basic Operations

vault = KVault("media.db")

# Dict-like interface
vault["key"] = b"value"
data = vault["key"]
del vault["key"]
if "key" in vault: ...

# Safe retrieval
data = vault.get("key", default=b"")

# Iteration
for key in vault:
    print(f"{key}: {len(vault[key])} bytes")

Streaming Large Files

vault = KVault("media.db", chunk_size=1024*1024)  # 1 MiB chunks

# Stream from file → vault
with open("large_video.mp4", "rb") as f:
    vault.put_file("video:789", f)

# Stream from vault → file
with open("output.mp4", "wb") as f:
    vault.get_to_file("video:789", f)

Bulk Operations with Caching

Recommended: Use context manager for automatic flush

vault = KVault("media.db")

# Safest: Context manager auto-flushes
with vault.cache(cap_bytes=64*1024*1024):
    for i in range(1000):
        vault[f"item:{i}"] = data
# Auto-flushed here, guaranteed!

# Long-running: Daemon thread auto-flushes every 5 seconds
vault.enable_cache(cap_bytes=64*1024*1024, flush_interval=5.0)
while True:
    vault["sensor_data"] = read_sensor()
# Daemon flushes automatically

# Manual control (backward compatible)
vault.enable_cache(cap_bytes=64*1024*1024)
for i in range(1000):
    vault[f"item:{i}"] = data
vault.flush_cache()  # Manual flush
vault.disable_cache()  # Auto-flushes before disabling

Configuration

vault = KVault(
    path="media.db",
    chunk_size=2*1024*1024,   # Streaming chunk size
    retries=10,                # Retry attempts for busy DB
    enable_wal=True,           # Write-Ahead Logging
    cache_kb=20000,            # SQLite cache size
)

Columnar Storage

List-like interface for typed sequences (timeseries, logs, events):

from kohakuvault import ColumnVault

cv = ColumnVault("data.db")

# Fixed-size types: i64, f64, bytes:N
cv.create_column("sensor_temps", "f64")
cv.create_column("timestamps", "i64")
cv.create_column("hashes", "bytes:32")  # 32-byte fixed

temps = cv["sensor_temps"]
temps.append(23.5)
temps.extend([24.1, 25.0, 25.3])
print(temps[0], temps[-1], len(temps))  # 23.5, 25.3, 4

# Efficient slice operations (NEW in v0.4.2!)
values = temps[10:20]  # Batch read - 237x faster!
temps[10:20] = [25.0 + i * 0.1 for i in range(10)]  # Batch write - 20-50x faster!

# Variable-size bytes (for strings, JSON, etc.)
cv.create_column("log_messages", "bytes")  # No size = variable!
logs = cv["log_messages"]
logs.append(b"Short message")
logs.append(b"This is a much longer log entry with details...")
print(logs[0])  # Exact bytes, no padding

# Variable-size setitem with size-aware logic (NEW in v0.4.2!)
logs[0] = b"Updated message"  # Works even if size different!
logs[5:10] = [b"batch", b"update", b"works", b"too", b"!"]  # Batch update!

# Iterate
for temp in temps:
    print(temp)

Why columnar?

  • Append-heavy workloads (O(1) amortized, like Python list)
  • Typed data (int/float/bytes with type safety)
  • Efficient iteration and random access
  • Dynamic chunk growth (128KB → 16MB, exponential like std::vector)
  • Cross-chunk element support (byte-based addressing)
  • Minimal memory overhead (incremental BLOB I/O)

See docs/COLUMNAR_GUIDE.md and examples/columnar_demo.py for complete guide.

API Reference

Constructor

KVault(path, chunk_size=1048576, retries=4, backoff_base=0.02,
       table="kvault", enable_wal=True, page_size=4096,
       mmap_size=268435456, cache_kb=20000)

Methods

Storage

  • put(key, value) - Store bytes
  • put_file(key, reader, size=None, chunk_size=None) - Stream from file-like
  • get(key, default=None) - Retrieve bytes
  • get_to_file(key, writer, chunk_size=None) - Stream to file-like
  • delete(key) - Remove key
  • exists(key) - Check existence

Caching

  • enable_cache(cap_bytes, flush_threshold) - Enable write-back cache
  • disable_cache() - Disable and flush cache
  • flush_cache() - Commit cached writes, returns count

Maintenance

  • optimize() - VACUUM database
  • close() - Flush and close

Dict Interface: vault[key], del vault[key], key in vault, len(vault), vault.keys(), vault.values(), vault.items(), etc.

Exceptions: KohakuVaultError, NotFound, DatabaseBusy, InvalidArgument, IoError

Architecture

Python wrapper (src/kohakuvault/proxy.py)
    ↓ PyO3 bindings
Rust core (src/kvault-rust/lib.rs)
    ↓ rusqlite
SQLite database (bundled)

Why hybrid? Rust handles SQLite operations safely and efficiently. Python provides the ergonomic dict-like interface.

Contributing

# Setup
git checkout -b feature-name
# Make changes
black src/kohakuvault && cargo fmt  # Format
cargo clippy                        # Basic linting
pytest                              # Test
git commit && git push
# Open PR

License

Apache 2.0 - see LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kohakuvault-0.5.0.tar.gz (153.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

kohakuvault-0.5.0-cp313-cp313-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.13Windows x86-64

kohakuvault-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

kohakuvault-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

kohakuvault-0.5.0-cp312-cp312-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.12Windows x86-64

kohakuvault-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

kohakuvault-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

kohakuvault-0.5.0-cp311-cp311-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.11Windows x86-64

kohakuvault-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

kohakuvault-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

kohakuvault-0.5.0-cp310-cp310-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10Windows x86-64

kohakuvault-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

kohakuvault-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file kohakuvault-0.5.0.tar.gz.

File metadata

  • Download URL: kohakuvault-0.5.0.tar.gz
  • Upload date:
  • Size: 153.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kohakuvault-0.5.0.tar.gz
Algorithm Hash digest
SHA256 27400712b7933947b897ad6e88f92a2f236883c276f17705521f0d397a7ad98e
MD5 d7d74a95d02a88ffba6e2279f6e18116
BLAKE2b-256 dab5ee2a974bed50d21b0a3e2e7e25773adde096e090fef0cbbfbf9027635db0

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0.tar.gz:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a2f0426ee95dbd5e2e92792c7b7371421e2fbb2336084af92c2c5de18d169e71
MD5 9b8670ae00ab8499dae4f26dd0471615
BLAKE2b-256 8714355387c3cd21939ddd89f38207e4a674db3c20b93bd52454e5ce299ea893

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp313-cp313-win_amd64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4a88a402b780e13f878948444072124e29c6bbc6bcc42315ffda79b218d06b33
MD5 45aadc4d37d182b732e58fd9a43b707d
BLAKE2b-256 9f3baeae8da90c01af0f37f18db422eaa83d00ee96731a441369a21ddc4342d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a847a8fcbc9259456c9e62ca6483d1a2ed7d2cfe7737949e508f8631ecb9325
MD5 1fbb20b2fac7c7a2ad4fb728c28edc49
BLAKE2b-256 b864e3417f5996e3a83b580d25a42ccb1123fdcf70ead356a2d3a21dcef4ade4

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 924977f2f8eef20eff8e68cfce1e679d7a71c14370554bb162c5f99d297fd0c5
MD5 5a4c296aab104aba71acd0fc81728ccc
BLAKE2b-256 a95e94dad63bd865b0a012bb4845a025d6b6526700798451afa2272730e5eb50

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f8dcd6303b8d3fe326beac1cf40b6be73ded7f0443451881e570e51318da4d8c
MD5 8d00f536b1e5f9eb6ef8de796fbea412
BLAKE2b-256 ee89d43fadf7f44a5d52aad7ce929d5c4bdd63c42f721102e31e086ac7bbd635

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fdb8f868e0b6ed5b83522601095a76412b49eafd26d656c3eab6df7f839d9d38
MD5 a5fa247a31cf8db9959a9afb9b2cdaff
BLAKE2b-256 27efae713247a20cd3a1b335f2e40e0fa53358b95ccac80fb9398a241316d489

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 66836cb2bcdbed69dec96a27aee571ce2676731f6744be9d2552a716cb0fe743
MD5 6d3fbf14bd1dc953d3ab88ae57dc0a7e
BLAKE2b-256 502bfff5bbc66de561203a80aa5992b1740168bc5629990c4790b510b12815ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp311-cp311-win_amd64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ac1bb81caf11e55f1a8ddf9f2f91e86dab24b3212c27e0f4436d393ed0cd7434
MD5 fa2b6693a1e1ee538e36fe225dd45dfe
BLAKE2b-256 e16f1dd4590b9b66bad17687588f460c39a45f185a27ef8420b20078c5df7355

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 738eda41c83f1bee942a10a4a51ae0f0034c98cb408892577d02192033340f3b
MD5 d5a1213f3f1349dc866bb26702d68c16
BLAKE2b-256 22eb7c99a6b189c36080782d589678d5ed014439c21532f107f1d8854d527efe

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 be60d8b607af7764f61ee963e45b2186c2449e1aa08d2256dd86a097c3482621
MD5 33dee2ac55336e12cdf4c170ad00a46b
BLAKE2b-256 eb48ddfd162039df55f37dbd691fff334843f16e499e173aa25baeb964d397c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp310-cp310-win_amd64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 cb3d89570a01f9a9964da3ffa6d201b89325c2f1d14e85200e5c253ac24e73ee
MD5 6d2ccf459724fe459013311ce9614b68
BLAKE2b-256 fcaebf825565148309163cff326b86f63c68c2fdc099b28567fc9f8677655fa7

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kohakuvault-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for kohakuvault-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2c0467a51126c217b94f52a39eef5fdaf0f5f829a7eea0b0d3a771c57510ada
MD5 8081a71c838dc0a7c26a5fa62f9f4a6f
BLAKE2b-256 d58492c32f088a1991418de2ce607900674430d06b18bc8fc9d8e1a7d48c65f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for kohakuvault-0.5.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on KohakuBlueleaf/KohakuVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page