Skip to main content

Environment variables

3 min readStableIntermediate

Every variable below is read once, at startup. A flag always beats an environment variable, which always beats the built-in default. reserve config show reports each resolved setting alongside which of the three supplied it.

An exported variable is a standing preference, not this run's instruction, and it never stands in for a typed flag. Setting RESERVE_NO_INPUT doesn't block --interactive from opening the picker for this one run, the way typing --no-input would.

reserve-specific variables

RESERVE_CONCURRENCYinteger, 1-1024

Lookups in flight across the whole run. Same as -c/--concurrency.

RESERVE_TIMEOUTinteger, 1-3600

Seconds to wait on any single request. Same as --timeout.

RESERVE_WIDTHinteger, 1-10000

Lays the table out for this many columns instead of the terminal's width. Same as --width.

RESERVE_NO_INPUTbooleanDefault: off

Never prompt and never open the picker. Same as --no-input. Accepts 1, true, yes, on as true; an empty value, 0, no, off, or similar reads as off.

RESERVE_PLAINbooleanDefault: off

Draws borders and the spinner with plain characters, and skips the picker. Set this where the terminal shows borders and the spinner as empty boxes. reserve doctor reports whether your terminal can draw the picker, and why not when it can't.

A RESERVE_CONCURRENCY, RESERVE_TIMEOUT, or RESERVE_WIDTH value that isn't a whole number, or is outside its range, stops the command before it runs and names the variable in the error message. An empty or blank value for any of the three is skipped, same as if it were unset.

Bash
Bash
export RESERVE_CONCURRENCY=50   # 50 lookups in flight on every future run
export RESERVE_TIMEOUT=20       # wait 20s per request instead of the 10s default
export RESERVE_WIDTH=100        # lay tables out for 100 columns
export RESERVE_NO_INPUT=1       # never open the picker, in this shell
export RESERVE_PLAIN=1          # plain borders, no picker, for a dumb terminal
CONSOLE
CONSOLE
$ RESERVE_WIDTH=0 reserve example.com
error: RESERVE_WIDTH is set to 0, and --width takes 1 to 10000
 
Usage: reserve [OPTIONS] [NAME]... [COMMAND]
 
For more information, try '--help'.

reserve config show names the origin of every setting, so a flag beating an exported variable is visible before the run starts:

CONSOLE
CONSOLE
$ RESERVE_TIMEOUT=45 reserve --timeout 7 --concurrency 12 config show
Resolved settings
  concurrency        12                     flag
  timeout            7                      flag
  width              unset                  built-in default
  no_input           false                  built-in default
  per_registry       published allowance    built-in default
  rate               published allowance    built-in default

Drop the two flags and timeout reads 45 with environment beside it, while concurrency falls back to its built-in default.

Standard variables reserve also respects

NO_COLORany non-empty value

Suppresses colour and the progress line.

CLICOLOR0

The exact value 0 suppresses colour and the progress line, same as NO_COLOR.

CLICOLOR_FORCEany value other than 0

Keeps colour through a pipe.

FORCE_COLORnon-empty, not 0

Keeps colour through a pipe, same as CLICOLOR_FORCE.

TERMstring

dumb, empty, or unset on a Unix host means no colour and no progress line, and it's the only thing (not colour suppression) that decides whether the interactive picker can open at all.

COLUMNSinteger > 0

Overrides the terminal width the layout is fitted to. Read only when stdout is a terminal, so an exported COLUMNS never cuts piped output a script expects whole.

LINESinteger > 0

Overrides the terminal height the layout is fitted to, under the same terminal-only condition as COLUMNS.

RUST_LOGtracing-subscriber filter syntax

Widens what -v turned on. Logs go to stderr, so a pipe reading stdout still receives only results.

RUST_BACKTRACEstring

Prints a backtrace if the tool panics.

LC_ALL, LC_CTYPE, LANGstring

On a non-Windows host, box-drawing and the spinner glyphs are used only when the first of these three that's set contains UTF-8 or UTF8. Outside a UTF-8 locale, reserve falls back to plain characters and the picker doesn't open. Windows skips this check.

Bash
Bash
export NO_COLOR=1                # no colour, no progress line, anywhere
export FORCE_COLOR=1              # keep colour even through a pipe
export RUST_LOG=reserve_core=debug  # widen -v's tracing for one crate
export RUST_BACKTRACE=1           # print a backtrace if reserve panics
CONSOLE
CONSOLE
$ reserve example.com --tld com | cat
   DOMAIN       STATUS  SOURCE      TIME  NOTE
-  example.com  TAKEN   registry  1352ms
 
0 available  1 taken  0 unknown   (1 checked)
# no colour codes, no progress line: piping already suppresses both
 
$ FORCE_COLOR=1 reserve example.com --tld com | cat
# same table, but with ANSI colour codes preserved through the pipe

File locations

Everything reserve writes for itself lives under one directory, devops.bd/reserve, inside your platform's own config, cache, and data directories. Run reserve config path to see the three resolved locations. Deleting them removes every trace of the tool.

Was this page helpful?

© 2026 Reserve. All rights reserved.