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.14.tar.gz (131.3 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.14-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.14-cp311-abi3-manylinux_2_28_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11+macOS 11.0+ ARM64

vacant-0.4.14-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.14.tar.gz.

File metadata

  • Download URL: vacant-0.4.14.tar.gz
  • Upload date:
  • Size: 131.3 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.14.tar.gz
Algorithm Hash digest
SHA256 edf9df1024978b39cbdf5c995ce72522385c6124966604fffc5527363fe62b23
MD5 cfcd7d9822fe8367d3b7d4248fb2c71b
BLAKE2b-256 83faff9da758d2c5be1cce4aa52ba92acdfe291f1d78bf18ac401954bce237c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.14-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 944da329ecb7073c572effdfe790a2ee99fc18e4e8e3fd747aad30f21507b072
MD5 d977a6e1663cc3a320bdc8f32aa24dd9
BLAKE2b-256 77acf46a47e1f68a605cb104652189108926a44304a4fc957502cf631cc2ca6a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.14-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7767e1615ea64552e3a1ddc08afa66a28f6a46349fd8c85ac3c30215c8a38716
MD5 544ec15c6ffbdc72192482eef68d55f6
BLAKE2b-256 896152a683cd52493d75f41b9272e31cda93450c5cafa3817054d7d91244853c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.14-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c74c300812818125d59000cd2fb43fec3166b6f6b8a501d03dbd5051bff84e80
MD5 b2ac23ecc0d63926113cb737ca86be60
BLAKE2b-256 229d13a91c5e9b1ccebacdff33094311c1e3076bb129304e691ba7c66e2f6cca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.14-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 801c4792474ac820f2ec5aac32abc8c2001aecee341cbee524fc562c5072d8bb
MD5 24e713fba59a767e7b2703981b86e05d
BLAKE2b-256 00e561ec7a6cc942f7f9483fca7a09fdc4fb817abe5569d120b669c863b7bcc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vacant-0.4.14-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