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.

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.

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.11.tar.gz (128.9 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.11-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.11-cp311-abi3-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11+macOS 11.0+ ARM64

vacant-0.4.11-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.11.tar.gz.

File metadata

  • Download URL: vacant-0.4.11.tar.gz
  • Upload date:
  • Size: 128.9 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.11.tar.gz
Algorithm Hash digest
SHA256 2956883201a78f899021b64ab0c2b327295e637994f7a4285779c5e49132a69e
MD5 e8682ab69cd5e03413805a127d0c3842
BLAKE2b-256 365560e214942339b738648bfd7a805e49c1aad46d2446d6737fe0e6374fd3fc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.11-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 434b7605aab1a4f56f2f958353235bc6f8009a3de35625fb6c96a75f10f7fa4d
MD5 dcdea7d7754dd1c7dcffef3e998db825
BLAKE2b-256 5c4da71ca86a07a5db0d32f4a3f6100a6650dc6a18803a17efaede816138a2db

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.11-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7cd5326eae0244ee5a8f126367095001b1a1c271c261ef905f051c31c68af2c6
MD5 7ee253c83e1da84692406e880ac24e5d
BLAKE2b-256 39a390d42154d44f41dd67cf6660c8e3c30927bd8fc91b0889991c4189a2cc67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.11-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef7605de771cccf3730ae237748ac1d3904b532203d5e210c39031d68ee6a862
MD5 7d267e7dbb0d1dcc46589397c68b1d6b
BLAKE2b-256 d5c2cfe00f425de88a8a771e621e38652ccb39d8c0c4833335a7ddc494ce9970

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for vacant-0.4.11-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c163363980e123be816f694a306a95a21d16bb0240aa29693336f9ab398aee80
MD5 293c90ba33bfa98b230f877e72486709
BLAKE2b-256 3625e817c4b809cee8e2e7a759541b6aa04d1b8e9243957072515e8344559aec

See more details on using hashes here.

Provenance

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