Skip to main content

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.

Prefer a browser? vacant.alltuner.com is a hosted web UI built on vacant — a separate app that uses this package, not something it installs.

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.

MCP server

Expose vacant to AI agents over the Model Context Protocol (stdio). Needs the mcp extra:

uvx --from 'vacant[mcp]' vacant mcp

It registers one tool — check_domains(domains, verify=false) — returning a {domain, status} per input. Point any MCP client at it:

{ "mcpServers": { "vacant": { "command": "uvx", "args": ["--from", "vacant[mcp]", "vacant", "mcp"] } } }

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.

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.15.tar.gz (132.5 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.15-cp311-abi3-manylinux_2_28_x86_64.whl (7.5 MB view details)

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

vacant-0.4.15-cp311-abi3-manylinux_2_28_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11+macOS 11.0+ ARM64

vacant-0.4.15-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.15.tar.gz.

File metadata

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

File hashes

Hashes for vacant-0.4.15.tar.gz
Algorithm Hash digest
SHA256 b1487aa0572fe2a3071c5dfb461aaced0f0544368ed52340157b405320dcfb7d
MD5 ea10c62dfe4546ea664bb1a24eadb250
BLAKE2b-256 e22b39098c7d9b21fc49dd653f07a9852a9797aca194eb0c4816e27dde9ee255

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.15.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.15-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vacant-0.4.15-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 32e40aa400ce6b9428cf9236179d6d9965c6620b165dd23942afab19fb3d8f39
MD5 8ddd3361c7a49375566e48dab041ef13
BLAKE2b-256 13267db08dc0e7c3521150c7cbb54d5d79a348ceb90b81974eb4a37f53b11e70

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.15-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.15-cp311-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for vacant-0.4.15-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 79a0a5360e4ee0894011f99bf0c4a31666c084407767ea2cd06adaaabdf81824
MD5 3370ac3727f78a234b5c492ccd2186a8
BLAKE2b-256 1ebed9d57e01fbfecd221b63654bf462579e0c7d6bbe7266bf5b2d628064067f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.15-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.15-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vacant-0.4.15-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ce716c0e2985e9eabf510671222f4f8b10b244cf6cb5be6ac2d3dc67e27fff7
MD5 0cc3ba665c96526ee183908e1006676b
BLAKE2b-256 400e7d13d06861df8634247f133fc61ca14ee40f59d3110e3e422c120454af8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.15-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.15-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vacant-0.4.15-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 657c50f36286e35cc0cedd987c0af443716e8dff2bbea46930e2727c613d40f1
MD5 75044842e2d3166dd4ef27c8ee2655d2
BLAKE2b-256 dba7aed49d965d7e46fa0e3597e141300e7d8a7fe4694826e4aa873c4c022807

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.15-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 Sentry Error logging StatusPage Status page