vacant — domain availability via authoritative DNS
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:
- Normalizes the input.
- Looks up cache; returns hits immediately.
- Runs a per-zone precheck (length, charset, reserved labels) from the bundled
rules.toml. - For inputs that pass, asks the parent zone's NS directly. Delegation →
registered; NXDOMAIN/NODATA →unconfirmed(not delegated, not verified). Passverify=Trueto confirmunconfirmednames against the registry's RDAP endpoint, promoting them toavailable(404) orregistered(200, e.g. a held domain).availableonly 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.
Release files for vacant 0.4.15
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vacant-0.4.15.tar.gz | 132.5 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| vacant-0.4.15-cp311-abi3-manylinux_2_28_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| vacant-0.4.15-cp311-abi3-manylinux_2_28_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| vacant-0.4.15-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| vacant-0.4.15-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 24.7 MB
Release files / vacant-0.4.15.tar.gz
| Download URL | vacant-0.4.15.tar.gz |
|---|---|
| Size | 132.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1487aa0572fe2a3071c5dfb461aaced0f0544368ed52340157b405320dcfb7d
|
|
BLAKE2b-256 checksum How to use checksums |
e22b39098c7d9b21fc49dd653f07a9852a9797aca194eb0c4816e27dde9ee255
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency logRelease files / vacant-0.4.15-cp311-abi3-manylinux_2_28_x86_64.whl
| Download URL | vacant-0.4.15-cp311-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 7.5 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
32e40aa400ce6b9428cf9236179d6d9965c6620b165dd23942afab19fb3d8f39
|
|
BLAKE2b-256 checksum How to use checksums |
13267db08dc0e7c3521150c7cbb54d5d79a348ceb90b81974eb4a37f53b11e70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency logRelease files / vacant-0.4.15-cp311-abi3-manylinux_2_28_aarch64.whl
| Download URL | vacant-0.4.15-cp311-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 7.6 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
79a0a5360e4ee0894011f99bf0c4a31666c084407767ea2cd06adaaabdf81824
|
|
BLAKE2b-256 checksum How to use checksums |
1ebed9d57e01fbfecd221b63654bf462579e0c7d6bbe7266bf5b2d628064067f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency logRelease files / vacant-0.4.15-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | vacant-0.4.15-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3ce716c0e2985e9eabf510671222f4f8b10b244cf6cb5be6ac2d3dc67e27fff7
|
|
BLAKE2b-256 checksum How to use checksums |
400e7d13d06861df8634247f133fc61ca14ee40f59d3110e3e422c120454af8c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency logRelease files / vacant-0.4.15-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | vacant-0.4.15-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
657c50f36286e35cc0cedd987c0af443716e8dff2bbea46930e2727c613d40f1
|
|
BLAKE2b-256 checksum How to use checksums |
dba7aed49d965d7e46fa0e3597e141300e7d8a7fe4694826e4aa873c4c022807
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency log