automattic/dn-cli

CLI tool for Automattic Domain Services API

Maintainers

Package info

github.com/Automattic/dn-cli

pkg:composer/automattic/dn-cli

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 3

Open Issues: 0

v1.1.0 2026-03-11 09:07 UTC

This package is auto-updated.

Last update: 2026-03-11 09:08:24 UTC


README

Manage domains from your terminal. dn works in two modes: directly through the Automattic Domain Services API (partner mode), or through WordPress.com (user mode).

Installation

Composer (global)

composer global require automattic/dn-cli

Make sure ~/.composer/vendor/bin (or ~/.config/composer/vendor/bin) is in your PATH:

export PATH="$HOME/.composer/vendor/bin:$PATH"

From source

git clone https://github.com/Automattic/dn-cli.git
cd dn-cli
composer install

Then run with ./bin/dn or symlink it into your PATH:

ln -s "$(pwd)/bin/dn" /usr/local/bin/dn

Setup

Run dn configure to pick a mode and authenticate:

  • User mode — WordPress.com OAuth. Requires a WordPress.com account.
  • Partner mode — Automattic Domain Services API. Requires an API key and API user.

Your mode determines which commands are available. User mode covers domain search and purchase through WordPress.com checkout. Partner mode gives you the full set: registration, DNS, contacts, privacy, transfers.

Non-interactive setup

Pipe credentials via stdin for scripts and CI/CD:

# Partner mode
printf '%s\n%s\n' "$DN_API_KEY" "$DN_API_USER" | dn configure --mode=partner --stdin

# User mode (pipe an OAuth token)
printf '%s\n' "$DN_OAUTH_TOKEN" | dn configure --mode=user --stdin

Environment variables

Environment variables override the config file:

# Partner mode
export DN_API_KEY="your-api-key"
export DN_API_USER="your-api-user"
export DN_API_URL="https://custom-endpoint.example.com/command"  # optional

# User mode
export DN_OAUTH_TOKEN="your-oauth-token"

# Override mode regardless of config file
export DN_MODE="user"  # or "partner"

# Auto-checkout preference (user mode)
export DN_AUTO_CHECKOUT="both"  # "credits", "card", or "both"

Config file

Stored at ~/.config/dn/config.json with 0600 permissions:

{
    "mode": "partner",
    "api_key": "your-api-key",
    "api_user": "your-api-user"
}
{
    "mode": "user",
    "oauth_token": "your-oauth-token",
    "auto_checkout": "both"
}

To remove stored credentials:

dn reset

Commands

Check domain availability

Both modes.

dn check example.com
dn check example.com example.net example.org

Get domain suggestions

Both modes.

dn suggest "coffee shop"

# Filter by TLDs and limit results
dn suggest "coffee" --tlds=com,net,io --count=20

# Exact match only
dn suggest "mycoffee" --exact

Register a domain

In partner mode, registers the domain directly:

# Interactive — prompts for contact details
dn register newdomain.com

# Non-interactive with all options
dn register newdomain.com \
  --first-name=Jane \
  --last-name=Doe \
  --email=jane@example.com \
  --phone=+1.5551234567 \
  --address="123 Main St" \
  --city="San Francisco" \
  --state=CA \
  --postal-code=94110 \
  --country=US \
  --period=2 \
  --privacy=on

In user mode, adds the domain to your WordPress.com cart and prints a checkout link:

dn register newdomain.com

# With a specific site
dn register newdomain.com --site=mysite.wordpress.com

Auto-checkout (user mode)

Complete purchases from the terminal without opening a browser. Requires a saved payment method or account credits, and contact information on file from a previous purchase.

# Auto-checkout: try credits first, then stored card
dn register newdomain.com --auto-checkout

# Use account credits only
dn register newdomain.com --auto-pay-credits

# Use a stored payment method only
dn register newdomain.com --auto-pay-card

# Skip confirmation prompt (for scripts)
dn register newdomain.com --auto-checkout --yes

Set a persistent preference during dn configure or with the DN_AUTO_CHECKOUT environment variable (credits, card, or both).

Cart and checkout (user mode)

dn cart
dn checkout
dn checkout --site=mysite.wordpress.com

dn register adds to cart, dn cart shows what's in it, dn checkout opens WordPress.com checkout in your browser.

Domain information

Partner mode. In user mode, points you to WordPress.com.

dn info example.com

Partner mode commands

The remaining commands are partner mode only. In user mode, they'll point you to WordPress.com where you can manage these settings.

dn renew example.com --expiration-year=2026 --period=1
dn delete example.com
dn restore example.com
dn transfer example.com --auth-code=ABC123XYZ

DNS

dn dns:get example.com
dn dns:set example.com --type=A --name=@ --value=1.2.3.4 --ttl=3600
dn dns:set example.com --type=A --name=@ --value=1.2.3.4 --value=5.6.7.8

Supported record types: A, AAAA, ALIAS, CAA, CNAME, MX, NS, PTR, TXT, SRV.

Contacts, privacy, transfer lock

dn contacts:set example.com
dn contacts:set example.com --type=admin --first-name=Jane --last-name=Doe --email=admin@example.com

dn privacy example.com on      # enable privacy service
dn privacy example.com off     # disclose contact info
dn privacy example.com redact  # redact contact info

dn transferlock example.com on
dn transferlock example.com off

Command reference

Command Mode Description
dn configure Set up credentials and select mode
dn reset Remove stored configuration
dn check <domain>... both Check availability and pricing
dn suggest <query> both Get domain name suggestions
dn register <domain> both Register a domain (partner) or add to cart (user)
dn cart user View your shopping cart
dn checkout user Open WordPress.com checkout in browser
dn info <domain> partner Domain details and status
dn renew <domain> partner Renew registration
dn delete <domain> partner Delete a domain
dn restore <domain> partner Restore a deleted domain
dn transfer <domain> partner Transfer a domain in
dn dns:get <domain> partner View DNS records
dn dns:set <domain> partner Set DNS records
dn contacts:set <domain> partner Update contact information
dn privacy <domain> <on|off|redact> partner WHOIS privacy settings
dn transferlock <domain> <on|off> partner Transfer lock control

Claude Code plugin

If you use Claude Code, you can install the domain-names plugin for guided domain management skills:

/plugin marketplace add Automattic/dn-cli
/plugin install domain-names

Run /domain-names:setup to verify the CLI is installed and configured. Then use skills like /domain-names:dn-check, /domain-names:dn-register, etc.

Shell completion

# Bash
dn completion bash | sudo tee /etc/bash_completion.d/dn

# Zsh
dn completion zsh | sudo tee /usr/local/share/zsh/site-functions/_dn

# Fish
dn completion fish | tee ~/.config/fish/completions/dn.fish

License

GPL-2.0-or-later