Skip to main content

BlastDNS

License: GPL v3 Rust 2024 Crates.io Python 3.9+ PyPI version Rust Tests Python Tests

BlastDNS is an ultra-fast DNS resolver written in Rust. Like massdns, it's designed to be faster the more resolvers you give it. Features include built-in caching, and high accuracy even with unreliable DNS servers. For details, see Architecture. BlastDNS is the main DNS library used by BBOT.

There are three ways to use it:

Benchmark

100K DNS lookups against local dnsmasq, with 100 workers:

This is one regime: a single resolver, no loss, no latency, which is the case that most favors raw dispatch and resembles no real workload. scripts/benchmark.py now reports several regimes — a resolver pool, injected loss, injected latency, and both socket transports — alongside delivery, retry amplification, completion percentiles, and socket plus connection-tracking peaks. Absolute rates here move over 30% between runs on shared CI hardware, so the ratio column is the durable figure.

Library Language Time QPS Success Failed vs dnspython
massdns C 1.370s 72,998 100,000 0 28.63x
blastdns-cli Rust 1.654s 60,470 100,000 0 23.72x
blastdns-python Python 2.485s 40,249 100,000 0 15.79x
dnspython Python 39.223s 2,550 100,000 0 1.00x

CLI

The CLI mass-resolves hosts using a specified list of resolvers. It outputs to JSON.

# send all results to jq
$ blastdns hosts.txt --rdtype A --resolvers resolvers.txt | jq

# print only the raw IPv4 addresses
$ blastdns hosts.txt --rdtype A --resolvers resolvers.txt | jq '.response.answers[].rdata.A'

# load from stdin
$ cat hosts.txt | blastdns --rdtype A --resolvers resolvers.txt

# skip empty responses (e.g., NXDOMAIN with no answers)
$ blastdns hosts.txt --rdtype A --resolvers resolvers.txt --skip-empty | jq

# skip error responses (e.g., timeouts, connection failures)
$ blastdns hosts.txt --rdtype A --resolvers resolvers.txt --skip-errors | jq

CLI Help

BlastDNS - Ultra-fast DNS Resolver written in Rust

Usage: blastdns [OPTIONS] --resolvers <FILE> [HOSTS_TO_RESOLVE]

Arguments:
  [HOSTS_TO_RESOLVE]  File containing hostnames to resolve (one per line). Reads from stdin if not specified

Options:
      --rdtype <RECORD_TYPE>
          Record type to query (A, AAAA, MX, ...) [default: A]
      --resolvers <FILE>
          File containing DNS nameservers (one per line)
      --max-inflight-per-resolver <MAX_INFLIGHT_PER_RESOLVER>
          Maximum queries in flight to any single resolver [default: 2]
      --max-concurrency <MAX_CONCURRENCY>
          Maximum queries in flight across all resolvers [default: 256]
      --rate-limit <RATE_LIMIT>
          Ceiling on dispatch rate in queries per second (0 = unlimited) [default: 0]
      --resolver-probe
          Drop resolvers that don't answer a probe query at startup
      --no-adaptive
          Disable automatic backoff when resolvers start losing queries
      --persistent-socket
          Keep one long-lived socket per resolver instead of binding one per query
      --timeout-ms <TIMEOUT_MS>
          Per-request timeout in milliseconds [default: 1000]
      --retries <RETRIES>
          Retry attempts after a resolver failure [default: 10]
      --purgatory-threshold <PURGATORY_THRESHOLD>
          Consecutive errors before a worker is put into timeout [default: 10]
      --purgatory-sentence-ms <PURGATORY_SENTENCE_MS>
          How many milliseconds a worker stays in timeout [default: 1000]
      --skip-empty
          Don't show responses with no answers
      --skip-errors
          Don't show error responses
      --brief
          Output brief format (hostname, record type, answers only)
      --cache-capacity <CACHE_CAPACITY>
          DNS cache capacity (0 = disabled) [default: 10000]
  -h, --help
          Print help
  -V, --version
          Print version

Example JSON output

BlastDNS outputs to JSON by default:

{
  "host": "microsoft.com",
  "response": {
    "additionals": [],
    "answers": [
      {
        "dns_class": "IN",
        "name_labels": "microsoft.com.",
        "rdata": {
          "A": "13.107.213.41"
        },
        "ttl": 1968
      },
      {
        "dns_class": "IN",
        "name_labels": "microsoft.com.",
        "rdata": {
          "A": "13.107.246.41"
        },
        "ttl": 1968
      }
    ],
    "edns": {
      "flags": {
        "dnssec_ok": false,
        "z": 0
      },
      "max_payload": 1232,
      "options": {
        "options": []
      },
      "rcode_high": 0,
      "version": 0
    },
    "header": {
      "additional_count": 1,
      "answer_count": 2,
      "authentic_data": false,
      "authoritative": false,
      "checking_disabled": false,
      "id": 62150,
      "message_type": "Response",
      "name_server_count": 0,
      "op_code": "Query",
      "query_count": 1,
      "recursion_available": true,
      "recursion_desired": true,
      "response_code": "NoError",
      "truncation": false
    },
    "name_servers": [],
    "queries": [
      {
        "name": "microsoft.com.",
        "query_class": "IN",
        "query_type": "A"
      }
    ],
    "signature": []
  }
}

Debug Logging

BlastDNS uses the standard Rust tracing ecosystem. Enable debug logging by setting the RUST_LOG environment variable:

# Show debug logs from blastdns only
RUST_LOG=blastdns=debug blastdns hosts.txt --rdtype A --resolvers resolvers.txt

# Show debug logs from everything
RUST_LOG=debug blastdns hosts.txt --rdtype A --resolvers resolvers.txt

# Show trace-level logs for detailed internal behavior
RUST_LOG=blastdns=trace blastdns hosts.txt --rdtype A --resolvers resolvers.txt

Valid log levels (from least to most verbose): error, warn, info, debug, trace

Rust API

Installation

# Install CLI tool
cargo install blastdns

# Add library to your project
cargo add blastdns

Usage

BlastDNS can either use system resolvers (detected automatically from OS configuration) or custom resolvers:

use blastdns::{BlastDNSClient, BlastDNSConfig};
use futures::StreamExt;
use hickory_client::proto::rr::RecordType;
use std::time::Duration;

// Option 1: Use system DNS resolvers (default)
let client = BlastDNSClient::new(vec![]).await?;

// Check what resolvers are being used
println!("Using resolvers: {:?}", client.resolvers());

// Option 2: Read DNS resolvers from a file (one per line -> vector of strings)
let resolvers = std::fs::read_to_string("resolvers.txt")
    .expect("Failed to read resolvers file")
    .lines()
    .map(str::to_string)
    .collect::<Vec<String>>();

// create a new blastdns client with default config
let client = BlastDNSClient::new(resolvers).await?;

// or with custom config
let mut config = BlastDNSConfig::default();
config.max_concurrency = 512;             // total queries in flight
config.max_inflight_per_resolver = 4;     // per-resolver politeness bound
config.request_timeout = Duration::from_secs(2);
let client = BlastDNSClient::with_config(resolvers, config).await?;

// resolve: lookup a domain, returns only the rdata strings
let answers = client.resolve("example.com", RecordType::A).await?;
for answer in answers {
    println!("{}", answer);  // e.g., "93.184.216.34"
}

// resolve_full: lookup a domain, returns the full DNS response
let result = client.resolve_full("example.com", RecordType::A).await?;
println!("{}", serde_json::to_string_pretty(&result).unwrap());

// resolve_batch: process many hosts in parallel, returns simplified output
// streams back (host, record_type, Vec<rdata>) tuples as they complete
// automatically filters out errors and empty responses
let wordlist = ["one.example", "two.example", "three.example"];
let mut stream = client.resolve_batch(
    wordlist.into_iter().map(Ok::<_, std::convert::Infallible>),
    RecordType::A,
);
while let Some((host, record_type, answers)) = stream.next().await {
    println!("{} ({}):", host, record_type);
    for answer in answers {
        println!("  {}", answer);  // e.g., "93.184.216.34" for A records
    }
}

// resolve_batch_full: process many hosts with full DNS response structures
// streams back (host, Result<response>) tuples with configurable filtering
let wordlist = ["one.example", "two.example", "three.example"];
let mut stream = client.resolve_batch_full(
    wordlist.into_iter().map(Ok::<_, std::convert::Infallible>),
    RecordType::A,
    false,  // skip_empty: don't filter out empty responses
    false,  // skip_errors: don't filter out errors
);
while let Some((host, outcome)) = stream.next().await {
    match outcome {
        Ok(response) => println!("{}: {} answers", host, response.answers().len()),
        Err(err) => eprintln!("{} failed: {err}", host),
    }
}

// resolve_multi: resolve multiple record types for a single host
// returns only successful results with answers as dict[record_type, Vec<rdata>]
let record_types = vec![RecordType::A, RecordType::AAAA, RecordType::MX];
let results = client.resolve_multi("example.com", record_types).await?;
for (record_type, answers) in results {
    println!("{}: {} answers", record_type, answers.len());
    for answer in answers {
        println!("  {}", answer);
    }
}

// resolve_multi_full: resolve multiple record types with full responses
// returns all results (success and failure) as dict[record_type, Result<response>]
let record_types = vec![RecordType::A, RecordType::AAAA, RecordType::MX];
let results = client.resolve_multi_full("example.com", record_types).await?;
for (record_type, result) in results {
    match result {
        Ok(response) => println!("{}: {} answers", record_type, response.answers().len()),
        Err(err) => eprintln!("{} failed: {err}", record_type),
    }
}

System Resolvers

You can retrieve the system's configured DNS resolvers programmatically:

use blastdns::get_system_resolvers;

// Get system resolver IPs (works on Unix, Windows, macOS, Android)
let resolver_ips = get_system_resolvers()?;
for ip in resolver_ips {
    println!("System resolver: {}", ip);
}

MockBlastDNSClient for Testing

MockBlastDNSClient implements the DnsResolver trait and provides a drop-in replacement that returns fabricated DNS responses without making real network requests.

use blastdns::{MockBlastDNSClient, DnsResolver};
use hickory_client::proto::rr::RecordType;
use std::collections::HashMap;

// Create a mock client
let mut mock_client = MockBlastDNSClient::new();

// Configure mock responses
let responses = HashMap::from([
    (
        "example.com".to_string(),
        HashMap::from([
            ("A".to_string(), vec!["93.184.216.34".to_string()]),
            ("AAAA".to_string(), vec!["2606:2800:220:1:248:1893:25c8:1946".to_string()]),
        ]),
    ),
]);

// Hosts that should return NXDOMAIN
let nxdomains = vec!["notfound.example.com".to_string()];

mock_client.mock_dns(responses, nxdomains);

// Use like any DnsResolver
let answers = mock_client.resolve("example.com".to_string(), RecordType::A).await?;
assert_eq!(answers, vec!["93.184.216.34"]);

// NXDOMAIN hosts return empty responses
let answers = mock_client.resolve("notfound.example.com".to_string(), RecordType::A).await?;
assert_eq!(answers.len(), 0);

MockBlastDNSClient supports all DnsResolver methods including resolve, resolve_full, resolve_batch, resolve_batch_full, resolve_multi, and resolve_multi_full.

Python API

The blastdns Python package is a thin wrapper around the Rust library.

Installation

# Using pip
pip install blastdns

# Using uv
uv add blastdns

# Using poetry
poetry add blastdns

Development Setup

# install python dependencies
uv sync
# build and install the rust->python bindings
uv run maturin develop
# run tests
uv run pytest

Usage

To use it in Python, you can use the Client class:

import asyncio
from blastdns import Client, ClientConfig, DNSResult, DNSError, get_system_resolvers


async def main():
    # Option 1: Use system resolvers (pass empty list)
    client = Client([], ClientConfig(max_inflight_per_resolver=4, request_timeout_ms=1500))
    
    # Check what resolvers are being used
    print(f"Using resolvers: {client.resolvers}")
    
    # Option 2: Manually get system resolvers
    system_resolvers = get_system_resolvers()
    print(f"System resolvers: {system_resolvers}")
    
    # Option 3: Use custom resolvers
    resolvers = ["1.1.1.1:53", "8.8.8.8:53"]
    client = Client(resolvers, ClientConfig(max_inflight_per_resolver=4, request_timeout_ms=1500))

    # resolve: lookup a single host, returns only rdata strings
    answers = await client.resolve("example.com", "A")
    for answer in answers:
        print(f"  {answer}")  # e.g., "93.184.216.34"

    # resolve_full: lookup a single host, returns full DNS response as Pydantic model
    result = await client.resolve_full("example.com", "AAAA")
    print(f"Host: {result.host}")
    print(f"Response code: {result.response.header.response_code}")
    for answer in result.response.answers:
        print(f"  {answer.name_labels}: {answer.rdata}")

    # resolve_batch: simplified batch resolution with minimal output
    # returns only (host, record_type, list[rdata]) - no full DNS response structures
    # automatically filters out errors and empty responses
    hosts = ["example.com", "google.com", "github.com"]
    async for host, rdtype, answers in client.resolve_batch(hosts, "A"):
        print(f"{host} ({rdtype}):")
        for answer in answers:
            print(f"  {answer}")  # e.g., "93.184.216.34" for A records

    # resolve_batch_full: process many hosts in parallel with full responses
    # streams results back as they complete
    hosts = ["one.example.com", "two.example.com", "three.example.com"]
    async for host, result in client.resolve_batch_full(hosts, "A"):
        if isinstance(result, DNSError):
            print(f"{host} failed: {result.error}")
        else:
            print(f"{host}: {len(result.response.answers)} answers")

    # resolve_multi: resolve multiple record types for a single host in parallel
    # returns only successful results with answers
    record_types = ["A", "AAAA", "MX"]
    results = await client.resolve_multi("example.com", record_types)
    for record_type, answers in results.items():
        print(f"{record_type}: {answers}")

    # resolve_multi_full: resolve multiple record types with full response data
    record_types = ["A", "AAAA", "MX"]
    results = await client.resolve_multi_full("example.com", record_types)
    for record_type, result in results.items():
        if isinstance(result, DNSError):
            print(f"{record_type} failed: {result.error}")
        else:
            print(f"{record_type}: {len(result.response.answers)} answers")


asyncio.run(main())

Python API Methods

  • Client.resolvers (property): Get the list of resolver addresses being used by this client. Returns a list of strings (e.g., ["8.8.8.8:53", "1.1.1.1:53"]).

  • get_system_resolvers() -> list[str]: Get system DNS resolver IP addresses from OS configuration. Works on Unix, Windows, macOS, and Android. Returns a list of IP addresses without ports (e.g., ["8.8.8.8", "1.1.1.1"]). Useful for inspecting what resolvers the OS is configured to use.

  • Client.resolve(host, record_type=None) -> list[str]: Lookup a single hostname, returning only rdata strings. Defaults to A records. Returns a list of strings (e.g., ["93.184.216.34"] for A records). Perfect for simple use cases where you just need the record data without the full DNS response structure.

  • Client.resolve_full(host, record_type=None) -> DNSResult: Lookup a single hostname, returning the full DNS response. Defaults to A records. Returns a Pydantic DNSResult model with typed fields for easy access to headers, queries, answers, etc.

  • Client.resolve_batch(hosts, record_type=None): Simplified batch resolution that returns only the essential data. Takes an iterable of hostnames and streams back (host, record_type, answers) tuples where answers is a list of rdata strings (e.g., ["93.184.216.34"] for A records, ["10 aspmx.l.google.com."] for MX records). Automatically filters out errors and empty responses. Perfect for processing large lists of hosts efficiently.

  • Client.resolve_batch_full(hosts, record_type=None, skip_empty=False, skip_errors=False): Resolve many hosts in parallel with full DNS responses. Takes an iterable of hostnames and streams back (host, result) tuples as results complete. Each result is either a DNSResult or DNSError Pydantic model. Set skip_empty=True to filter out successful responses with no answers. Set skip_errors=True to filter out error responses.

  • Client.resolve_multi(host, record_types) -> dict[str, list[str]]: Resolve multiple record types for a single hostname in parallel, returning only successful results with answers. Takes a list of record type strings (e.g., ["A", "AAAA", "MX"]) and returns a dictionary mapping record types to lists of rdata strings. Only includes record types that resolved successfully and have answers.

  • Client.resolve_multi_full(host, record_types) -> dict[str, DNSResultOrError]: Resolve multiple record types for a single hostname in parallel, returning full DNS responses. Takes a list of record type strings and returns a dictionary keyed by record type. Each value is either a DNSResult (success) or DNSError (failure) Pydantic model. Includes all record types, even those that failed or had no answers.

MockClient for Testing

MockClient provides a drop-in replacement for Client that returns fabricated DNS responses without making real network requests. It implements the same interface as Client and is useful for testing code that depends on DNS lookups.

import pytest
from blastdns import MockClient, DNSResult


@pytest.fixture
def mock_client():
    """Create a mock client with pre-configured test data."""
    client = MockClient()
    client.mock_dns({
        "example.com": {
            "A": ["93.184.216.34"],
            "AAAA": ["2606:2800:220:1:248:1893:25c8:1946"],
            "MX": ["10 aspmx.l.google.com.", "20 alt1.aspmx.l.google.com."],
        },
        "cname.example.com": {
            "CNAME": ["example.com."]
        },
        "_NXDOMAIN": ["notfound.example.com"],  # hosts that return NXDOMAIN
    })
    return client


@pytest.mark.asyncio
async def test_my_function(mock_client):
    # resolve() returns simple rdata strings
    answers = await mock_client.resolve("example.com", "A")
    assert answers == ["93.184.216.34"]

    # resolve_full() returns full DNS response structure
    result = await mock_client.resolve_full("example.com", "A")
    assert isinstance(result, DNSResult)
    assert len(result.response.answers) == 1

    # NXDOMAIN hosts return empty responses (not errors)
    answers = await mock_client.resolve("notfound.example.com", "A")
    assert len(answers) == 0

    # resolve_batch() works with all mocked hosts
    async for host, rdtype, answers in mock_client.resolve_batch(["example.com"], "A"):
        print(f"{host}: {answers}")  # ["93.184.216.34"]

    # resolve_multi() resolves multiple record types in parallel
    results = await mock_client.resolve_multi("example.com", ["A", "AAAA", "MX"])
    assert len(results) == 3
    assert results["MX"] == ["10 aspmx.l.google.com.", "20 alt1.aspmx.l.google.com."]

Regex Patterns:

Hostnames prefixed with regex: are treated as regex patterns, enabling wildcard and dynamic matching:

client = MockClient()
client.mock_dns({
    # Exact match
    "specific.example.com": {"A": ["10.0.0.1"]},
    # Regex: match any subdomain of example.com
    "regex:.*\\.example\\.com": {"A": ["192.168.1.1"]},
    # Regex: match numbered servers
    "regex:^server-\\d+\\.test\\.com$": {"A": ["10.0.0.1"]},
    # Regex patterns work for NXDOMAIN too
    "_NXDOMAIN": ["regex:^bad-.*\\.example\\.com$"],
})

Exact matches take priority over regex patterns. When multiple regex patterns match, the first match wins.

Key Features:

  • Supports all Client methods: resolve, resolve_full, resolve_batch, resolve_batch_full, resolve_multi, resolve_multi_full
  • Returns the same data structures as Client for drop-in compatibility
  • NXDOMAIN hosts (specified in _NXDOMAIN list) return responses with NXDomain response code
  • Unmocked hosts return empty responses
  • Auto-formats PTR queries (IP addresses → reverse DNS format) just like the real client
  • regex: prefixed hostnames for wildcard/pattern matching

Exceptions

All errors raised by blastdns are subclasses of BlastDNSError:

BlastDNSError
├── ConfigurationError    # invalid resolver address, invalid hostname, bad config
│   └── NoResolversError  # no resolvers provided or detected
└── ResolverError         # resolver failed (timeout, connection failure, etc.)
from blastdns import Client, BlastDNSError, ConfigurationError, NoResolversError, ResolverError

# Catch broadly
try:
    client = Client(["not-an-ip"])
except BlastDNSError as e:
    print(f"blastdns error: {e}")

# Catch narrowly
try:
    client = Client(["not-an-ip"])
except ConfigurationError as e:
    print(f"bad config: {e}")

# Catch resolver failures during queries
try:
    result = await client.resolve_full("example.com", "A")
except ResolverError as e:
    print(f"resolver failed: {e}")

Response Models

The *_full() methods return Pydantic V2 models for type safety and IDE autocomplete:

  • DNSResult: Successful DNS response with host and response fields
  • DNSError: Failed DNS lookup with an error field
  • Response: DNS message with header, queries, answers, name_servers, etc.

The base methods (resolve, resolve_batch, resolve_multi) return simple Python types (lists, dicts, strings) for convenience when you don't need the full response structure.

ClientConfig exposes the knobs shown above (max_concurrency, max_inflight_per_resolver, rate_limit, adaptive, resolver_probe, persistent_socket, request_timeout_ms, max_retries, purgatory_threshold, purgatory_sentence_ms) and validates them before handing them to the Rust core. Unknown keys are rejected rather than ignored, so a stale or misspelled option fails loudly instead of silently taking a default.

Client.stats() returns a ResolverStats per resolver, with cumulative counters where attempted == answered + empty + timeout + error. Diff two snapshots to account for a batch in full, including queries that never came back:

before = {s.resolver: s.attempted for s in client.stats()}
async for host, rdtype, answers in client.resolve_batch(hosts, "A"):
    ...
for s in client.stats():
    sent = s.attempted - before[s.resolver]
    print(f"{s.resolver}: {sent} sent, {s.timeout} timed out, pacing={s.rate_qps or 'unlimited'}")

Architecture

BlastDNS is built on top of hickory-dns, but only makes use of the low-level Client API, not the Resolver API.

When a user calls BlastDNSClient::resolve, a new WorkItem is created which contains the request (host + rdtype) and a oneshot channel to hold the result. This WorkItem is put into a crossfire MPMC queue, to be picked up by the first available ResolverWorker. Workers are spawned lazily when the first request is made.

Workers are not bound to a resolver. BlastDNSConfig.max_concurrency (default: 256) sets how many workers exist and therefore how many queries are in flight overall, independently of how many resolvers are configured. Each worker picks a resolver per query, so adding resolvers increases the throughput available at a given politeness level rather than changing the concurrency limit.

Each query binds its own UDP socket by default, so file descriptor use tracks concurrency rather than the size of the resolver list. persistent_socket swaps that for one long-lived socket per resolver, shared by every worker that selects it; see Sockets for the tradeoff, which is mostly about connection-tracking state rather than descriptors.

Dispatch Limits

Three independent limits govern throughput. The tightest one binds.

  • max_concurrency: total queries in flight.
  • max_inflight_per_resolver (default: 2): the politeness bound. No resolver receives more than this at once, however large the pool or the workload. Because a busy resolver holds its permits until its query completes, resolver selection naturally sends less work to slow resolvers with no explicit weighting.
  • rate_limit: a ceiling on dispatch rate in queries per second. Unset means unlimited. Pacing is interval-based rather than token-bucketed, so there is no burst allowance and a resolver never sees a thundering herd on the first tick.

Sockets

By default a UDP socket is bound per query and closed when it completes, which randomizes the source port. That is worth having: an off-path attacker forging a response has to guess the port as well as the 16-bit query ID, which is the difference between 65 thousand guesses and four billion. Live sockets therefore track max_concurrency, not the size of the resolver list.

The cost is connection-tracking state. Every query is a fresh source port, so every query is a distinct flow to any NAT or stateful firewall in the path, and those entries outlive the socket by the kernel's UDP timeout — 30 seconds is typical. Connection-tracking state therefore grows with the query rate, not with concurrency. A sustained few thousand queries per second is enough to fill a home router's table and start dropping unrelated traffic.

persistent_socket trades that away. One socket per resolver is opened on first use and multiplexed by query ID, so flows are bounded by the size of the resolver list however long the run goes. On a single-domain brute-force this measured 114,342 connection-tracking entries per-query against roughly 5,800 persistent, at the same throughput. Two things to know before enabling it:

  • The source port is fixed per resolver for the life of the client, so spoofing entropy drops to the query ID alone. Reasonable when results are re-verified downstream; less so when a forged answer would be acted on directly.
  • One socket cannot carry more than 32 queries at once, which is the bound on a multiplexed client's request channel. Configuring max_inflight_per_resolver above that is refused rather than accepted, because exceeding it does not degrade gradually — it collapses.

Adaptive Backoff

With adaptive enabled (the default), BlastDNS does not need to be told how fast to go. It watches loss per resolver, and when a resolver starts dropping queries it records the rate at which that happened and holds below it. A configured rate_limit is a separate hard cap applied on top: adaptation happens either way, and the configured value only ever lowers the effective rate.

A discovered per-resolver limit expires after a while so the controller probes upward again, which keeps one transient blip from capping the rest of a long run. The global limit has no expiry and does not need one: it is re-judged on every batch of finished queries and climbs straight back on clean ones.

Backing off is only repeated while it is working. A resolver earns its first retreat as soon as it starts losing queries, and further ones only while the loss is actually falling. That distinction matters because not all loss is caused by the rate: a resolver that drops a fixed share of what it receives, or one behind a lossy link, loses just as much however slowly it is asked, and retreating on every tick would walk the rate to a standstill without recovering a single query. Two readings in a row that fail to improve hold the rate where it is instead.

Loss is measured over a window at least as long as request_timeout_ms, because a query only counts as lost once its timeout expires. A shorter window puts a dispatch and its eventual timeout in different windows, so lowering the rate would drop the denominator while the previous rate's losses were still arriving — which reads as more than 100% loss and, worse, reads as improvement on the way back down.

Loss on a single resolver throttles only that resolver. Cutting the global rate takes a different signal: queries that failed after exhausting every retry. Individual attempt failures do not count, because a large public resolver list refuses a few percent of attempts as a matter of course and a retry elsewhere answers them — treating that as congestion makes a healthy pool look permanently saturated and drives the rate to a standstill. Neither do queries that never reached the network: a hostname that does not parse fails identically at one query per second and at fifty thousand, so a wordlist's junk entries cannot pace a scan down. Retries are never abandoned, only paced; suppressing them under load was tried and measured, and it took unanswered queries from 0% to 3.5% on a 5,000-name brute-force to save load that was never shown to be a problem.

The global ratio is judged once enough queries have finished to trust it, over as many ticks as that takes. This matters because the signal feeds back on itself — the limit bounds throughput and throughput bounds the sample count — so a rate low enough that no single tick gathers a usable sample has to be judged over several ticks instead of not at all. The practical effect is that backing off gets more cautious the slower things already are, and a path that recovers is always seen to recover.

Client.stats() reports the current pacing rate per resolver, so a run that is going slowly can be explained rather than guessed at. Note the field is an instantaneous reading: a resolver that was throttled and has since recovered reports no rate, so it undercounts episodes rather than accumulating them.

Per-resolver judgement needs enough queries against that one resolver to trust the ratio, which only happens when a resolver is carrying real load. Spread a few hundred queries per second across thousands of resolvers and no single one is individually measurable, so at brute-force scale the politeness bound is max_inflight_per_resolver rather than the controller — each resolver is capped at roughly max_inflight_per_resolver / RTT regardless.

Optional Startup Probe

With resolver_probe enabled, each resolver is queried once at startup and those that do not answer are dropped for the life of the client. This is aimed at large public resolver lists, where a substantial fraction of entries are typically dead. Probing queries the root nameservers, so liveness does not depend on any external zone.

The probe allows a looser deadline than a normal query — at least two seconds, however short request_timeout_ms is. Failing the probe removes a resolver for the whole run, and a root-NS query to a cold resolver is slower than the cached lookups most workloads make, so judging it on a few hundred milliseconds would evict resolvers that serve real traffic perfectly well and let a passing latency spike take out much of the pool at once.

Caching

BlastDNS includes an optional TTL-aware cache using an LRU eviction policy. The cache is enabled by default with a capacity of 10,000 entries and can be configured or disabled entirely:

  • Only positive responses with answers are cached (no errors, NXDOMAIN, or empty responses)
  • Cache entries automatically expire based on DNS record TTLs (clamped to configurable min/max bounds)
  • Expired entries are removed when accessed; unaccessed expired entries remain until evicted by LRU policy
  • Cache has a hard capacity limit (prevents unbounded growth even with expired entries)
  • Thread-safe with minimal lock contention

Configure via BlastDNSConfig:

  • cache_capacity: Number of entries (default: 10000, set to 0 to disable)
  • cache_min_ttl: Minimum TTL (default: 10 seconds)
  • cache_max_ttl: Maximum TTL (default: 1 day)

Retry Logic and Fault Tolerance

BlastDNS handles unreliable resolvers through a multi-layered retry system:

Client-Level Retries: When a query fails with a retryable error (network timeouts, connection failures), the client automatically retries up to max_retries times (default: 10). Each retry creates a fresh WorkItem and sends it back to the shared queue, where it can be picked up by any available worker—not necessarily the same resolver. This means retries naturally route around problematic resolvers.

Purgatory System: Each resolver tracks consecutive errors. After hitting purgatory_threshold failures (default: 10), the resolver is benched for purgatory_sentence milliseconds (default: 1000ms) and skipped during selection. This temporarily sidelines struggling resolvers without removing them entirely, allowing the system to self-heal if resolver issues are transient.

Non-Retryable Errors: Configuration errors (invalid hostnames) and system errors (queue closed) fail immediately without retry, preventing wasted work on queries that can't succeed.

This architecture ensures maximum accuracy even with a mixed pool of reliable and unreliable DNS servers, as queries naturally migrate toward responsive resolvers while problematic ones throttle themselves.

Testing

BlastDNS has two types of tests:

Unit Tests (No DNS Server Required)

Unit tests use MockBlastDNSClient (Rust) or MockClient (Python) and run without any external dependencies:

# Rust unit tests
cargo test

# Python unit tests
uv run pytest

Integration Tests (Require DNS Server)

Integration tests verify real DNS resolution against a local dnsmasq server running on 127.0.0.1:5353 and [::1]:5353.

Install dnsmasq:

sudo apt install dnsmasq

Start the test DNS server:

sudo ./scripts/start-test-dns.sh

Run integration tests:

# Rust integration tests (marked with #[ignore])
cargo test -- --ignored

# Python integration tests with real DNS
uv run pytest -k "not mock"

When done, stop the test DNS server:

./scripts/stop-test-dns.sh

Linting

Rust

# Run clippy for lints
cargo clippy --all-targets --all-features

# Run rustfmt for formatting
cargo fmt --all

Python

# Run ruff for lints
uv run ruff check --fix

# Run ruff for formatting
uv run ruff format

Metadata

Release files for blastdns 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for blastdns 2.0.0
File Size Uploaded
blastdns-2.0.0.tar.gz 169.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for blastdns 2.0.0
File
blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_s390x.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_i686.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp314-cp314t-musllinux_1_2_i686.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp314-cp314t-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp314-cp314t-manylinux_2_28_s390x.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp314-cp314t-manylinux_2_28_i686.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp314-cp314t-manylinux_2_28_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
blastdns-2.0.0-cp314-cp314-win32.whl CPython 3.14 CPython 3.14 Windows x86-32 Details
blastdns-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp314-cp314-musllinux_1_2_i686.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp314-cp314-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp314-cp314-manylinux_2_28_s390x.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp314-cp314-manylinux_2_28_ppc64le.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp314-cp314-manylinux_2_28_i686.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp314-cp314-manylinux_2_28_armv7l.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
blastdns-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
blastdns-2.0.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
blastdns-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp313-cp313-musllinux_1_2_i686.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp313-cp313-musllinux_1_2_armv7l.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp313-cp313-manylinux_2_28_s390x.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp313-cp313-manylinux_2_28_ppc64le.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp313-cp313-manylinux_2_28_i686.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp313-cp313-manylinux_2_28_armv7l.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
blastdns-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
blastdns-2.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
blastdns-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp312-cp312-musllinux_1_2_i686.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp312-cp312-musllinux_1_2_armv7l.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp312-cp312-manylinux_2_28_s390x.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp312-cp312-manylinux_2_28_ppc64le.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp312-cp312-manylinux_2_28_i686.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp312-cp312-manylinux_2_28_armv7l.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
blastdns-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
blastdns-2.0.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
blastdns-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp311-cp311-musllinux_1_2_i686.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp311-cp311-musllinux_1_2_armv7l.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp311-cp311-manylinux_2_28_s390x.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp311-cp311-manylinux_2_28_ppc64le.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp311-cp311-manylinux_2_28_i686.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp311-cp311-manylinux_2_28_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
blastdns-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
blastdns-2.0.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
blastdns-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp310-cp310-musllinux_1_2_i686.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp310-cp310-musllinux_1_2_armv7l.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp310-cp310-manylinux_2_28_s390x.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp310-cp310-manylinux_2_28_ppc64le.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp310-cp310-manylinux_2_28_i686.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp310-cp310-manylinux_2_28_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
blastdns-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ x86-64 Details
blastdns-2.0.0-cp39-cp39-musllinux_1_2_i686.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ x86-32 Details
blastdns-2.0.0-cp39-cp39-musllinux_1_2_armv7l.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ ARMv7l Details
blastdns-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ ARM64 Details
blastdns-2.0.0-cp39-cp39-manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64 Details
blastdns-2.0.0-cp39-cp39-manylinux_2_28_s390x.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ IBM System/390x Details
blastdns-2.0.0-cp39-cp39-manylinux_2_28_ppc64le.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ PowerPC 64-le Details
blastdns-2.0.0-cp39-cp39-manylinux_2_28_i686.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-32 Details
blastdns-2.0.0-cp39-cp39-manylinux_2_28_armv7l.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARMv7l Details
blastdns-2.0.0-cp39-cp39-manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARM64 Details

Total release size: 272.6 MB

Release files / blastdns-2.0.0.tar.gz

Download URL blastdns-2.0.0.tar.gz
Size 169.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b1155d642a67a468b313f493ee337a7655c2f190adc1c25dad174555012ac213
BLAKE2b-256 checksum
How to use checksums
b3e7bbb86377c300f03e40ecebc8fcd01c2510ffde5127f3713ca08a681d1570
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags Linux musl 1.2+ x86-64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
6afa71169e23fb47a179420af05d6dfd51c7062130e11a16e0ade1d302fcf45b
BLAKE2b-256 checksum
How to use checksums
6b5da85a96975a713264a588d1364882240c010ac8fce8537e7fd2f4da48e4f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl
Size 3.0 MB
Tags Linux musl 1.2+ x86-32 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
d6450e293fc1e7aa7ef6d0457a9d5bde609736215ef24c213dd6d73251b6f73a
BLAKE2b-256 checksum
How to use checksums
c1c5679df448cb7495bb299e0c0d1ff01586a7696c8b60826d75d5ec3efeb977
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags Linux musl 1.2+ ARMv7l PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
890bbf43f7f03e3fecab89f73dc4b0e787e15763c1ce3b1dd4cc41d450950be8
BLAKE2b-256 checksum
How to use checksums
8f2f983fbbb9552cf5ff77cbe0137b1e33c6dd27179556942a4bb981f554ed3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags Linux musl 1.2+ ARM64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
ebc1481d4f7d3472f9b704adbec97260a877943a34df3902f54f1dbcd0007a55
BLAKE2b-256 checksum
How to use checksums
940341545c2b853489ae08c5b1e9d543ca0db699544fa5f34ef46f19bca8f028
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags Linux glibc 2.28+ x86-64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
c9b13c9347402f615597a6bf9e4add05b753f7bb24b344568ea83653a8c27b5d
BLAKE2b-256 checksum
How to use checksums
3b8cffd1dd369bfd2d86b51251c73b86a3f2fed675405e2d9a2bd850d120042e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags Linux glibc 2.28+ IBM System/390x PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
97a007c61e1c76834edb439c0bca19fba88f4bf15bc7f04012fa4888ede05b2f
BLAKE2b-256 checksum
How to use checksums
82a7bfaee0af734f1752fd326f9d8be65cb1faac2822c8c032b481721b3419ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags Linux glibc 2.28+ PowerPC 64-le PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
9f6b0ae5df01ddb04893f39831c438588c075f77d2c56b7bfa26bff5a182e698
BLAKE2b-256 checksum
How to use checksums
0cc90c6cb5420b860415e67bd8572b511f3573348f19b2a54f95ac96c184a773
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_i686.whl
Size 2.9 MB
Tags Linux glibc 2.28+ x86-32 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
8061d1c164b7d640723802bcfe7d1802b8dc3dc00380f74ba22db9cc7de32e02
BLAKE2b-256 checksum
How to use checksums
77704ca1228e934041d003c121f316caa41b5a63f6a6080a179f77b18f24f5f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags Linux glibc 2.28+ ARMv7l PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
7b8fa648c98e3cba68a88ec4705e3a3b7ced4363b9c7c79edc5f854b52f45c1e
BLAKE2b-256 checksum
How to use checksums
58eb672e2448f77dd37b8a74c7d288e2c20a594bac00da31aff0b15587242d09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags Linux glibc 2.28+ ARM64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
1f4d5889044de0d58e9f00a6e1049903083006f98feb57e5fd69f9ad1bf7c313
BLAKE2b-256 checksum
How to use checksums
81599538910312e62a2cd624a301e85a67826d07ba7a3ce6a640f2165388c47c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
497358e7f978e3a43e0066d3a4e8987d70a238b7b9ad74315f26e9de2eaaa969
BLAKE2b-256 checksum
How to use checksums
51e1e09fd5b0a87742c72ba0628e1f55bf32423176311ce9467ee5d501e01c7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp314-cp314t-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
138d9909f8a4c752ca7adc8617977ba24ef924ba4efd9a619be49adc6659c773
BLAKE2b-256 checksum
How to use checksums
9cd91158d43293a8238f166b1924d7a57a99a3d081853d486c15f2c2bf971b67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp314-cp314t-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
fe50df4344c7a351652e854d2029bf6de74dd1a2c4b56fb4fe4a8d843b50007c
BLAKE2b-256 checksum
How to use checksums
de48ec4b6367c776bf5517c9576f54f466d135cf9deee62a9ce2a5c59057db23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
06e821966692495bfec0487c84da85178551958ca7dd8c2bc8007dfcffa476c0
BLAKE2b-256 checksum
How to use checksums
0e98c48494da5609525487fff8558d934b429b47df088c465d989419436fd0d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5d7bb3c48ee3463ff06245ea34b6bb55bd4d9e21e48b9d7b250f67f329110817
BLAKE2b-256 checksum
How to use checksums
a214c3e23a8c6cd4b09e8e1cc407b3d633bbfb261400f710e23f9a45f06f75b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp314-cp314t-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
72bfc9333131e3faff4e4d641549958a1f3a374e3c89610fc24ecff3a985edbd
BLAKE2b-256 checksum
How to use checksums
d0a8cbc40c1237222f8e11a0971a50d57b1b549dfe220717758eefac5728584f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
ffab9216b35af99483e8a2605925b97cbe57c7e7d362a9442df519f6a491ecce
BLAKE2b-256 checksum
How to use checksums
c7ad737406e036cd1bc45a77d8ae8c32c3c29c4c3c28577136505706e6e01b44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp314-cp314t-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
6a21aef4fd2e796ae4c954cab8e4fcad53fbc99f6073716be52166932a32b1fd
BLAKE2b-256 checksum
How to use checksums
95abdbc3ab471ddd5aefea282af8589d4b9a390db42c42615968e7cd1d469905
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp314-cp314t-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
9006871ad8efa6d2054e7271ef08448dd3694241a7ecf36bdb65b06d2d986729
BLAKE2b-256 checksum
How to use checksums
94853953b5307aeaaaaaa132127c2538762131b0759a5ef36ae717492fb7c03d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e4e557fe609bf57ca1252c86cddf410fc6b6a1fcf45f847bff798b82138cef71
BLAKE2b-256 checksum
How to use checksums
8d82bb64585c2938d81ea603735d90e2428f6c6b22a4d98c28c3d4af3b8547b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-win_amd64.whl

Download URL blastdns-2.0.0-cp314-cp314-win_amd64.whl
Size 2.9 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
cffa9bb9500c8b488d8715b9ba09f6fe36b90fc83618932ad86f3fb563d5b559
BLAKE2b-256 checksum
How to use checksums
f42210baffe980ef65e2ad1a6eb45545fc8a61cf412234b23259eeb809644811
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-win32.whl

Download URL blastdns-2.0.0-cp314-cp314-win32.whl
Size 2.4 MB
Tags CPython 3.14 Windows x86-32
SHA-256 checksum
How to use checksums
327e67116350cc3766d15dc0807ef07a625eb3ae4bd0dd3da765d8210323ed48
BLAKE2b-256 checksum
How to use checksums
c8cf4c8a373573d6687d5821cb9c9c175ec9004f130b1c85cb6eda78db428154
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
fa43e94b57f2976de36f7b9f24de35cd7c0f6a246cbedb44511664b0e687c4e8
BLAKE2b-256 checksum
How to use checksums
fe64c0f11dde18808af3cf18a6222ae58bbb25ea169cf47570bac9b85f1246b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp314-cp314-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.14 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
490c05c290d5156e8fadb870a6ad5794675c9f6de33f9633bd31dbe9bef7797c
BLAKE2b-256 checksum
How to use checksums
592171fc77bd93672cababdd1027fe6c813823e3f1026b37d4ebf62b962fa766
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp314-cp314-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.14 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
3a560128f38616cb47ec3330a11f3884f64e534188f6213195cd7e128913b0cb
BLAKE2b-256 checksum
How to use checksums
20b132072d3e10c9fd85c00f720b43f1950447fbd86af616a056448bbe8b8e3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
7d581b80ad528df9e2b7404102c5412aec8741da0d204e0d9adc7f61c72b61fa
BLAKE2b-256 checksum
How to use checksums
89d3657f45d789ff685395b3c3370a3b8a51dc47a4ca9767ce71ec9c36d515e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4e5f97cd6d704e5b92c583c6827a35d1f15166916fb60a65af9c1964239a8604
BLAKE2b-256 checksum
How to use checksums
5d52b88f641f3ea172b999934dd19d8df3df14797ee7be047c528de773c879c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp314-cp314-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.14 Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
fd94b8f168f4023b6181e75a22874d53c38ae6cc9a56675e7b576234fa943e3b
BLAKE2b-256 checksum
How to use checksums
1cd846767fdf13e0a9e6bf295a948b99480810f61c09608b303293df7b7ef456
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp314-cp314-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.14 Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
ac0d40ca563958ca3ddb3082058854b2e327d9b404eede5958c43e32418cf2be
BLAKE2b-256 checksum
How to use checksums
321d9780aafd6dfe2bb52babf2007e83f0752559a668dfcfd71632e0d73a7615
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp314-cp314-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
24dfe8f9521d31e5b0ff4c676c611b0917bd2f002b246501556082b404842aea
BLAKE2b-256 checksum
How to use checksums
027ced7d1056edb3a242ece4e88c21eac107ebfb19d441171fc2b7b7d7b09ae2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp314-cp314-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.14 Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
5b369fedffb6d723912ba052b4d0400f7facf54d4db217bd9d26c738a7f6009a
BLAKE2b-256 checksum
How to use checksums
673f1bcb164095cd9996df84f10b3da52d2e1f3bcc1620ed00262c7b7df2745b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c78f43fb9fd4d976d481917b1ff245126f0de679032c87eef4ee68ced2b792bd
BLAKE2b-256 checksum
How to use checksums
757afa5f6bbbff97c3d95774ed1caf28117c3d5b35480fff2e4640bf9c702852
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL blastdns-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
Size 2.7 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
705df149f190d22b0e1cca9277e99da262f27ef6838d8342d60c679be400a101
BLAKE2b-256 checksum
How to use checksums
80c46a54cf27db17576216fd80bc2b9f4b48b019293351a9554700501152ef8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL blastdns-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 2.8 MB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
01cf4b75298504d189d6a679e3d275c4d9028a7fffac5f6221734cd0af0d6c3b
BLAKE2b-256 checksum
How to use checksums
2a116b3fb5929c85041a0f76920504318c193189d468b2f7fcd4ff79c4fa0aa5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-win_amd64.whl

Download URL blastdns-2.0.0-cp313-cp313-win_amd64.whl
Size 2.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
0c16298df3453f4f09cf5cba415c698178875710cd8fa0fe08a1826b5048ec5e
BLAKE2b-256 checksum
How to use checksums
9eebba7d52bff317d26c197d2e4c9eb59ceb5c81c0554787f6bf89b67364bac8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
dbe8e011c0f05930e5c24b16835bc67423d1f9d41f087b81bbc90e55920bcf19
BLAKE2b-256 checksum
How to use checksums
51e693fc905327e850d163df1b0bba77dd59732721a11d5932ec45233a145047
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp313-cp313-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.13 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
5c996778b8a70169071e3110087ce6111bcb4816c9fbf1b51c16287a85333c13
BLAKE2b-256 checksum
How to use checksums
44e9ac0434e31af4300395ae6b00d88f88cdcf73c15ac227e6a5b856c00289d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp313-cp313-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.13 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
c3b020008641e5047aad39b434ac6921022cd7c089ed110ab85bfbe271f9665d
BLAKE2b-256 checksum
How to use checksums
27d1256835b30033bcf2ae761b20b6522a9923382acd4baf97bf8c09cb56f300
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
5a38290f6003cb883d91378cfe6ac5ac0e3b9d9fb13f94d70e92eca209f82dfe
BLAKE2b-256 checksum
How to use checksums
ebe910ab9b68e74922bd05d8637984f83ce80615850edc779863b27adb6875c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
60197e85dd2eba9edbf3d0e55894d1d65bc5236c7558497b0881da0dc6e48211
BLAKE2b-256 checksum
How to use checksums
faf2c61d995b71506596b771b8b664db4d69a57e59b6e0fe52b71bcebfd428b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp313-cp313-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.13 Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
8db531d4abe616a58a466f022990c67b056b0a37e7489eb43fcccfd2d886f9a6
BLAKE2b-256 checksum
How to use checksums
a459864b59824c63cab452b92dedb826459861ff70409485973ff6760ed42b63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp313-cp313-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.13 Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
ed6fabb7ce356056899ab820786bcc9bb28e023d0af9ecf11e12bd3dafb9cfc5
BLAKE2b-256 checksum
How to use checksums
33065b2705ac73a09c4d5150c4577b828cd45e4031de2da50c8c41f400550319
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp313-cp313-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
a036964128a1b30ab0594978c9acb13e431b6e6df5f04270497cc34be607f9c3
BLAKE2b-256 checksum
How to use checksums
2f21a32d9b19857f5ce1b0714a4c740146b4e93cfec09d741a58d057764b7d01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp313-cp313-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.13 Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
1f464664df7e8f924ee486b6a1ab50bcf720a902010f140938f84d518d92820f
BLAKE2b-256 checksum
How to use checksums
b4c47a6579d6cd9851eb07fb86b706dfa83d26d42128e6fe45541343dc63147f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
6d087c8352c31a25adcf11d1e3a3ea50289513560ca5807af8cb00dff4ff3430
BLAKE2b-256 checksum
How to use checksums
856774bdf494f48c2f6bc256a199ac5823267da495cb99e6c22b8491f8df6c11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL blastdns-2.0.0-cp313-cp313-macosx_11_0_arm64.whl
Size 2.7 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
13b2e161f1f99f4fa73e1df4ec16b7cd86b29a5f5e20fbf368849381753132cb
BLAKE2b-256 checksum
How to use checksums
44b0a85efee02d4722ac41edf1998a2c6034a63ac43682692efa0a88ee3e2a72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL blastdns-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 2.8 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
ce92a5a7145348a20e3337ed6a6dc80ca296d7ba087927c6bec0ed97673f236e
BLAKE2b-256 checksum
How to use checksums
f839a5db8864bb6229a1e93e570e7360eb5457660a3dfb8c17dcbc6bd48683f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-win_amd64.whl

Download URL blastdns-2.0.0-cp312-cp312-win_amd64.whl
Size 2.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
ca4e0eb101eae9dee771c041db9e9101c8f0611f3d6cd58da35afbea3862a3f6
BLAKE2b-256 checksum
How to use checksums
201e72843915ed817d0e82cf6e9130227beafeab39e4ae8ddb7aec774c4cd560
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
570c37c519c08a2dcf4d3a5e79146be6e266c89984b3f090f6950ba9dd15ccea
BLAKE2b-256 checksum
How to use checksums
a1bd9309e53b152ed2828a0c78272aeb65a0919e69537565d07d0e0649c01371
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp312-cp312-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.12 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
9b4fe18afb843d53415a6d29e9ca2a18826b5b99976cb26e8bcd47e827101a1d
BLAKE2b-256 checksum
How to use checksums
a380f769f46e4e9e7287d5c2635921bede6c1facd59ddbf0a6e49ba1fdd7db57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp312-cp312-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.12 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
b00c58ae5a34348e4abe9c2a5ec7ca2f57a1f606f1d530fc8f086e89989df651
BLAKE2b-256 checksum
How to use checksums
9ba338fe980be309143fa70c0e04a1555812977a394deb4f62f04c3c849a2d89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
8eefe01153faa9e5eaea0b20177a1f93664c08b74204430b11c7a649df5d674c
BLAKE2b-256 checksum
How to use checksums
65454ddda1c1227f42480308571afd0f0db1da6a3fda7340872c888833e9a4e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
519d854a18987bc5d9c27b250cef80927ba6424751e20bf3f70e9eceb62a5793
BLAKE2b-256 checksum
How to use checksums
1ceab4a90807a17738c9d2090017e48ed4c80713f37d3704ae6601f79ceb65ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp312-cp312-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.12 Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
e0d44c234e8a248039d236ec50a93510929119bca956ebf99e5711394c7d30bb
BLAKE2b-256 checksum
How to use checksums
ed7426cf55a0b277f886315a4bdec91ed27d8644363f3152b7b8eb8f31749e08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp312-cp312-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.12 Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
50d109ee31b02fcd5cb2eb3fb15f18e023e7eaaae33b8ec16a2c00dc6282faa5
BLAKE2b-256 checksum
How to use checksums
19c957eaa902fc0c658c274e9a230ac9dd948586ca7404885fe3e831d2928b07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp312-cp312-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
c4be35b13ca6c55181a970a80a9c479143bf836f383e9ac9d836e0b4b11d3a8b
BLAKE2b-256 checksum
How to use checksums
2974cc681a2e562ae0493cb80cb1330d7e88c65a00264900509bdb8a0f87a90d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp312-cp312-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.12 Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
14b6a580c1ddc60a92631d66949d87ce2a73fe757e6397996f947f1a6ac767f2
BLAKE2b-256 checksum
How to use checksums
2f8dd799e607f84f3c4b889fe981fdb10bfc2b061fec700eee5e5e21e5b0c6eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
571defd1b5e2df3a503d8662a48bb06694d8e67ac8d45d1cb041f99ce6ad6a3f
BLAKE2b-256 checksum
How to use checksums
98f81738e7c407c4fff4b5f060105249a3db5b14fc5f9a545399cc9881d3a97a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL blastdns-2.0.0-cp312-cp312-macosx_11_0_arm64.whl
Size 2.7 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dc84ea39d619d2500f16ff922a0c29d2be6733750532a878037540a5611f149c
BLAKE2b-256 checksum
How to use checksums
d411d01a7d84d31c6118b517ce95711605aed53a11b432258607113b420a7f7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL blastdns-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 2.8 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
310b0841bed2408fe5572da3d7cc31121ebd143540b8d4eee7d2e72379093db1
BLAKE2b-256 checksum
How to use checksums
f996476d0428662b4c858ccc358b5fa460d3aeccab2ee6d53452f185ecb1a588
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-win_amd64.whl

Download URL blastdns-2.0.0-cp311-cp311-win_amd64.whl
Size 2.9 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
2810a6f6464130d6a8dbc8b7e97f7d8c58faf3e1880dc36202a54265827fb8ac
BLAKE2b-256 checksum
How to use checksums
966058693d07f674ad550c9cf06f12db1de2efa31efa6371d4de30abfdc180e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
97c7de160c0d9da917cde3a6329202804b61e895c4dd0b24141cb0de1f61bee0
BLAKE2b-256 checksum
How to use checksums
9f9bb94f746d2e4a584d4b6f28a917ba302763fc9c80b408e2d47d1049666860
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp311-cp311-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.11 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
14cdf1c18d1f8030c2dcf9a45ab7afea738de99f9da53a1de6de058e8138a5cf
BLAKE2b-256 checksum
How to use checksums
fe63f43585828d0d632953957a7931222bd24f564019aa63839bd0d93236a3db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp311-cp311-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.11 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
b327ee5564166eae8ce6d4af25330cd2345001702d65addb6a2ec5ca51f8da2f
BLAKE2b-256 checksum
How to use checksums
b9ba01340b06e3f67bfbcecbed80af3a04a38d136f886d327241adbe7c3f57dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.11 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
a7e051d4d6b3ae09a17af99b31a21f702c6fe3a10bc39dc029f7a5ec57e1ce84
BLAKE2b-256 checksum
How to use checksums
677cce4eedbcdc8a32193780b575705fce72de34a5aa987c0e96887a5a1644b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
51b4692987c15d0d1884b682e9ba8b2f285abc5248e0b953cee506e9416f054b
BLAKE2b-256 checksum
How to use checksums
d7d4317a1adcd9d752fb54621cebe5ceff0b27d9cd8a9315be8ff7d931566e9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp311-cp311-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.11 Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
43514aed8c933d553a1ead0b5d53b258fe99ba8409d898b6d50569362e44b2a8
BLAKE2b-256 checksum
How to use checksums
207a1cb6410739801a4beb543137cafff3bb4270ac1e508c4839dd6432987699
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp311-cp311-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.11 Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
09deaaf5f9d9beb76db637b76ef0f27695108cd17aeab6fd79311005cea90dc2
BLAKE2b-256 checksum
How to use checksums
7e57fa450c448b7bb1336ea1d5bdf2b36cecbe5f0301b924f035e5c9a7df12dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp311-cp311-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
eeb819c1819a864ed806d9b3aebf574aa53a0cad14f3ba395c6d295e5eff076c
BLAKE2b-256 checksum
How to use checksums
65c896d27e9800b921b9e952d4e54de0f7441ee585c92bf0644ac1373104ecbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp311-cp311-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.11 Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
73bc4fd4dfe1f9c8b64a0166c678b945118402b9cda6da7d238454b893f2db16
BLAKE2b-256 checksum
How to use checksums
64e7dd5b5bcb300ec1f5c388a57ba1cb3258be505099bab1f2740faf37d9747c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
2d507c48d8d237f693af9af17694e65a4fdc14e559c45364e3467174c9dbce8d
BLAKE2b-256 checksum
How to use checksums
8e983c85b5061d904e731fb9a8927db98090961ffacd1d3ded77a2350b9c6c6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL blastdns-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
Size 2.7 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e81f8e11b73f4f1a909169f24b3026e11ad8bbad808b067663f1dfec8677dc0d
BLAKE2b-256 checksum
How to use checksums
3cfd198a90e03539291cd2439724fbdcde77887f46d7165afe037f592a2555f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL blastdns-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 2.8 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
8351ace2db652948ee353f258918b938b173333aba31c595107ce29b441a0847
BLAKE2b-256 checksum
How to use checksums
e5467f577bcd9147c92d9d96879da0574333e34998166d1869167a02b1e4dd8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-win_amd64.whl

Download URL blastdns-2.0.0-cp310-cp310-win_amd64.whl
Size 2.9 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
838358819ceaa1766e92135cca04e15c615ba6495ad8769d77d31a1156144220
BLAKE2b-256 checksum
How to use checksums
5766ba1c821659c0b243845372988db3367c7bf5344c3719e30d03c793898998
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
7d467720a373d8f7f575b0527bad703024ca9e4f0f10af76e4f5584eec56cd86
BLAKE2b-256 checksum
How to use checksums
e9018ad0f68020adbe7b83e47352a7ed4476e54231e66ea809cf1b2bb240a9af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp310-cp310-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.10 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
4edf4a8ba91bb8561dc4c643cbb667d0a97cf6fd9d944be2dfe1eda5859beaa9
BLAKE2b-256 checksum
How to use checksums
21b3b86c2e00f916674a3e5540bcf03231c503a6ac039dff34f03c599c447a80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp310-cp310-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.10 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
b974a43a8bd36751d1ed381ec9ef2bdfca99a88c7beca06adddf0d7854de9a10
BLAKE2b-256 checksum
How to use checksums
c10e6e709d5013948000341e5c36bbc56ee74d097560a036279d490f22b90445
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
3bfe7263ba7a0fd0755fc7b66fd4982bb13984ef25f3a41e98b7c9b286c25006
BLAKE2b-256 checksum
How to use checksums
8ad150e9bd6b42b05ad9dfb1531972aabb20157329fa89507cf59264f1963040
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c50f2bb010807d91fe1cd7fde26a0f304e71e19ed86c95500cc9d067cc60e861
BLAKE2b-256 checksum
How to use checksums
b6b5aeab817311a16be5558af6d3d787c605775f7ccaaf761b8bc5f5b22f564e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp310-cp310-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.10 Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
142e898d56b4fff83fa7c72e93d251c0d28d1f07ae1fab40cf3b1286efe7c980
BLAKE2b-256 checksum
How to use checksums
3b81cc06edaf6f3576275d428c3bfb73099a6c8e73c7cf48bcadbabb456e8f6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp310-cp310-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.10 Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
6826b3cb252de74f1f2b9aba810e8c9adb48e12d31aa89e31c2df6809b0a0fca
BLAKE2b-256 checksum
How to use checksums
0673486cd65fd61e3ab3c8308c56188ccd0bd8e473d2e9149281b03d47d61f12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp310-cp310-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
c176755e9b1bdbe5a35bd88a5fc5dc96e92778ed53fa4cee3dc8b5f15125c3f9
BLAKE2b-256 checksum
How to use checksums
7b6bdb1f1b3c85859a54349806b8fcdd99c4539ec6319a84ecb4cf315f981941
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp310-cp310-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.10 Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
ad1fea0165732ac8d7b06db29ef80c817753ea6ba3fc592e40d9ee412044a4d1
BLAKE2b-256 checksum
How to use checksums
5972b70ba280a300c6c168558a6a743b76dc9169baa42a2257737300b873c2b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
fad0755c2e9586873ddb63221e3c3bfa892c130f154e45ccbbda0b72563ba5b2
BLAKE2b-256 checksum
How to use checksums
9efbd22c181bf6019998d4485e90b392c585fd050befea52ae4d9887a9d1ddb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl

Download URL blastdns-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
Size 3.0 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
215c9852880e0422641b0e8ce20aaf30662e1521c3c5d02c1edf3c8f1b909df9
BLAKE2b-256 checksum
How to use checksums
115e48d605127bbd37dd265f8a85e249d0d0b7ca6b7d0a3451516b14e335fd33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-musllinux_1_2_i686.whl

Download URL blastdns-2.0.0-cp39-cp39-musllinux_1_2_i686.whl
Size 3.0 MB
Tags CPython 3.9 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
6f9e0c034d166bd043552143cb3a6d3c48f4f9396199c47a949ac808b4ad68a8
BLAKE2b-256 checksum
How to use checksums
250309954b21f9328662c389fff12a7c1c8e4e3cf3e2f276c608a162581dca2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-musllinux_1_2_armv7l.whl

Download URL blastdns-2.0.0-cp39-cp39-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
2921b3e0dab01bd7efd3f36c035be723a7ca4e4980860a7adf1cd6878af335c4
BLAKE2b-256 checksum
How to use checksums
41c19c16c43b9ee09a2da9e2081fe97860df0b3bd629c33e224254a538648c50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl

Download URL blastdns-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl
Size 2.9 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
9a0cdf6457e5036956babdcf4cbfb5579d27259ca953310485887c9a2d7d84f6
BLAKE2b-256 checksum
How to use checksums
53f1b19396815bc8438b25fd5168714a2f5f3dd3700347790e6be5022472ddf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-manylinux_2_28_x86_64.whl

Download URL blastdns-2.0.0-cp39-cp39-manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f2568919c86429e0927a8bca4a3684c3ea98104e949e8115b0bda8a3af7ccccc
BLAKE2b-256 checksum
How to use checksums
570476a3b4879c254643beaa1b2cd331e4910cfc70713c4328e868ea33638375
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-manylinux_2_28_s390x.whl

Download URL blastdns-2.0.0-cp39-cp39-manylinux_2_28_s390x.whl
Size 2.8 MB
Tags CPython 3.9 Linux glibc 2.28+ IBM System/390x
SHA-256 checksum
How to use checksums
992d4c39748d3f20ed8f692ef5d8a876c4973ca3260787c438f9c728b817267d
BLAKE2b-256 checksum
How to use checksums
c286a516f9b8261c281885005d83315339fe05dd07747e7f4652908e647d9c9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-manylinux_2_28_ppc64le.whl

Download URL blastdns-2.0.0-cp39-cp39-manylinux_2_28_ppc64le.whl
Size 3.9 MB
Tags CPython 3.9 Linux glibc 2.28+ PowerPC 64-le
SHA-256 checksum
How to use checksums
d93ae542d5a29ccdb776f45d2cd90caa3ce4462402e0664e72056598df4ae925
BLAKE2b-256 checksum
How to use checksums
42fca7f83b1420b160649a055eb8e0c47576777fef48ee31c8061af22ef66074
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-manylinux_2_28_i686.whl

Download URL blastdns-2.0.0-cp39-cp39-manylinux_2_28_i686.whl
Size 2.9 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
bbda73fc19e3f551a2977ca9b599d9719c07f7a94fa5e17fc69c1da473aceb6b
BLAKE2b-256 checksum
How to use checksums
a1003a416f04bced450bda8432ae90977fa053309b581381152d62735bb7222f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-manylinux_2_28_armv7l.whl

Download URL blastdns-2.0.0-cp39-cp39-manylinux_2_28_armv7l.whl
Size 2.6 MB
Tags CPython 3.9 Linux glibc 2.28+ ARMv7l
SHA-256 checksum
How to use checksums
50a8fe16e9922fa5548917756673e6661840201309eb38c5f9723deed637288c
BLAKE2b-256 checksum
How to use checksums
b0601346f66691621282daa9c47280ed36dcdd0c31ef8d4c24769aa7875508cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / blastdns-2.0.0-cp39-cp39-manylinux_2_28_aarch64.whl

Download URL blastdns-2.0.0-cp39-cp39-manylinux_2_28_aarch64.whl
Size 2.7 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a4b63cb0c206f9317153d709dee61312a2c42fe24703a38dde4bbaee199bb3e2
BLAKE2b-256 checksum
How to use checksums
46a4a12ed4fe34e407db8a4e2ba4b70c095299b267dfd81e8f4ebf6d0ccc5d7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release history Release notifications | RSS feed

This release

2.0.0 This release

95 release 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