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. 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

On every pull request, scripts/benchmark.py compares the PR's build against its base branch across several regimes, including a resolver pool, injected loss and latency, both socket transports, and names that never resolve. It posts the comparison on the PR, marking only changes that are statistically significant.

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 any that show no loss the rate can fix.

Backing off is only repeated while it is working, for the global rate and for each resolver alike. The first sign of loss earns a retreat, and further ones come only while the loss is actually falling. That distinction matters because not all loss is caused by the rate. A recon target list always carries names that fail however slowly they are asked, such as lame delegations and dead authoritative servers. A resolver that drops a fixed share of what it receives, or one behind a lossy link, loses just as much at any rate. Retreating on every reading walks the rate to a standstill without recovering a single query. Measured on a local pool of 1,600 resolvers where 2.5% of names never answer, it took a brute-force capable of several thousand queries per second down to under thirty.

So a retreat that fails to help marks the loss as the path's baseline. One reading settles it when the retreat cost answered queries, and two in a row when the loss merely failed to improve. From then on, congestion means loss above that baseline and not above zero, and the rate is handed back. The baseline follows the loss down as conditions improve, so a bar set during a bad patch cannot hide congestion that arrives later. Only a fresh stall can raise it.

A falling loss is not by itself proof that retreating lowered it. A workload moving on from a bad patch of names lowers it too, and so does sampling noise, about half the time. Either one would read as success all the way down. So a retreat also has to keep the path delivering: it only counts as working if answered queries per second held up across it. Loss the rate is causing sits above a capacity, so a saturated path keeps answering at that capacity while the rate comes down to it. Loss the rate is not causing takes a fixed share of everything sent, so what gets answered falls with every cut. This holds for the whole client and for any single resolver alike.

A single resolver's retreats carry two further guards. A retreat that fails its test is taken back, because all it bought was fewer answers from that resolver. And a resolver's pacing only steps down on a window that its own pacing actually shaped. When the global rate, the workload, or the host is what held its traffic down, the window says nothing about that resolver. Reading it as though it did walks the resolver's limit down to whatever those other limits happened to allow.

A path answering almost nothing is the exception. With more than half of all queries failing outright, the global rate is held where it is and not handed back. There is no throughput to win back, and the volume may be what flattened the link. A clean batch still releases it.

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. A ratio built from a handful is mostly noise, and noise reads as a resolver that keeps starting to fail. So a resolver's window stays open for up to five request timeouts while it gathers a hundred queries, and a resolver that cannot gather them is left to the aggregate. 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.1

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.1
File Size Uploaded
blastdns-2.0.1.tar.gz 176.3 kB Details

Built distributions (wheels)

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

Total release size: 282.4 MB

Release files / blastdns-2.0.1.tar.gz

Download URL blastdns-2.0.1.tar.gz
Size 176.3 kB
Tags Source
SHA-256 checksum
How to use checksums
737c01bbbb42dac2af9026744add9ef2863a41621ba541189e2b2c937817f1e2
BLAKE2b-256 checksum
How to use checksums
f638c9d18ae8471b113373ccd184f0abccefa14aee20e188358929864714804b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
8749ec8240c4e8438e59dcbe7a0009d01ca3a7cb255ed09c499ef1d04dba1f68
BLAKE2b-256 checksum
How to use checksums
1c837f34951c5ca03e9520e6bcd7516118382cf9d99321bc772daedb98567333
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
3f0060e9413361673126160c0320ddd569d4e8a5cad797d22c5586cf5f206885
BLAKE2b-256 checksum
How to use checksums
81370f5008b7038244b79cf349a434bfe1071b57847bd4c971d0b17ab80136b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
0c06b596f7696274f7f9cbe516f197eb0132f37b053c56a618dcce4ce725229d
BLAKE2b-256 checksum
How to use checksums
c72795c972f941787292d29a27f8a82aba42af85d98803f68c9b8473b66996f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
40728d970b417a25c9bfac24d7d2598ead027781309e18004f5061bdb4ca9dc3
BLAKE2b-256 checksum
How to use checksums
d2cda61cf2afd869460ec4f95bcc040d02a652bf3b64b41bdd3564e0e61bd56e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
669436c92b5c01cc3f8069130145709c449eeda47f50dc80a2c64f4d07507db9
BLAKE2b-256 checksum
How to use checksums
13a68ffdeb39439fa2b9874d25e43295864d71cfcbd7ce6140527cc5dc774335
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
48ec433e49d8cdeefabbe47b4fe9fce9e3c4ee0d3a290ce24842e5dd23a2e0f4
BLAKE2b-256 checksum
How to use checksums
f3b1cebcc3d46870d9d71aa1e91be4206989e1d76c7f4020ecb7287dfa912f91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
69c9efe33d1c495ff6320992587faa3f1378ab1a804fd10700f9e71392daf063
BLAKE2b-256 checksum
How to use checksums
4e7673054f4bb94d1a1acd5b76a693a11954d247b72672a5d228648b1ffce545
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
2fd948e7323546dedc542a123d38b1d611ecb1e839947b6f5c7a408bf7987e78
BLAKE2b-256 checksum
How to use checksums
932f0a8bbd5713333c3a64a542311f1a52454c3225aaa44435296bb58e78f30d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
c9e5ea7d1cdbe0af58a29cfca88409a3455c1387c74b80735dd9c35227abb5cf
BLAKE2b-256 checksum
How to use checksums
74c4786690c85d4562b86f3c2ea73e12dd0b0fb5f3468af7f3079801b018a46e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
ce1b86ddd1bf91adeba2983bce25716447dddd80d3c97bf0f8df76092b5e2314
BLAKE2b-256 checksum
How to use checksums
a8ac3f81cf16aa4ead654aecb253190087b3ea2b718576b27e95b47ae1437983
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
7517e8b0c7aff9a42e0cf6cad8a93543f98204a2e668627b0878dd62eca52809
BLAKE2b-256 checksum
How to use checksums
a1f969bedc17d1cc6355efe70eb47c86ffa0f7d4fffae1569f9409aa7f691156
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
0c4e7beebcde2e9557411369a73cb069cb1af82c1e7637725f66c9acf9be9194
BLAKE2b-256 checksum
How to use checksums
e64d7cee39e34f09bf31f6036a976bcd2665f024f71a0645d42867377b4f1aaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
c762f15279f1a3723c679f9979bfc9f131a21030cb4d6b88065374f052d9a454
BLAKE2b-256 checksum
How to use checksums
68ff6f16e3d03670f58fd0513af6c3a67417df6508556826e07185224f840c0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
cade407ee51bc10a5a151156b0f41c84fb3059205f120ff2f0cb5609e1e72dc3
BLAKE2b-256 checksum
How to use checksums
47bf4b3c5dc378bd0c5236208132d8e33c1075890c98aabf0850d3e75515f71d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

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

Download URL blastdns-2.0.1-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
231f90d0a4056edd676b29e8313e784573d423716e1228b59a3afc532b399032
BLAKE2b-256 checksum
How to use checksums
f038fbadb3f3d92fefc6bbf9a34a9bfd4743b512d19c98ec67a4752411255937
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
7a58abd0db0737c1912bd73827ee1523b862f398b086e1e3d1c6ee06b147abdd
BLAKE2b-256 checksum
How to use checksums
b470b5790ee82c008e98366a6ca5e6242596fc2e1e15b9cbfb2b1d4e67c2797b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-cp314-cp314t-manylinux_2_28_i686.whl
Size 2.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-32
SHA-256 checksum
How to use checksums
1625a4f9e9425cd75234aa10e813e5db4760b39a28b42ebf4366dfe2d4a4b8f8
BLAKE2b-256 checksum
How to use checksums
5bd1385b2c09e900d89cab729fb0adce07f0fa16247ff49ddfa26efb59d2ea25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
b9b7e3c536e7685f070c6aa7bbd66f1195d853bf397bf66ab926106f5245e717
BLAKE2b-256 checksum
How to use checksums
b3f2216e36248989640733aa8b682fbadc97384165b4ac6510e2b62c8a1713aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
46374dbf26545642c4b7adec0e4018a799e10b242a36261b417393ee92d09200
BLAKE2b-256 checksum
How to use checksums
553478c8ebca5399f116b9751a2e8cc31c71481ecebea98e42fc9e16042a1c46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

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

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

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

Download URL blastdns-2.0.1-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
e9b96cc0351c1954068b2b912a3db076cce42add8e9cc00af35c0cb46ebeaa38
BLAKE2b-256 checksum
How to use checksums
1578dd47d64abc26af801439ae3d2794beca59da3d74418e34f86adbada4d7c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
9ab64e0a44fe09718a73aba71ce97e4a6588b593fc982a7d4ebccd7c9be3792f
BLAKE2b-256 checksum
How to use checksums
0d25fac52e8958fe674f3b6b55e771ad742b7c269a900b6e73c4acd7f3f99739
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
6c05416ce5e0caea2b4cf76f205878dfd49c33d2e2c034477c1a70c2759cfc42
BLAKE2b-256 checksum
How to use checksums
1b8231bd1ebbec9775990052c03a546a7dc564218fd67f1afa4b96ba7fd50d1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
1bfc2497c03bdba7170a4bbd17baf08b322af061c96b25ac0ea8673968ac28ec
BLAKE2b-256 checksum
How to use checksums
6a498d0c8fcf2f07e8afbe36210cf2ff8843a8a69e8dc4344b08eb5107e672b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
221dbb04e21bf4a8968beccdad17a62473fdd53af4cf4e68a40c7e9c8efe8eb6
BLAKE2b-256 checksum
How to use checksums
14baff23f164e643ac1eaeb3c6d52d4ee433ecb7315363dde8106f5db1a8a8da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
062f98af53c7ef19166ca754f7225bb17b4ee55ecaf80f6afbdec5e1c12baab3
BLAKE2b-256 checksum
How to use checksums
dd0149a1ef5a740ccf667ffc0e9296f840e19443e933417253b22de5e0627cd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

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

Download URL blastdns-2.0.1-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
0c581d6d87bbe448c39fcefd2821a03c3d0c2650d05ee7af4bdaee6603eafab7
BLAKE2b-256 checksum
How to use checksums
ea62a079b58c3b4702686285ec490648878b3e823a8d3267d3fc369b7239fe7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
3a17a15f64c159df3f505c19b7cd2efd7f25b9c3dd5c7a0148889e058e5ad55c
BLAKE2b-256 checksum
How to use checksums
f893cb8e484bc81ed55c2f6664c7a1dbaf1b468befdfc3d53ad0deb1323ce1f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
1103e35d1f72c6611c00a1d68c788c13c83b9de74998d39bfcf580b57a8134dd
BLAKE2b-256 checksum
How to use checksums
17171dfd42fe304f9c7feaad39e284200951820e842a32d7dbe6eeebbbbea791
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
c89f9bb8721f9ff52b685510ffe0e8deec7b8c8c86b35801c3dd99823b47a5d5
BLAKE2b-256 checksum
How to use checksums
62823756411644c02e4633c7139f1bac26f9228fe2a7cecc1c930aa452122716
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
5818a5f88638ee861e3fbfb897b03e5d6dd2d0e0831231ded5a6680788f83e61
BLAKE2b-256 checksum
How to use checksums
a86ef98f06dd84554331d19442b35f84321aff76aecf177ae836e0c65cc38f8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

Release files / blastdns-2.0.1-cp313-cp313-win32.whl

Download URL blastdns-2.0.1-cp313-cp313-win32.whl
Size 2.4 MB
Tags CPython 3.13 Windows x86-32
SHA-256 checksum
How to use checksums
e0aa30354ad96b066476e6a5ad2db501c1dc6fbaf026a1ef7092c43ee8672753
BLAKE2b-256 checksum
How to use checksums
89b0dc83e0d3f8ab333b39780267afa7c9d52272a76b5a5592fb086d8fa8736f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
0eabc2c1e35346425c9d8a05b8d9ddde78fe7fee1d09beb4f5ebc3b982956f91
BLAKE2b-256 checksum
How to use checksums
3ece5f66de1b1cb48e60c7ab5d0f027d163f3c11f80611e4bafa00eaee6b0557
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
8598c56e13bd74993b5165688a6ce57dd09847262710a249c3613330d98cb183
BLAKE2b-256 checksum
How to use checksums
482894e17d83d276b044e25e096800ef20c551d0e3bdf426d1234f439bf8e920
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
1b283f3a8e72ef671d4ce22de006c25dc5fc6654231aa900a40c2d5bcd764a81
BLAKE2b-256 checksum
How to use checksums
f105b4c35ca8002712e4fe254e630143765c42d51ee4ade4cc2b7e9ed3273bca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
a6d0cde06f96437c00f258a3c249fc02f8f3bb4afd84acd36e1152a62e984d9f
BLAKE2b-256 checksum
How to use checksums
e6a546481683496cd7e0f21b9cb1d8395afffb064f66bdbc5b1ef7f24cb84612
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
0268a44e929b856ce7d0e6c25e037c5a345c399545988fbe5da92fab1e47b4e8
BLAKE2b-256 checksum
How to use checksums
fff162cfd6e72d7161265a28a46c97052746144de1ed1898caa3257f6c18862c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
8b47b7769b91733c9b877cd555e94685ecc0733c47c897f5620b43cbf82a516f
BLAKE2b-256 checksum
How to use checksums
cab51321b54fad20e1482abfdda4a83970c12afb3540a89b725a9e91d114011e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

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

Download URL blastdns-2.0.1-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
10aee634be393f03b5e2da991f18290cbd27323d294c041c4d769c07fad1d4a8
BLAKE2b-256 checksum
How to use checksums
18a879126785836c6f62616ff6d6146d1a3fa10b1a4cd3be79d426ab3922f372
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
26c7fef34db297625531d9e6f50f341406ee05101db771d099ce17d2d105f069
BLAKE2b-256 checksum
How to use checksums
082c94c9d5f3354b68049663d39e8e910b549fcf16dcadb5fb6b04a30322f705
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
8073ae2689bab4b3a8527af7e984932e92f863e259ba68db282bca7977cbab53
BLAKE2b-256 checksum
How to use checksums
d661c36a7911ead8b12954542c7b196f368f373a5f3f6dc125e2bda0c850df23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
edcc6352a744ac43eee2ec344c62ef446260ff6a42831b00a7e3f7098e2926c3
BLAKE2b-256 checksum
How to use checksums
17195a858cd40aba9d31213b20199497cec0bc20cac59f4ebdb2373e88d5422b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
5228f822c749c840bf1e7a0503aecc89248eec2d74687d436733e2041e076948
BLAKE2b-256 checksum
How to use checksums
ebd71c82b8bfe49de1a52b67014cc184a38b01a7b5b8e6885ee46958188cdc5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

Release files / blastdns-2.0.1-cp312-cp312-win32.whl

Download URL blastdns-2.0.1-cp312-cp312-win32.whl
Size 2.4 MB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
7621e0a73f234cd86f65a34c64fb9e8399b6e22e7a9af4aefc9e66a9ff115952
BLAKE2b-256 checksum
How to use checksums
784d5bdd4f9551dba90dbdecf2648b4fd7515420029cff22106f4b334db29222
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
f067c99ac01d8d4b687fb2b4d518cb5c3c60ad7985c8f127fe05b7e8022b10b2
BLAKE2b-256 checksum
How to use checksums
3262df41235b23a50626ce2fe0f5caf83b40ac01405dcce7f4c4b750e1bcc03c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
841a4b64bb35f8361bf638ad3b1dc0a899c774ba518e40215f8d9aeac3cd7c45
BLAKE2b-256 checksum
How to use checksums
861281d6c52b661ecb6f9cc6a60cb6309f52af893ed5b85be30e8278441babcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
8a5a8f0a1c468526a6d7cbce9c68be74d3163a39a9ec8a882442459b94a1d4fc
BLAKE2b-256 checksum
How to use checksums
69236cef28afe657c27d1a154b7ee1a0e3b98798b993a1d656922c73e896c02e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
feade09262e8be3d34493deac122e7cab2cd1a64b981d5427b97a4fe4335638f
BLAKE2b-256 checksum
How to use checksums
f6a9d543b16bf519c6745f08d8099f3c5ee96e509e23cbc480c2d4213b96c6bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
5228323877d02be0bac4bab6a629bb7e1f6b1691ff67634e61a3e9cf0ff38a9b
BLAKE2b-256 checksum
How to use checksums
9d39e0e534787d103b9222a61e109ebe081fab03c7954ec0c716f976f83ff91c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
b0e1529e15ad1ab690104bf07791a56514d4dc40d05f4700dee70db941e5e8df
BLAKE2b-256 checksum
How to use checksums
975236d8a53b55e68061b626ec1f70c34ee82b1c923879e6f5545496efd86258
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

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

Download URL blastdns-2.0.1-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
c412813cb402b540e29f9006571e0f5e6cd707f78613bfe87493df52af247821
BLAKE2b-256 checksum
How to use checksums
0611572a65cd94998cf11a2d3495e9aa3a4e555b2f86442f5ae1db3326627c84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
b532a852bb7077eb202557e2349df05bbd2bdf58b3ed0f221a50da354dd86bc1
BLAKE2b-256 checksum
How to use checksums
501a469df4e1e604abf77afba76e046aedef802e9801e1b4a6dcc1aa5140cfd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
a0a43bc214fd8624e1c0131c4dca9ff739fec48ad500ae315b7675ad5c8b5baa
BLAKE2b-256 checksum
How to use checksums
af6c8402cfa3fe51d76a2de5cacc37c6c3c1c9cf2fd245ee3ae069a60677f118
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
0bee27cd2b86b0ff72c871d3dc04ab11fc823da22ffc4db92ecd90102bfcc58d
BLAKE2b-256 checksum
How to use checksums
bb9121bbbe492b280f703e42ee875a28e07b55d512686df1b8f143cd9b0aadef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
dc4c5d3700ceec5329737570f6a7bb356cf949f4fc058ffdff665f2cda790c52
BLAKE2b-256 checksum
How to use checksums
c538e73fb34ac0722755509a3cba8c269bee72203447648862fd051620891d0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

Release files / blastdns-2.0.1-cp311-cp311-win32.whl

Download URL blastdns-2.0.1-cp311-cp311-win32.whl
Size 2.4 MB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
d626a08e0c9578bc307a2b30eed1546754309b6c29ba02827e0754771b9984a4
BLAKE2b-256 checksum
How to use checksums
95944d007838f95ef6a4f1618eb2e27c74edaa28f933a4e26df2e6c87d6d0494
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
3d55d90b1f02b79483cea5bcd4570808f42cd29bbb34937bf86d3e3bb113e055
BLAKE2b-256 checksum
How to use checksums
b7d2926695802766e10ca661be6bc6f05885dc8ffb4859ad9a81dc4eda953ceb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
4f71605f9ac4c59dc2b3b56a028d000328dd4ee2f449870d0c58ff66367bfd72
BLAKE2b-256 checksum
How to use checksums
c9108d929783991e7f4cdd47d5001e37f5a23571e992dea3b00829e42b515366
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
95ff91257d453661233ee36c22649e3e86ef33fbd215c1884f481ef0cff90352
BLAKE2b-256 checksum
How to use checksums
0e70d21f5de0b44b1ff9ff609093d5aa7264947aec45417c0087acb9c1fde864
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
2687a4d6ef56ae6a840a0f68c93f2e3d5f3d5539a09fd4a878e58a3368f61e4c
BLAKE2b-256 checksum
How to use checksums
c512f6ce1b38a038e128ee3aec880e3fc81f47b6f868c4c8075f346a72d4b921
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-cp311-cp311-manylinux_2_28_x86_64.whl
Size 2.7 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
890fb0133a3d9846c3982bf93c6e50dfd6c7e2f17b58a56d374da27b3e00aa4f
BLAKE2b-256 checksum
How to use checksums
29163b7f930a2d0ff6a1d0c25b4f4268756318ab23c678447b6eb35928567b81
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
a773ee95532a63d6d732dd4e49bae8cbc0542cf611f39e488fdade314c8ce6fc
BLAKE2b-256 checksum
How to use checksums
f27f88016061db6fcd1eafb25c9d2319fe69d71d9fe3a2c1411254b04d45a0b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
51f79347461b255ead65d63f3eba241a6daa0586f12e942d443ee9e5a24af9c0
BLAKE2b-256 checksum
How to use checksums
77ac7531cab453719637dea2aa3abf69ffa8221e03c934bb429ab89c8443c8d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
fa12551916611eee927e84416e3307fc7788ff18ddb5f97838ec7cac659e7daf
BLAKE2b-256 checksum
How to use checksums
9559753d15749ae35097d7912e1373ef2aac6b1b6316e8f5e5e9405896039f68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
61cd04cd508bd8a6dab4032373126f9f7d7a87483356737d05ed0aa6df66895b
BLAKE2b-256 checksum
How to use checksums
2cdddd0f0631b7cd132175604222c26f45cebf71b98289c48c76d023be98995d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
d598cd7f7c0d25afc56b922159bed6a9f87073171fcc4e564e72697c68225324
BLAKE2b-256 checksum
How to use checksums
1ba248d0429936f135896394e855a12c95dff3cdb62a25abcc00f01574b70680
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
5d9d91e512b3349cc077a341e864061c5ca2cae148b89688596f1ad90629e634
BLAKE2b-256 checksum
How to use checksums
843b82317fe3f279d3f001bb8995a7e4687f3651bbf69e1e14248f8929e79e73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
bc0de2ab9ea9c368d1a20539ff0cbaeabd508d7523e5c33adc4ed348accbaadc
BLAKE2b-256 checksum
How to use checksums
221f031ad4c7dc1a876a3a8d59b24ed3519560d5cf6ae87e104bedac197bfd75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

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

Release files / blastdns-2.0.1-cp310-cp310-win32.whl

Download URL blastdns-2.0.1-cp310-cp310-win32.whl
Size 2.4 MB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
f47bba7c1ce4455bab244cfd9732fff3d3e81c40b1e0cd9dff8fa85cf0eccee2
BLAKE2b-256 checksum
How to use checksums
3b3220a311b32df82552c1efd130d6befad980334cfda3a0132810174a752260
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
e57f9d016d426fdf340a171de65b6d00cfb04980c355fca2182832afbc39c338
BLAKE2b-256 checksum
How to use checksums
e2863f9fefd40236a9ed0d7fcbfd057d2e058567f1808bd5ddaf76136ba1aad3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
ce9485e6bf2f0ff7af5c3381d49c119ea9300b40b726d46db81bf4dd732bbfd1
BLAKE2b-256 checksum
How to use checksums
4c9850966e7a4a58e541126a43d60e369a08c6b0efe61148627049949f1b2b0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
fcf2d2240b943afb04ccbc666d69902c43ae984156da2447e54ce9f63dc9fa2c
BLAKE2b-256 checksum
How to use checksums
66e29ad7db1a4f380219ab13c6be7a2bff62a6e1b7e4c47f39d3abc146a91040
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
540bcffd739c24b16e7815be16142bc524c5fd2e287056b376d7f946f2d79d8f
BLAKE2b-256 checksum
How to use checksums
39c4ef6d35685ec64d06444ed1d714b90c479532f3427c023762bb3712403938
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
410354828c932110cd75cad7fdc7b4cdfd8aee41f7a4c62762f904230d463805
BLAKE2b-256 checksum
How to use checksums
f43dbc3b5f76262668d354e3d623285962957b446808821decba616484e4439a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
b9c2df6d199399e982323b951f92c21c5cba2e9183e3033498ff48374c0daa71
BLAKE2b-256 checksum
How to use checksums
cfb411560b17d3ac6debd34f5681c84155b1a7a33ece19a49155dde695657f92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
aecd8655f3e431f1592c91655ece7e1fcbf81f0f81802d88860e6fbdc503b044
BLAKE2b-256 checksum
How to use checksums
8067cdc76bce53fd6cdef3c18f10e96d12aa38e7daa589e645877f399affcc4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
14d21b20e6d9b5c0601df966280130d0a3f462c08c7054aaae25bc507c1e28a0
BLAKE2b-256 checksum
How to use checksums
009a872fbb6848a17ba179257009f8c0316d8867bc1e62d26eab938581ecfeef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
105f51b1c36bdc3dcaff23f73d2859e8b46c9363d8b9576de542c3df8ead5a28
BLAKE2b-256 checksum
How to use checksums
60b96f338072236d73111ecbadb3f543a0c795dc82fe2a52225a0fbabfa563c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
07dfd241715bf5ce2a84d77278e3dc93f801f5ba3e70adb4471b5fa7d453e1c2
BLAKE2b-256 checksum
How to use checksums
0f0f3824ed4d20bd01d5e06361c121ee96ec10e1f974ebf42126f64aa13d64de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
ec47e2ed177fb5a1edaae6a2046879bf19b448e41c2d389dc4c2b300305d2a3f
BLAKE2b-256 checksum
How to use checksums
ee409c786955189291ac6d8ed60c3d58b9278878a7d3852e8e1c65e092bbb362
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
38ddefa80af5c86eb83812251d41183a4716eb86b49a54a40fcce2f06c3698cd
BLAKE2b-256 checksum
How to use checksums
fb122317dcf0ac5f4fc4e7760d969950e5c62be05103251386b34ac1b91c9598
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
d0f7f5c18447d2708d14af15aa5fb64ce8c37d1397ff86569b1d91827b0bdac7
BLAKE2b-256 checksum
How to use checksums
1b2ca26ca0837a0e2930f4923cb5e0383dd8d77a8a93d9d613270fa63904bd67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
e63285a75ffb06326bdefb5e9ffb10af935f54811951bfb2fb197e2fbc62472b
BLAKE2b-256 checksum
How to use checksums
421ee5fbf1a50b6e3db3a0e6943721beae45957e986c97f915fe0582cd121dc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-cp39-cp39-manylinux_2_28_x86_64.whl
Size 2.7 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
39554e1587f0adc4657cb759a3d99b15d39903873c5383089aa3710de00c6a5d
BLAKE2b-256 checksum
How to use checksums
4fa5431f4fed24b2c6b470a6cf6e5b683041756c462ca078dd4b1a46f2c9f492
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
6d6e72926ee60252203f8bbfb1639507177d99085b1b98527a88aea37d3ecd43
BLAKE2b-256 checksum
How to use checksums
53a2135bda598fc667c09c105688d5817f9fbaf93f066450d0424ff5d89bcc66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
7283c46e41960a81652f5e37519ea480f40d940c8281ac5c81a37f87f8a624c4
BLAKE2b-256 checksum
How to use checksums
0f4e87142a936f6b53c50ea95754e30df00abb5d7081a219157ee15b87ca32f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
7d579e74c6778499c58a2d6e36e55bad18a30b5724484eb36f3a52cd825d3602
BLAKE2b-256 checksum
How to use checksums
4f4bae79db38d4082318154d6a9fff669caeaec46785730de0da9ba94e679063
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
e028295edc3e440c00c16a8f7dcd36ef4b2caf315dda1f686ee66abb57c3e5d9
BLAKE2b-256 checksum
How to use checksums
3d1e9e7b56a36a80ca4833f97d7a50e9447caeb8e5760c79c2a914e8605a2e06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

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

Download URL blastdns-2.0.1-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
accc098c92c1ce18bd19ce9a927a3311b2de0da14ff8e3277eaa9d85be435b1a
BLAKE2b-256 checksum
How to use checksums
03237be76e8e697a9aaaf27082d73eb7a076558c0e9fc795f95e2ae2803576f5
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.1 This release

99 release files

2.0.0

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