The following is a work-in-progress style guide for our user-facing messaging in the CLI output and documentation.
- Use of "e.g." and "i.e." should always be wrapped in commas, e.g., as shown here.
- Em-dashes are okay, but not recommended when using monospace fonts. Use "—", not "--" or "-".
- Always wrap em-dashes in spaces, e.g., "hello — world" not "hello—world".
- Hyphenate compound words, e.g., use "platform-specific" not "platform specific".
- Use backticks to escape: commands, code expressions, package names, and file paths.
- Use less than and greater than symbols to wrap bare URLs, e.g.,
<https://astral.sh>
(unless it is an example; then, use backticks). - Avoid bare URLs outside of reference documentation, prefer labels, e.g.,
[name](url)
. - If a message ends with a single relevant value, precede it with a colon, e.g.,
This is the value: value
. If the value is a literal, wrap it in backticks. - Markdown files should be wrapped at 100 characters.
- Use a space, not an equals sign, for command line arguments with a value, e.g.
--resolution lowest
, not--resolution=lowest
.
Just uv, please.
- Do not escape with backticks, e.g.,
uv
, unless referring specifically to theuv
executable. - Do not capitalize, e.g., "Uv", even at the beginning of a sentence.
- Do not uppercase, e.g., "UV", unless referring to an environment variable, e.g.,
UV_PYTHON
.
- Use "lockfile" not "lock file".
- Use "pre-release", not "prerelease" (except in code, in which case: use
Prerelease
, notPreRelease
; andprerelease
, notpre_release
).
- Use periods at the end of all sentences, including lists unless they enumerate single items.
- Avoid language that patronizes the reader, e.g., "simply do this".
- Only refer to "the user" in internal or contributor documentation.
- Avoid "we" in favor of "uv" or imperative language.
The documentation is divided into:
- Guides
- Concepts
- Reference documentation
- Should assume no previous knowledge about uv.
- May assume basic knowledge of the domain.
- Should refer to relevant concept documentation.
- Should have a clear flow.
- Should be followed by a clear call to action.
- Should cover the basic behavior needed to get started.
- Should not cover behavior in detail.
- Should not enumerate all possibilities.
- Should avoid linking to reference documentation unless not covered in a concept document.
- May generally ignore platform-specific behavior.
- Should be written from second-person point of view.
- Should use the imperative voice.
- Should cover behavior in detail.
- Should not enumerate all possibilities.
- Should cover most common configuration.
- Should refer to the relevant reference documentation.
- Should discuss platform-specific behavior.
- Should be written from the third-person point of view, not second-person (i.e., avoid "you").
- Should not use the imperative voice.
- Should enumerate all options.
- Should generally be generated from documentation in the code.
- Should be written from the third-person point of view, not second-person (i.e., avoid "you").
- Should not use the imperative voice.
- All code blocks should have a language marker.
- When using
console
syntax, use$
to indicate commands — everything else is output. - Never use the
bash
syntax when displaying command output. - Prefer
console
with$
prefixed commands overbash
. - Command output should rarely be included — it's hard to keep up-to-date.
- Use
title
for example files, e.g.,pyproject.toml
,Dockerfile
, orexample.py
.
- Do not use periods at the end of sentences :), unless the message spans more than a single sentence.
- May use the second-person point of view, e.g., "Did you mean...?".
- All CLI output must be interpretable and understandable without the use of color and other styling. (For example: even if a command is rendered in green, wrap it in backticks.)
NO_COLOR
must be respected when using any colors or styling.UV_NO_PROGRESS
must be respected when using progress-styling like bars or spinners.- In general, use:
- Green for success.
- Red for error.
- Yellow for warning.
- Cyan for hints.
- Cyan for file paths.
- Cyan for important user-facing literals (e.g., a package name in a message).
- Green for commands.
warn
,info
,debug
, andtrace
logs are all shown with the--verbose
flag.- Note that the displayed level is controlled with
RUST_LOG
.
- Note that the displayed level is controlled with
- All logging should be to stderr.
- Text can be written to stdout if it is "data" that could be piped to another program.
warn_user
andwarn_user_once
are shown without the--verbose
flag.- These methods should be preferred over tracing warnings when the warning is actionable.
- Deprecation warnings should use these methods.
- Deprecation warnings must be actionable.
- Errors may be followed by hints suggesting a solution.
- Hints should be separated from errors by a blank newline.
- Hints should be stylized as
hint: <content>
.