Kurd
A high-performance Model Context Protocol (MCP) gateway for Python, powered by Rust.
Kurd combines a Python-first developer API with a Rust data plane for MCP routing, upstream aggregation, concurrency control, security, caching, and observability. The optional enterprise layer adds multi-tenancy, billing, idempotency, a dead-letter queue, secrets management, webhooks, distributed state, and distributed tracing.
Status
Kurd is in beta and is being hardened for production use.
Current release line: 0.4.x
The gateway targets the MCP 2026-07-28 protocol revision while preserving compatibility paths used by existing Kurd applications.
Highlights
Core gateway
- Python-first
RouterAPI - Rust core using Tokio, Axum, Serde, and Reqwest
- MCP
server/discover,tools/list, andtools/call - Local Python tools and mounted upstream MCP servers
- Sync and async Python callbacks
- Concurrent upstream discovery
- Shared HTTP connection pool
- Retry with exponential backoff and jitter
- Circuit breaker
- Tool-list caching with TTL and cache scope
- Graceful HTTP lifecycle: start, stop, status, restart
- Optional bearer authentication
- Request-size and content-type validation
- Upstream URL validation and private-network policy
- Configurable upstream timeout
- Global, per-upstream, and Python callback backpressure
- Request IDs and structured request logging
- Runtime, cache, and upstream metrics
- Prometheus metrics export
- Cross-platform CI and automated PyPI release workflow
Enterprise layer
- Multi-tenancy with per-tenant API keys, quotas, and tool ACLs
- Billing and usage tracking with configurable pricing models
- Request idempotency (SQLite-backed, 24-hour result TTL)
- Dead-letter queue with exponential-backoff replay
- Secrets management (Kubernetes, HashiCorp Vault, AWS Secrets Manager, env)
- Webhook notifications for gateway events
- Distributed state (Redis or in-memory)
- W3C-compatible distributed tracing context propagation
Installation
pip install kurd
Python 3.10 or newer is required.
Quick Start
from kurd import Router
router = Router()
@router.tool()
async def add(a: int, b: int) -> int:
return a + b
Start the HTTP gateway:
from kurd._kurd import start_http_gateway
start_http_gateway("127.0.0.1:9200")
The MCP endpoint is:
http://127.0.0.1:9200/mcp
Health and operational status are exposed at:
GET /health
GET /status
GET /metrics
The /metrics endpoint exports Prometheus-format metrics for integration with monitoring systems (Datadog, Prometheus, New Relic, etc.).
Mount an Upstream MCP Server
from kurd import Router
router = Router()
router.mount("github", "http://127.0.0.1:9300")
An upstream tool named create_issue is exposed through Kurd as:
github.create_issue
Unmount or refresh the aggregated tool cache:
router.unmount("github")
router.refresh_tools()
Runtime Hardening
Kurd provides explicit concurrency controls:
router.configure_runtime(
global_concurrency=512,
upstream_concurrency=64,
python_concurrency=64,
request_logging=False,
)
Inspect runtime state:
print(router.runtime_status())
The HTTP /status endpoint also reports runtime, cache, security, upstream latency, retry, and circuit-breaker metrics.
Security
Kurd provides a production security baseline:
- maximum MCP request body size (1 MiB)
- JSON content-type validation
- optional bearer-token authentication with constant-time comparison
- upstream URL validation (scheme, credentials, fragment)
- configurable private/loopback upstream policy
- configurable upstream request timeout
- sanitized upstream transport errors
- overload rejection through explicit backpressure
- per-IP and global rate limiting
For deployments exposed beyond localhost, use TLS at the reverse proxy or ingress layer and apply your normal network-level authentication and authorization controls.
Observability & Monitoring
Prometheus Metrics Export
Kurd exports metrics in Prometheus format at the /metrics endpoint:
curl http://127.0.0.1:9200/metrics
Available metrics:
kurd_requests_total- Total HTTP requests (total, completed, rejected)kurd_requests_active- Currently active requestskurd_requests_peak_active- Peak concurrent requestskurd_request_latency_ms- Average request latencykurd_python_active_calls- Active Python tool callskurd_python_rejections_total- Python tool call rejectionskurd_upstream_requests_total- Requests to upstream servers (per upstream)kurd_upstream_successes_total- Successful upstream callskurd_upstream_failures_total- Failed upstream callskurd_upstream_retries_total- Upstream call retrieskurd_upstream_latency_ms- Average upstream latencykurd_upstream_circuit_breaker_state- Circuit breaker state (0=closed, 1=open)kurd_cache_hits_total- Tool discovery cache hitskurd_cache_misses_total- Tool discovery cache misseskurd_cache_invalidations_total- Cache invalidationskurd_concurrency_limit- Configured concurrency limits
Integration example (Prometheus):
# prometheus.yml
scrape_configs:
- job_name: 'kurd'
static_configs:
- targets: ['127.0.0.1:9200']
metrics_path: '/metrics'
Integration example (Datadog):
# datadog.yaml
openmetrics_endpoint: http://127.0.0.1:9200/metrics
MCP 2026-07-28
Kurd implements the stateless 2026 MCP model used for routable gateway traffic:
- per-request protocol metadata
MCP-Protocol-VersionMcp-MethodMcp-Namefor tool callsserver/discover- deterministic
tools/list resultTypettlMscacheScope- server identity metadata
Kurd rejects mismatched modern MCP headers and unsupported protocol versions.
Enterprise Features
Multi-Tenancy
Isolate tools, quotas, and API keys per tenant:
from kurd.multitenancy import TenantManager
manager = TenantManager()
api_key = manager.add_tenant(
tenant_id="acme-corp",
name="Acme Corp",
quota_rps=100,
allowed_tools=["add", "multiply"],
)
Each tenant gets a unique API key. The manager enforces per-tenant RPS quotas and tool access control lists independently.
Billing & Usage Tracking
Track tool usage per tenant with configurable pricing:
from kurd.billing import BillingManager
billing = BillingManager()
billing.set_pricing({
"add": {"per_call": 0.001, "per_latency_ms": 0.0001},
})
billing.track_call(
tenant_id="acme-corp",
tool_name="add",
latency_ms=25.5,
success=True,
)
report = billing.get_usage_report("acme-corp", period="2026-08")
Supported billing models: per-request, per-latency, tiered, and hybrid.
Request Idempotency
Prevent duplicate tool executions using idempotency keys:
router.configure_runtime(enable_idempotency=True)
idempotency = router.get_idempotency()
is_duplicate, cached = idempotency.check_idempotent_key(
idempotency_key="req-abc-123",
tenant_id="acme-corp",
)
if is_duplicate:
return cached
result = process_request()
idempotency.store_result("req-abc-123", "acme-corp", result)
Results are stored in SQLite with a 24-hour TTL by default.
Dead-Letter Queue
Capture failed requests for later replay:
router.configure_runtime(enable_dlq=True, dlq_storage_path="/data/kurd/dlq")
dlq = router.get_dlq()
dlq.add_message(
request_id="req-123",
tenant_id="acme-corp",
tool_name="add",
arguments={"a": 1, "b": 2},
error="Timeout after 30s",
)
dlq.register_replay_handler("add", add_handler)
success, error = dlq.replay_message("dlq_abc123")
pending = dlq.get_pending_replays()
stats = dlq.get_statistics(tenant_id="acme-corp")
Replay uses exponential backoff (up to 1 hour) and a configurable maximum retry count. Archived messages are cleaned up via cleanup_archived(days=30).
Secrets Management
Retrieve secrets from Kubernetes, HashiCorp Vault, AWS Secrets Manager, or environment variables:
from kurd.secrets_management import SecretsManager
# Kubernetes (in-cluster)
manager = SecretsManager(backend="kubernetes")
# HashiCorp Vault
manager = SecretsManager(
backend="vault",
vault_addr="https://vault.example.com",
vault_token="s.xxxxx",
)
# AWS Secrets Manager
manager = SecretsManager(backend="aws", aws_region="us-east-1")
# Environment variables (default)
manager = SecretsManager(backend="env")
secret = manager.get_secret("db_password")
Secrets are cached locally until clear_cache() is called. Required third-party packages (kubernetes, hvac, boto3) are only imported when the corresponding backend is activated.
Webhooks
Receive event-driven notifications for gateway events:
router.configure_runtime(enable_webhooks=True)
webhooks = router.get_webhooks()
webhooks.register_webhook(
url="https://example.com/hooks",
events=["error", "dlq_replay_failed", "rate_limit_exceeded"],
tenant_id="acme-corp",
)
webhooks.trigger_event(
event_type="error",
tenant_id="acme-corp",
data={"tool": "add", "error": "timeout"},
)
Supported events: error, dlq_message_added, dlq_replay_success, dlq_replay_failed, rate_limit_exceeded, health_check_failed, request_timeout, authorization_failed, idempotent_duplicate.
Deliveries are signed with HMAC-SHA256 and stored for audit via get_deliveries().
Distributed State
Share state across multiple Kurd instances using Redis or in-memory storage:
router.configure_runtime(
enable_distributed_state=True,
distributed_state_backend="redis",
redis_url="redis://localhost:6379/0",
)
state = router.get_distributed_state()
state.set("gateway:config:version", 42)
version = state.get("gateway:config:version")
state.increment("counters:acme-corp:calls")
state.append_to_list("events:acme-corp", {"type": "tool_call"})
Use the memory backend for local development or single-instance deployments.
Distributed Tracing
Propagate W3C Trace Context across services:
from kurd.distributed_tracing import extract_context, inject_context
trace = extract_context(incoming_headers)
span = trace.create_span("tool_execution", {"tool": "add"})
span.set_attribute("result", 42)
span.end()
upstream_headers = inject_context(trace)
Tracing context is accessible from router.get_tracing_context() and is included in runtime_status() output when enabled.
Performance
The repository includes end-to-end HTTP load tests in tests/test_load.py.
Example measurements from a Windows development machine:
| Scenario | Concurrency | Throughput | p50 | p95 | p99 | Errors |
|---|---|---|---|---|---|---|
| Local Python tool | 10 | 594.5 req/s | 14.94 ms | 23.88 ms | 28.66 ms | 0% |
| Local Python tool | 50 | 587.9 req/s | 33.29 ms | 87.83 ms | 119.09 ms | 0% |
| Local Python tool | 100 | 556.0 req/s | 18.27 ms | 29.52 ms | 32.43 ms | 0% |
| Upstream tool | 10 | 412.2 req/s | 21.77 ms | 36.35 ms | 42.74 ms | 0% |
| Upstream tool | 50 | 229.8 req/s | 20.61 ms | 534.61 ms | 549.25 ms | 0% |
| Upstream tool | 100 | 293.6 req/s | 30.12 ms | 531.40 ms | 535.40 ms | 0% |
| Local sustained burst | 100 | 573.3 req/s | 73.51 ms | 179.13 ms | 218.49 ms | 0% |
These are local measurements, not universal performance guarantees. Hardware, operating system, Python version, payload shape, upstream implementation, and network conditions affect results.
Run the benchmark suite with:
python -m pytest tests/test_load.py -q -s
Development
Create and activate a virtual environment, then install the development tools:
python -m pip install --upgrade pip
python -m pip install maturin pytest
Build the native extension:
maturin develop --release
Run the full test suite:
python -m pytest -q
Build release artifacts:
maturin build --release
Architecture
Python application
|
v
Kurd Router
(Python API layer)
|
+-- Enterprise modules (optional)
| multitenancy, billing, idempotency,
| DLQ, secrets, webhooks,
| distributed state, tracing
|
v
PyO3 boundary
|
v
Rust MCP gateway
| |
| +--> Local Python tools
|
+-------------> Upstream MCP servers
Rust owns the HTTP server, MCP validation, routing, caching, retries, circuit breaking, backpressure, rate limiting, and operational metrics. Python provides the developer-facing registration, configuration, and enterprise-feature APIs.
Testing
The current suite covers:
- JSON-RPC parsing and dispatch
- local sync and async tools
- upstream discovery and calls
- concurrent upstream discovery
- cache behavior and invalidation
- mount and unmount
- MCP 2026 request headers and protocol-version checks
- HTTP lifecycle and graceful shutdown
- request-size and content-type security
- bearer authentication
- upstream URL policy
- timeout configuration
- error sanitization
- global and Python callback backpressure
- request ID propagation
- runtime observability
- Prometheus metrics export
- load and burst behavior
Compatibility
CI targets Windows, Linux, and macOS. Release wheels are built through Maturin.
The project is primarily developed with Python 3.12 and stable Rust; package metadata supports Python 3.10+.
Release Policy
Kurd uses semantic versioning while the public API stabilizes.
- patch releases: bug fixes and packaging corrections
- minor releases: new gateway or MCP capabilities
1.0.0: stable public API commitment
Project Structure
kurd/
├── kurd/
│ ├── __init__.py
│ ├── router.py
│ ├── multitenancy.py
│ ├── billing.py
│ ├── idempotency.py
│ ├── dead_letter_queue.py
│ ├── secrets_management.py
│ ├── webhooks.py
│ ├── distributed_state.py
│ ├── distributed_tracing.py
│ ├── api_key_management.py
│ ├── audit_logging.py
│ ├── authorization.py
│ ├── error_recovery.py
│ ├── graceful_shutdown.py
│ ├── health_checks.py
│ ├── persistence.py
│ ├── request_response_logging.py
│ ├── request_validation.py
│ ├── resource_limits.py
│ ├── telemetry.py
│ └── tls_management.py
├── src/
│ └── lib.rs
├── tests/
│ ├── test_core.py
│ ├── test_upstream.py
│ ├── test_load.py
│ ├── test_prometheus_metrics.py
│ └── upstream_server.py
├── Cargo.toml
├── pyproject.toml
├── README.md
└── LICENSE
Contributing
Issues and technical discussions are welcome through the GitHub issue tracker.
Before submitting a change:
cargo check
maturin develop --release
python -m pytest -q
License
MIT.
Name
The name Kurd honors Kurdish identity and heritage.
Bezhi Kurd u Kurdistan.
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 kurd-0.5.0.tar.gz.
File metadata
- Download URL: kurd-0.5.0.tar.gz
- Upload date:
- Size: 107.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1cf1358f0e6f15b89a77d6cb9f89181f6dccb8eb7a69cd517ee9a9586a00d75
|
|
| MD5 |
ec1bded08d0a79da554c90816054a465
|
|
| BLAKE2b-256 |
12614f54ca6876fa7a81153ced3fd218afa24197bc3f2c730ceda9fd38fffcc4
|
Provenance
The following attestation bundles were made for kurd-0.5.0.tar.gz:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0.tar.gz -
Subject digest:
e1cf1358f0e6f15b89a77d6cb9f89181f6dccb8eb7a69cd517ee9a9586a00d75 - Sigstore transparency entry: 2568310197
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: kurd-0.5.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 2.1 MB
- 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 |
10f28cdd5d47e3077050002b7f902099a8c21cd7d03856b635c7d3956f60c19f
|
|
| MD5 |
c8c2e4bd6003414eae71c4d9144101ff
|
|
| BLAKE2b-256 |
77bc3621de9535d9a7d57d74c47c5771e3531ff1cf3a37dc22bc159588ef28d6
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp313-cp313-win_amd64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp313-cp313-win_amd64.whl -
Subject digest:
10f28cdd5d47e3077050002b7f902099a8c21cd7d03856b635c7d3956f60c19f - Sigstore transparency entry: 2568310228
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.13, 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 |
838da51281aa3cc9ba6bde79d18599868e7d8f98eb6010ae25b752fe18a4ae99
|
|
| MD5 |
8013ba2020c9465d0752673d3463fc08
|
|
| BLAKE2b-256 |
5a9066b0361a3156adc147671ae6b4cad7f4dee911a572996411b79d1729e82d
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl -
Subject digest:
838da51281aa3cc9ba6bde79d18599868e7d8f98eb6010ae25b752fe18a4ae99 - Sigstore transparency entry: 2568310200
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: kurd-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- 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 |
8c19b27a7bfbba6ff367358ed46748d4270fe9429c765d4166d674d54e75cdac
|
|
| MD5 |
833f7be33c9a132125784e26f525c39a
|
|
| BLAKE2b-256 |
62bdc2d694b25e78d45a6fabc8b8ca26d5b79e7768a2c949f0a19061ed48723e
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
8c19b27a7bfbba6ff367358ed46748d4270fe9429c765d4166d674d54e75cdac - Sigstore transparency entry: 2568310232
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: kurd-0.5.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 2.1 MB
- 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 |
6ec5f626a779143d28d4d17be5afbdbeacdd84aebebc65305cdc07273d202229
|
|
| MD5 |
0bb2791b0132c89f4f512ebd8567d01a
|
|
| BLAKE2b-256 |
c5c1a728ea87465cae4377cc8d86ce8e2a9a73d4f4555329fb0800d0c1250136
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp312-cp312-win_amd64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp312-cp312-win_amd64.whl -
Subject digest:
6ec5f626a779143d28d4d17be5afbdbeacdd84aebebc65305cdc07273d202229 - Sigstore transparency entry: 2568310214
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.12, 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 |
1310bdbaa89b3f81048ab7a3ab60f5c8d5a2b6d2b34b8484f8070dd52801fe8b
|
|
| MD5 |
cdd04bb7fa774635eb7a95027d47f2b1
|
|
| BLAKE2b-256 |
f2215d4a63c4a385161998bf077653ffc4692199960a3949e8cad361790a4611
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl -
Subject digest:
1310bdbaa89b3f81048ab7a3ab60f5c8d5a2b6d2b34b8484f8070dd52801fe8b - Sigstore transparency entry: 2568310205
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: kurd-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- 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 |
40228b4e7aaf04b9dabcfa2a4275c8dc717dc611bd9cf78d74c0ec03f3c314b5
|
|
| MD5 |
f7074d28738dc09e27d7f7145cd8b9a8
|
|
| BLAKE2b-256 |
7cb2a569b49c128040ed1b400126d1d399a4fe985134422a1e9b826743c4d7d0
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
40228b4e7aaf04b9dabcfa2a4275c8dc717dc611bd9cf78d74c0ec03f3c314b5 - Sigstore transparency entry: 2568310213
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: kurd-0.5.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 2.1 MB
- 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 |
f0338fb8aa1f425eda969d77532f3b7db13ee5552a30cef22069bb8a2ed1eace
|
|
| MD5 |
92bfb44061e315f74f97c36227ef8410
|
|
| BLAKE2b-256 |
2d38ea81719e7b663692beaa9d3ac34a268240b24a43e7ce1dcaeb9d50731641
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp311-cp311-win_amd64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp311-cp311-win_amd64.whl -
Subject digest:
f0338fb8aa1f425eda969d77532f3b7db13ee5552a30cef22069bb8a2ed1eace - Sigstore transparency entry: 2568310218
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.11, 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 |
023c9a3ba5984dab586975a912ce52721e0169292df1826baf3eacdbb270e1c5
|
|
| MD5 |
17b3c8d28347ebd0cd5bd9d3eebd1ee1
|
|
| BLAKE2b-256 |
0f4d3ed667559b760b2481cc87480cd3dfada550236005c35bfd1ed0e3e5acc9
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl -
Subject digest:
023c9a3ba5984dab586975a912ce52721e0169292df1826baf3eacdbb270e1c5 - Sigstore transparency entry: 2568310208
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: kurd-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- 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 |
8d557d1bcfe72ffb754748a4d706c97258c93eac49e7962e2b150b54da26f1a9
|
|
| MD5 |
d1d78859fb70959384acb98c3c81f665
|
|
| BLAKE2b-256 |
149820c8222b75660186bda2f3c42ab626aced00f9858853f5b75ee7ee0f0ab4
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
8d557d1bcfe72ffb754748a4d706c97258c93eac49e7962e2b150b54da26f1a9 - Sigstore transparency entry: 2568310202
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: kurd-0.5.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
169fccea8de544aaef50c4f3d29407b786e063f4cdd5ebb5c24b61156bafc6b8
|
|
| MD5 |
e92c77ab1ef214220e02c22b02297a72
|
|
| BLAKE2b-256 |
7f48778a5a41b4efe676f3ea60af4fd16049d37c44d8824d74d1e6b3911d71dc
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp310-cp310-win_amd64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp310-cp310-win_amd64.whl -
Subject digest:
169fccea8de544aaef50c4f3d29407b786e063f4cdd5ebb5c24b61156bafc6b8 - Sigstore transparency entry: 2568310224
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.10, 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 |
591bcd266cf5969dda64f742578407f55e2d8e68ee60df9a5b0f9f2835472f43
|
|
| MD5 |
bf66925171f2f612c266bf105a1efe13
|
|
| BLAKE2b-256 |
a32b954bbc39cf765128061d9f0e999446d4fa78e8fe9405d9efb7a86219f1ee
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl -
Subject digest:
591bcd266cf5969dda64f742578407f55e2d8e68ee60df9a5b0f9f2835472f43 - Sigstore transparency entry: 2568310229
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type:
File details
Details for the file kurd-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: kurd-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.10, 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 |
3936de2385b9f027a31d7bf8d3c4a62738954f53911affbe07d47210e38e79fd
|
|
| MD5 |
0fe4691631481728cabdafccac256835
|
|
| BLAKE2b-256 |
22bc9450c48767b85d562b9036d12e3281415705fbda6d3105e2ef65b927784c
|
Provenance
The following attestation bundles were made for kurd-0.5.0-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
release.yml on sn391/kurd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurd-0.5.0-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
3936de2385b9f027a31d7bf8d3c4a62738954f53911affbe07d47210e38e79fd - Sigstore transparency entry: 2568310212
- Sigstore integration time:
-
Permalink:
sn391/kurd@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/sn391
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e017ade4a478859e3c42e17958a85cefe34a4b9d -
Trigger Event:
push
-
Statement type: