Read names from a file, one per line, or - for standard input. Commas also
separate, # starts a comment, and blank lines are skipped.
reserve command reference
Every subcommand and flag reserve accepts. Scenario-based usage lives in the
guides linked throughout; this page is the scannable, complete list.
Root invocation
reserve [NAME]...Checks one or more names. A name carrying a dot is checked exactly as typed.
-h/--help and -V/--version work everywhere, including after a subcommand
name. reserve help is not a subcommand; use --help. Subcommand names can't
be abbreviated (reserve ext doesn't resolve to reserve extensions).
--names-frompathSubcommands
groupssubcommandList the extension groups you can pick from.
-f, --familyindustry | region | popularity | curatedShow only one family.
--jsonboolean$ reserve groups --family region
south-asia bangladesh, india, pakistan, sri lanka, ...
southeast-asia singapore, thailand, vietnam, ...
east-asia japan, south korea, china, ...
europe germany, united kingdom, france, ...extensionssubcommandBrowse and search the extension catalog without checking anything. Accepts
every flag under Choosing extensions and Ordering and
paging below, plus its own --json.
$ reserve extensions --group south-asia --json
{"query":{"group":["south-asia"]},"page":1,"pageCount":1,"total":4,"extensions":[
{"extension":"bd","rank":89,"kind":"country","industries":["business","tech"]},
{"extension":"in","rank":12,"kind":"country","industries":["business","tech","shop"]}
]}config showsubcommandPrint every resolved setting and where each value came from (flag,
environment, or built-in default). Takes --json.
$ RESERVE_TIMEOUT=45 reserve config show
concurrency: 24 built-in default
timeout: 45 environment (RESERVE_TIMEOUT)
width: 120 built-in default
source: auto built-in default
cache_ttl: not cached built-in defaultconfig pathsubcommandPrint the config, cache, and data paths this machine uses. Takes --json.
(config on its own isn't runnable: it needs show or path.)
$ reserve config path
config: ~/.config/devops.bd/reserve
cache: ~/.cache/devops.bd/reserve
data: ~/.local/share/devops.bd/reservedoctorsubcommandPrint what the tool sees: version, catalog, terminal, network, and paths.
Takes --json.
See Install reserve for a
full sample reserve doctor transcript.
completionssubcommandreserve completions <SHELL> writes a completion script to stdout.
Accepts bash, elvish, fish, powershell, zsh. No --json.
reserve completions zsh > "${fpath[1]}/_reserve"mansubcommandreserve man [COMMAND]... writes the manual page to stdout, or one
subcommand's page, a nested one named in full, as in config show. No
--json.
reserve man # the whole manual, piped to a pager if you like:
reserve man | less
reserve man config show # just the config show pageservesubcommandRun an HTTP endpoint and a Model Context Protocol server on one address,
until interrupted. Binds to 127.0.0.1 on port 4243 by default, so a
fresh install exposes nothing to the network. See
reserve serve and the MCP endpoint for the full
HTTP and MCP surface.
--bindaddressDefault: 127.0.0.1Address to bind. Validated as an address when the flag is parsed.
--portintegerDefault: 4243Port to bind.
reserve serve # loopback only, port 4243
reserve serve --bind 0.0.0.0 --port 8080Every subcommand that prints data offers its own --json, and a root-level
--json (before the subcommand name) reaches the same commands.
Choosing extensions
-g, --groupstring[]Group to pull extensions from. Repeat the flag or comma-separate several values.
-t, --tldstring[]Extension to check, named directly, such as com or co.uk.
-x, --excludestring[]Extension to leave out of whatever else was chosen.
-s, --searchtextKeep only extensions matching this text, by name, country, or industry.
--industrystring[]Keep only extensions marketed for this industry.
--regionstring[]Keep only country extensions from this region.
--cctldbooleanKeep only two-letter country extensions.
--depthany | second | thirdDefault: anyKeep plain extensions such as com (second), multi-label ones such as
co.uk (third), or both (any, the default).
--lengthspecKeep extensions by length: 2, -3, 4-, or 2-4.
--tlds-frompathRead extensions from a file, or - for standard input, in the same shape as a
name list.
--include-restrictedbooleanInclude zones the public cannot register under.
Ordering and paging
--sortname | popularity | lengthDefault: popularityname sorts alphabetically, popularity by how widely the extension is used,
length by character count.
--orderasc | descWhich way to order. Defaults to what reads best for the chosen field.
--pageinteger ≥ 1Default: 1Which page to show. When checking a name, this decides which extensions are contacted, not just what's printed.
--page-sizeinteger ≥ 1Rows per page. Defaults to what the terminal fits when browsing, and to 25 extensions when checking a name.
--all-pagesbooleanPrint every page at once instead of stopping at the first. Can't be combined
with --page.
Pacing
-c, --concurrencyinteger, 1-1024Lookups in flight across the whole run. Reads RESERVE_CONCURRENCY when the
flag is absent.
--per-registryinteger, 1-1024Lookups in flight against any one registry.
--rateinteger, 1-10000Sustained requests per second against any one registry.
--timeoutinteger, 1-3600Seconds to wait on any single request. Reads RESERVE_TIMEOUT.
--cautiousbooleanGo slowly, for a very large sweep or a strict registry. This is a ceiling:
--rate, --per-registry, and --concurrency can lower it, never raise it.
--sourceauto | registry | text | dnsDefault: autoWhere answers come from. registry asks the structured service only; text
uses the older port-43 protocol only; dns can prove a name is taken, never
that one is free.
--refreshbooleanRe-download the registry server list instead of using the cached copy.
--registry-serverspathUse your own structured-service list, in the published bootstrap shape.
--text-serverspathUse your own text-service table, in the same shape as the built-in one.
--servers-replacebooleanLet a supplied server list replace the built-in one instead of overlaying it.
--no-referralbooleanNever ask IANA who serves an extension.
--cache-ttlsecondsReuse a taken or unknown answer from this many seconds ago instead of asking again. Never applies to an available name.
Output
--jsonbooleanPrint machine-readable JSON instead of the table.
--dry-runbooleanShow what the run would do and write nothing, without asking any registry.
-a, --available-onlybooleanShow only the names nobody holds, and save only those.
--detailsbooleanShow registrar, dates, status, nameservers, and abuse contact.
--responderbooleanShow which registry server answered.
--dnsbooleanShow the DNS records found for each name.
--where-to-buybooleanFor an available name, show the registry and where to buy it.
--explainbooleanShow which source answered and why, in the order they were tried.
--rawbooleanShow the server's own unprocessed response for the answer that decided each name.
--fullbooleanTurn on every extra section at once. Can't be combined with --details,
--responder, --dns, --where-to-buy, --explain, or --raw
individually.
-o, --outpathWrite the results into this directory. Can't be combined with --save.
--savebooleanWrite result files into the current directory. Can't be combined with --out.
--appendbooleanMerge into the files already there instead of refusing. Needs --save or
--out.
--save-jsonbooleanWrite the result files as JSON while the screen keeps its table. Needs
--save or --out.
Global settings
These five flags work before or after the subcommand name.
--colorauto | always | neverDefault: autonever also removes the progress line unless --progress asks for it.
--progressauto | always | neverDefault: autoWhen to show the progress line, apart from what colour and -q decide.
--widthinteger, 1-10000Lay the table out for this many columns instead of the terminal's width. Reads
RESERVE_WIDTH.
--no-inputbooleanNever prompt and never open the picker. Reads RESERVE_NO_INPUT.
--interactivebooleanOpen the picker even when extensions were given on the command line.
-v, --verbosecounted flagTurns on tracing; repeat to say more.
-q, --quietcounted flagDrops the progress line and the start and finish notes. Can't be combined with
--verbose.
Rules the parser enforces
- Only one list can be read from standard input:
--names-from -and--tlds-from -can't both be given. --no-inputand--interactivecan't be typed together as flags. An exportedRESERVE_NO_INPUT, though, is a standing preference and loses to a typed--interactivefor that run.--outrejects an empty value, and rejects a leading~(write the path in full: a shell already expands~beforereservesees it). On Windows it also rejects a reserved device name likeconornul, or a segment ending in a dot or space.--group,--tld,--exclude,--industry, and--regionall accept either a comma-separated list or a repeated flag.
Typed rows
On the interactive picker's settings screen, a typed row takes the usual
line-editing keys: Left, Right, Home, End, Delete, Backspace,
Ctrl-A, Ctrl-E, Ctrl-U, Ctrl-K, Ctrl-W. See
Use the interactive picker.