lemon-domains
v1.2.0
Published
The Lemon Domains command line: every domain you own across your registrars, plus reports, availability and transfer checks on any domain. The same operations as the Lemon Domains REST API and MCP server.
Downloads
776
Maintainers
Readme
lemon
The Lemon Domains command line. Every domain you own, across all your registrars, from your terminal, scripts, CI jobs and AI agents: list and update domains, organise projects and registrar accounts, watch any domain for changes, and run reports, availability checks and transfer checks on any domain.
lemon covers every endpoint of the Lemon Domains REST API, which runs the same operations as the Lemon Domains MCP server. One API token works for all three.
Runs on Node 18 or later with no dependencies.
npm install -g lemon-domains
lemon login
lemon domains expiring --within-days 60DOMAIN EXPIRES STATUS REGISTRAR PROJECT
getzestly.com 2026-11-03 Expiring soon Porkbun Zestly
lemonade-labs.io 2026-11-19 Expiring soon Namecheap Side projects
zestly.app 2026-12-08 Active Cloudflare ZestlyExample output with made-up domains.
No account needed for checks
Domain reports, transfer checks and availability work without signing in:
npx lemon-domains report example.com --md
npx lemon-domains check lemonade getzestly --tlds com,io,ai
npx lemon-domains transfer example.comSigned in, they count toward your account's higher limits.
The same checks run in the browser: domain report, bulk domain availability checker and domain transfer checker.
Sign in
Create an API token at lemon.domains/api-access (read only, or read and write), then:
lemon login # paste the token; it is saved to ~/.config/lemon-domains/config.json
lemon whoamiIn CI or a container, set LEMON_TOKEN instead, or pass --token to one command.
Output for people, scripts and agents
Lists print as a table and single records as a list in the terminal. Every command also takes:
| Flag | Output |
| --- | --- |
| --json | JSON, exactly as the API sends it |
| --md | Markdown, for notes, tickets and AI agents |
| --csv | CSV, for commands that answer with a list |
lemon domains list --all follows every page. lemon commands --json prints every command, option and type, so an agent can learn the whole CLI in one call.
Options and input
Options are the API's own fields in kebab case: expiringWithinDays is --expiring-within-days. Booleans take --auto-renew or --no-auto-renew. Lists take commas (--tlds com,io). Any value can come from a file with @path or from standard input with -, and --data sends a whole JSON body:
lemon domains bulk-add --domains @domains.json
lemon domains update <id> --data '{"notes": "Renew in March", "autoRenew": true}'Deletes that take projects, registrars or accounts with them show what would go and ask first. Add --confirm to skip the question in scripts.
Tab completion
eval "$(lemon completion bash)" # in ~/.bashrc
eval "$(lemon completion zsh)" # in ~/.zshrc, after compinit
lemon completion fish > ~/.config/fish/completions/lemon.fishCommands
Generated from the API's route table, so it always matches the API.
Account
| Command | What it does |
| --- | --- |
| lemon whoami | The account and token making the request. Handy for checking a token works. |
Workspaces
| Command | What it does |
| --- | --- |
| lemon workspaces list | The workspaces you belong to, with your role and access in each. |
Domains
| Command | What it does |
| --- | --- |
| lemon domains list | List domains, with filters and paging. |
| lemon domains add <domain> | Add a domain to a project under a registrar account. |
| lemon domains bulk-add | Add up to 200 domains in one request. A bad entry never fails the batch. |
| lemon domains lookup <domains...> | Look domains up in the public registry: registrar, expiry, and whether each is already in your account. |
| lemon domains quick-add | Add domains by registrar name. Projects and registrar accounts are found or created for you. |
| lemon domains expiring | Domains that expire within a number of days, soonest first. |
| lemon domains get <domain> | Get one domain by id or by its exact name, e.g. /domains/example.com. |
| lemon domains update <id> | Update a domain. Only the fields you send change. |
| lemon domains delete <id> | Delete a domain. Owners only; Editors archive instead. |
Projects
| Command | What it does |
| --- | --- |
| lemon projects list | List the projects you can see, with your role in each. |
| lemon projects add <name> | Create a project in a workspace. |
| lemon projects update <id> | Rename a project or change its description. |
| lemon projects delete <id> | Delete a project and all its domains. Owner only. Asks before deleting; --confirm skips the question. |
Registrars
| Command | What it does |
| --- | --- |
| lemon registrars list | List your registrars with their account counts. |
| lemon registrars add <name> | Add a registrar, such as Namecheap or Porkbun. |
| lemon registrars update <id> | Update a registrar's name or URL. |
| lemon registrars delete <id> | Delete a registrar with its accounts and their domains. Asks before deleting; --confirm skips the question. |
Registrar accounts
| Command | What it does |
| --- | --- |
| lemon accounts list | List your registrar accounts, optionally for one registrar. |
| lemon accounts add | Add an account under one of your registrars. |
| lemon accounts update <id> | Update a registrar account. |
| lemon accounts delete <id> | Delete a registrar account and its domains. Asks before deleting; --confirm skips the question. |
Sync
| Command | What it does |
| --- | --- |
| lemon sync logs | Recent registrar sync results across your accounts. |
Monitoring
| Command | What it does |
| --- | --- |
| lemon monitor list | Every monitored domain in a workspace, yours and watched, with its latest change. |
| lemon monitor watch <domains...> | Start watching domains you don't own, up to 1,000 per workspace. |
| lemon monitor unwatch <domain> | Stop watching a domain. |
| lemon monitor changes [domain] | What changed on monitored domains, newest first, with filters for domain, kind and date. |
DNS
| Command | What it does |
| --- | --- |
| lemon dns list <domain> | A domain's DNS records, read live from its DNS host, and its latest DNS changes. |
| lemon dns plan <domain> | Plan DNS record changes without making them. Returns a changeId valid for 10 minutes. |
| lemon dns apply <changeId> | Make a planned DNS change at the domain's DNS host. |
| lemon dns undo <changeId> | Put the records back the way they were before an applied change. |
Registrar settings
| Command | What it does |
| --- | --- |
| lemon settings show <domain> | A domain's auto-renew, transfer lock and nameservers, read live from its registrar, and its latest settings changes. |
| lemon settings plan <domain> | Plan a change to auto-renew, the transfer lock or nameservers without making it. Returns a changeId valid for 10 minutes. |
| lemon settings apply <changeId> | Make a planned settings change at the domain's registrar. Nameserver changes wait 24 hours first and come back as scheduled. |
| lemon settings undo <changeId> | Put the settings back the way they were before an applied change. |
| lemon settings stop <changeId> | Stop a nameserver or transfer lock change that is still waiting out its 24-hour safety delay. |
Webhooks
| Command | What it does |
| --- | --- |
| lemon webhooks list | The webhooks of the workspaces you own, with events, filters and status. |
| lemon webhooks add <url> | Add a webhook. Returns its signing secret once. |
| lemon webhooks update <id> | Change a webhook's URL, events or filters, or pause and resume it. |
| lemon webhooks remove <id> | Delete a webhook and its delivery log. |
| lemon webhooks test <id> | Send a test event now and return the result. |
| lemon webhooks rotate <id> | A new signing secret, returned once; the old one keeps signing for 24 hours. |
| lemon webhooks deliveries <id> | A webhook's deliveries from the last 30 days, newest first. |
| lemon webhooks resend <deliveryId> | Send one delivery again now, with the same event id. |
Domain intelligence
| Command | What it does |
| --- | --- |
| lemon report <domain> | Everything about one domain: registration, locks, status codes, DNS, website, certificate, email, history, transfer readiness and issues. Works without an account. |
| lemon check <names...> | Whether up to 50 names are free to register: full domains, or words combined with extensions: available, taken (with registrar and expiry), dropping soon or unknown. Works without an account. |
| lemon transfer <domain> | Whether a domain can move to another registrar today, and how. Works without an account. |
| lemon propagation <domain> | Whether a DNS record has reached resolvers worldwide. and optionally &type=MX (default A). Works without an account. |
| lemon whois <domains...> | Registration data for up to 50 domains from the registries. Works without an account. |
| lemon dns lookup <domain> | A name's public DNS records, explained. and optionally &type=MX. Works without an account. |
| lemon ssl <domain> | The HTTPS certificate a host serves. Works without an account. |
| lemon email <domain> | MX, SPF, DMARC, DKIM, BIMI, MTA-STS and TLS-RPT checks for a domain, with a score. Works without an account. |
| lemon punycode <domain> | A domain's Unicode and punycode (ASCII) forms. Works without an account. |
| lemon redirects <url> | Every redirect from a URL or domain, the final page's headers and a security header grade. or ?url=example.com. Works without an account. |
| lemon blacklist <query> | Whether a domain, its mail servers and website, or an IPv4 address are on public email blocklists, with how to get removed. or ?query=203.0.113.10. Works without an account. |
| lemon down <domain> | Whether a website is down for everyone, from several locations. Works without an account. |
| lemon ports <domain> | Whether a domain's server is reachable on its common web and mail ports. and optionally &ports=443,587. Works without an account. |
| lemon email-headers <file> | Explain an email's raw headers: route with delays, SPF, DKIM and DMARC results and alignment, and signs of spoofing. Send {"headers": "..."}. Nothing is stored. Works without an account. |
| lemon hosting <domain> | Who hosts a domain's website, DNS and email, or who holds an IP address. or ?domain=8.8.8.8. Works without an account. |
| lemon dns health <domain> | About 30 checks of a domain's DNS setup (nameservers, delegation and glue, SOA, DNSSEC, website and email records), each a pass, warning, problem or note with a plain fix. Works without an account. |
| lemon lookalikes <domain> | Lookalike domains of a domain and which are registered, with registrar, creation date, website and mail. Works without an account. |
| lemon decode-cert <file> | Decode a certificate, chain or CSR. Send {"pem": "..."} with the PEM text. Works without an account. |
| lemon spf <domain> | A domain's SPF record explained, with DNS lookups counted through every include and mistakes flagged. Works without an account. |
| lemon dmarc <domain> | A domain's DMARC record explained: the policy for failing mail, where reports go, and what to change. Works without an account. |
| lemon dkim <domain> | A domain's DKIM keys, found on a selector or 30 common ones, with key size and mistakes flagged. and optionally &selector=google. Works without an account. |
| lemon dmarc-report <file> | Explain a DMARC aggregate report: who sends as the domain, how much passes SPF, DKIM and DMARC, and what to change. Send {"report": "..."}, the XML or a .zip or .gz report as base64. Nothing is stored. Works without an account. |
| lemon site-files <domain> | robots.txt, sitemap, share preview tags, favicon and web app manifest checks for a site, each with a fix. Works without an account. |
| lemon subnet <cidr> | Network, broadcast, host range and masks for an IPv4 or IPv6 block. and optionally &split=26. Works without an account. |
| lemon subdomains <domain> | Subdomains of a domain from certificate transparency logs, with whether each still resolves. Works without an account. |
Run lemon <command> --help for each command's options.
Versions
lemon follows semantic versioning. Commands and flags stay in every 1.x release, and a renamed command keeps its old name. The REST API and MCP server it runs on only grow, too: see versioning and compatibility.
Exit codes
| Code | Meaning | | --- | --- | | 0 | Done | | 1 | The API said no: not found, not allowed, a limit, or a delete you didn't confirm | | 2 | The command or its options need fixing |
Links
- Lemon Domains: manage every domain, at every registrar, in one place
- lemon CLI
- CLI docs
- REST API docs
- MCP server
- Free tools API
- Free domain tools
- Domain registrar directory
- DNS records guide
MIT licensed.
