Skip to main content

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 Router API
  • Rust core using Tokio, Axum, Serde, and Reqwest
  • MCP server/discover, tools/list, and tools/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 requests
  • kurd_requests_peak_active - Peak concurrent requests
  • kurd_request_latency_ms - Average request latency
  • kurd_python_active_calls - Active Python tool calls
  • kurd_python_rejections_total - Python tool call rejections
  • kurd_upstream_requests_total - Requests to upstream servers (per upstream)
  • kurd_upstream_successes_total - Successful upstream calls
  • kurd_upstream_failures_total - Failed upstream calls
  • kurd_upstream_retries_total - Upstream call retries
  • kurd_upstream_latency_ms - Average upstream latency
  • kurd_upstream_circuit_breaker_state - Circuit breaker state (0=closed, 1=open)
  • kurd_cache_hits_total - Tool discovery cache hits
  • kurd_cache_misses_total - Tool discovery cache misses
  • kurd_cache_invalidations_total - Cache invalidations
  • kurd_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-Version
  • Mcp-Method
  • Mcp-Name for tool calls
  • server/discover
  • deterministic tools/list
  • resultType
  • ttlMs
  • cacheScope
  • 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

kurd-0.5.0.tar.gz (107.3 kB view details)

Uploaded Source

Built Distributions

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

kurd-0.5.0-cp313-cp313-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.13Windows x86-64

kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

kurd-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

kurd-0.5.0-cp312-cp312-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.12Windows x86-64

kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

kurd-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

kurd-0.5.0-cp311-cp311-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.11Windows x86-64

kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

kurd-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

kurd-0.5.0-cp310-cp310-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.10Windows x86-64

kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

kurd-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Hashes for kurd-0.5.0.tar.gz
Algorithm Hash digest
SHA256 e1cf1358f0e6f15b89a77d6cb9f89181f6dccb8eb7a69cd517ee9a9586a00d75
MD5 ec1bded08d0a79da554c90816054a465
BLAKE2b-256 12614f54ca6876fa7a81153ced3fd218afa24197bc3f2c730ceda9fd38fffcc4

See more details on using hashes here.

Provenance

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

Publisher: release.yml on sn391/kurd

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

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

Hashes for kurd-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 10f28cdd5d47e3077050002b7f902099a8c21cd7d03856b635c7d3956f60c19f
MD5 c8c2e4bd6003414eae71c4d9144101ff
BLAKE2b-256 77bc3621de9535d9a7d57d74c47c5771e3531ff1cf3a37dc22bc159588ef28d6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on sn391/kurd

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

File details

Details for the file kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kurd-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 838da51281aa3cc9ba6bde79d18599868e7d8f98eb6010ae25b752fe18a4ae99
MD5 8013ba2020c9465d0752673d3463fc08
BLAKE2b-256 5a9066b0361a3156adc147671ae6b4cad7f4dee911a572996411b79d1729e82d

See more details on using hashes here.

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

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

File details

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

File metadata

File hashes

Hashes for kurd-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c19b27a7bfbba6ff367358ed46748d4270fe9429c765d4166d674d54e75cdac
MD5 833f7be33c9a132125784e26f525c39a
BLAKE2b-256 62bdc2d694b25e78d45a6fabc8b8ca26d5b79e7768a2c949f0a19061ed48723e

See more details on using hashes here.

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

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

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

Hashes for kurd-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6ec5f626a779143d28d4d17be5afbdbeacdd84aebebc65305cdc07273d202229
MD5 0bb2791b0132c89f4f512ebd8567d01a
BLAKE2b-256 c5c1a728ea87465cae4377cc8d86ce8e2a9a73d4f4555329fb0800d0c1250136

See more details on using hashes here.

Provenance

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

Publisher: release.yml on sn391/kurd

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

File details

Details for the file kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kurd-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1310bdbaa89b3f81048ab7a3ab60f5c8d5a2b6d2b34b8484f8070dd52801fe8b
MD5 cdd04bb7fa774635eb7a95027d47f2b1
BLAKE2b-256 f2215d4a63c4a385161998bf077653ffc4692199960a3949e8cad361790a4611

See more details on using hashes here.

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

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

File details

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

File metadata

File hashes

Hashes for kurd-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40228b4e7aaf04b9dabcfa2a4275c8dc717dc611bd9cf78d74c0ec03f3c314b5
MD5 f7074d28738dc09e27d7f7145cd8b9a8
BLAKE2b-256 7cb2a569b49c128040ed1b400126d1d399a4fe985134422a1e9b826743c4d7d0

See more details on using hashes here.

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

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

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

Hashes for kurd-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f0338fb8aa1f425eda969d77532f3b7db13ee5552a30cef22069bb8a2ed1eace
MD5 92bfb44061e315f74f97c36227ef8410
BLAKE2b-256 2d38ea81719e7b663692beaa9d3ac34a268240b24a43e7ce1dcaeb9d50731641

See more details on using hashes here.

Provenance

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

Publisher: release.yml on sn391/kurd

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

File details

Details for the file kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kurd-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 023c9a3ba5984dab586975a912ce52721e0169292df1826baf3eacdbb270e1c5
MD5 17b3c8d28347ebd0cd5bd9d3eebd1ee1
BLAKE2b-256 0f4d3ed667559b760b2481cc87480cd3dfada550236005c35bfd1ed0e3e5acc9

See more details on using hashes here.

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

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

File details

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

File metadata

File hashes

Hashes for kurd-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d557d1bcfe72ffb754748a4d706c97258c93eac49e7962e2b150b54da26f1a9
MD5 d1d78859fb70959384acb98c3c81f665
BLAKE2b-256 149820c8222b75660186bda2f3c42ab626aced00f9858853f5b75ee7ee0f0ab4

See more details on using hashes here.

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

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

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

Hashes for kurd-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 169fccea8de544aaef50c4f3d29407b786e063f4cdd5ebb5c24b61156bafc6b8
MD5 e92c77ab1ef214220e02c22b02297a72
BLAKE2b-256 7f48778a5a41b4efe676f3ea60af4fd16049d37c44d8824d74d1e6b3911d71dc

See more details on using hashes here.

Provenance

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

Publisher: release.yml on sn391/kurd

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

File details

Details for the file kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kurd-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 591bcd266cf5969dda64f742578407f55e2d8e68ee60df9a5b0f9f2835472f43
MD5 bf66925171f2f612c266bf105a1efe13
BLAKE2b-256 a32b954bbc39cf765128061d9f0e999446d4fa78e8fe9405d9efb7a86219f1ee

See more details on using hashes here.

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

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

File details

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

File metadata

File hashes

Hashes for kurd-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3936de2385b9f027a31d7bf8d3c4a62738954f53911affbe07d47210e38e79fd
MD5 0fe4691631481728cabdafccac256835
BLAKE2b-256 22bc9450c48767b85d562b9036d12e3281415705fbda6d3105e2ef65b927784c

See more details on using hashes here.

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

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

Release history Release notifications | RSS feed

0.7.0

13 files

0.6.0

13 files

This release

0.5.0 This release

13 files

0.4.0

4 files

0.3.0

4 files

0.2.0

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page