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.13.tar.gz (129.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.13-cp311-abi3-manylinux_2_28_x86_64.whl (5.1 MB view details)

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

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

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11+macOS 11.0+ ARM64

vacant-0.4.13-cp311-abi3-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: vacant-0.4.13.tar.gz
  • Upload date:
  • Size: 129.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.13.tar.gz
Algorithm Hash digest
SHA256 b15994776b8425cf95850770494d6324f4a3ebf02bcd19c0d5d90a4bd241356e
MD5 17f00bd2cc1898426f2c3399a3634204
BLAKE2b-256 30997f6d08d9757986863913af9968f83160df6be8ab31e4a62192d421dc2f0f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.13-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da43077cc3dbfc676f6a128667d842511025c6afb53f3878710eb0d07ff03bac
MD5 c80c111f6badcfdce15d1e1f8ca593b0
BLAKE2b-256 3bff23acce9f1f7f9212c9db39b65ee84498d9a29d5753d06b9599263475139a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.13-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f951b361e81db052cdd7702c2307a1f0c6fee0b7e392af5011eb60e393ad5677
MD5 038ba5fd7e3235383a83a86076e26fd5
BLAKE2b-256 8f0e5195e91d2e202d55b659bf6bcbbef53f7a7b04a35ee4bd571b68d0ba016b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.13-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c4f8296078193b3e42c92732cd7c49a0b52f5e6ebaa2e64f9dea446624634186
MD5 381ad90266f3b01bef11fa48a3d0d406
BLAKE2b-256 9e41b7da83560df6d0714ec6b75118cbe6d0bcbe6342d7939025fb185fb6d760

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.13-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7d655b1acc2ad48979d1f5bb118f0adbac8f685e884d5c80e2c351eaf37975d6
MD5 d5c68dd6ec0e73f6b6bcedd3eef07782
BLAKE2b-256 ec3ebf9881ccc559cf79c00af948e9010e683c7c5ed4a765221869f5e5b4c930

See more details on using hashes here.

Provenance

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