Skip to main content

Python bindings for the vacant Rust engine — domain availability via authoritative DNS.

Project description

vacant — domain availability via authoritative DNS

PyPI crates.io

Python bindings for the vacant Rust engine. Asks the authoritative TLD nameservers directly instead of WHOIS — fast, no rate limits, no waiting.

The wheel ships the same Rust engine compiled in, with a small Python facade and a vacant CLI entry point. Lockstep-versioned with the vacant crate: vacant 0.3.x (Python) wraps vacant 0.3.x (Rust) exactly.

Install

Pick the path that matches how you'll use it:

CLI

brew install alltuner/tap/vacant   # macOS, Linux — native Rust binary
cargo install vacant               # any platform with a Rust toolchain
uvx vacant google.com              # one-shot, no install (Python wheel)

The brew / cargo paths give you the native Rust binary (instant startup, ideal for daily use). uvx runs the Python wheel — convenient when you don't want to install anything, slightly slower to start because it boots a Python interpreter.

Library

pip install vacant
# or with uv:
uv add vacant
from vacant import check_many, Status

results = check_many(["example.com", "anthropic.com", "totally-made-up-zxqv.cat"])
for r in results:
    print(r.domain, r.status.value, r.detail)

The on-disk SQLite cache is shared with the Rust CLI — runs against the same ~/.cache/vacant/results.db, so the brew binary and a Python script see each other's results.

from vacant import DiskCache, check_many

cache = DiskCache()  # default ~/.cache/vacant/results.db
results = check_many(["example.com"], cache=cache)

How it works

vacant.check_many calls into the Rust engine via PyO3 (vacant._core). The engine:

  1. Normalizes the input.
  2. Looks up cache; returns hits immediately.
  3. Runs a per-zone precheck (length, charset, reserved labels) from the bundled rules.toml.
  4. For inputs that pass, asks the parent zone's NS directly. Delegation → registered; NXDOMAIN/NODATA → unconfirmed (not delegated, not verified). Pass verify=True to confirm unconfirmed names against the registry's RDAP endpoint, promoting them to available (404) or registered (200, e.g. a held domain). available only ever means RDAP-confirmed.

available is not a registrability guarantee, though: new gTLD registries (especially community/city zones like .barcelona, .cat, .amsterdam, .berlin) keep reservation and premium lists invisible to DNS, WHOIS, and RDAP, so a name can read available yet still be refused at checkout (e.g. radio.barcelona). Tracked for an in-engine fix in #26.

Cache shape, rules format, and verdict semantics are all the engine's — see alltuner/vacant for the source of truth.

Develop

The Python package lives in the alltuner/vacant monorepo alongside the Rust engine, so dev commands run from the repo root:

just                 # menu
just py-develop      # build the maturin extension into the local venv
just py-check        # ruff + pytest
just py-wheel        # build a release wheel locally

License

MIT — see ../LICENSE.

Project details


Download files

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

Source Distribution

vacant-0.4.6.tar.gz (121.4 kB view details)

Uploaded Source

Built Distributions

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

vacant-0.4.6-cp311-abi3-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

vacant-0.4.6-cp311-abi3-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

vacant-0.4.6-cp311-abi3-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

vacant-0.4.6-cp311-abi3-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file vacant-0.4.6.tar.gz.

File metadata

  • Download URL: vacant-0.4.6.tar.gz
  • Upload date:
  • Size: 121.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vacant-0.4.6.tar.gz
Algorithm Hash digest
SHA256 d1b133656c2612d85046afdc500e3a02f1a6f07960ca1d830d926f5678e1ac3f
MD5 ec508f99bef7bba9ef129d6c6d4a0de5
BLAKE2b-256 d4a571e546d520bbb228c340560df2bc563499d7fad2d8a05d64fda945d329e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.6.tar.gz:

Publisher: release.yml on alltuner/vacant

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

File details

Details for the file vacant-0.4.6-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vacant-0.4.6-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee8eecf7f7a4b544c2818c6346ff95a0974fd90a1b8541520974ed8ab690173e
MD5 73c9e1f99f7bcd4d88d82f83d7222bbe
BLAKE2b-256 9cd78bcec07e67ccf004f5d9e6188cc916fd4b711174b330294f2dde96ff6e2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.6-cp311-abi3-manylinux_2_28_x86_64.whl:

Publisher: release.yml on alltuner/vacant

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

File details

Details for the file vacant-0.4.6-cp311-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for vacant-0.4.6-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2b55a57e158eb74b823b039ffea5f78fe6f3fae60f547e19b45e2af86c922910
MD5 c6ac627b5ad31307473fe44a53ca2104
BLAKE2b-256 95ddc56bf8131d8cbc560aab7ac7e6f3afd720cad4e70e95a201a315fd233d3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.6-cp311-abi3-manylinux_2_28_aarch64.whl:

Publisher: release.yml on alltuner/vacant

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

File details

Details for the file vacant-0.4.6-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vacant-0.4.6-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a9974362f5a0854ca3392f9f9c690edcf2563d869573b2347855eddb50b84d10
MD5 4bdb315320dde863181008ec22534ac5
BLAKE2b-256 3ebfaf8dc7ab2bca4652373d88e2e1d2a785221e375a2145f6f1b369e92182d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.6-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on alltuner/vacant

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

File details

Details for the file vacant-0.4.6-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vacant-0.4.6-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0de0a8867cfed0944ab0a1d0264dffa00d4c2f148b53cf540f4a9caff6be85a3
MD5 36e14d870323053b71f1285651c945f6
BLAKE2b-256 48e5c45b29ea72f6ebdba02dba3ae542cb19a6e1f2ae486026770bbdbe99abfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.6-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on alltuner/vacant

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

Supported by

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