1. Quick Start
tldr-pages is a community-driven collection of simplified help pages for command-line tools. Each page distills a command's most common use cases into practical, copy-paste examples — replacing the wall of text you get from man pages with something you can read in seconds.
Key features:
- Concise, example-driven help pages for thousands of commands
- Coverage across 11 platforms: Linux, macOS, Windows, Android, FreeBSD, OpenBSD, NetBSD, SunOS, DOS, Cisco IOS, and cross-platform ("common")
- Translations in 40+ languages (Arabic, Bengali, Chinese, French, German, Hindi, Japanese, Korean, Portuguese, Russian, Spanish, and many more)
- Standardized page format enforced by automated linting
- PDF generation for offline reading
- Community-maintained with open contribution process
- Available through dozens of tldr client applications
Prerequisites: A tldr client installed on your system.
Try it now (using any installed tldr client):
tldr tar
tar
Archiving utility.
Often combined with a compression method, such as gzip or bzip2.
- Create an archive and write it to a file:
tar cf path/to/target.tar path/to/file1 path/to/file2 ...
- Extract a (compressed) archive file into the current directory:
tar xf path/to/source.tar[.gz|.bz2|.xz|.lzma...]
- Create a gzipped archive and write it to a file:
tar czf path/to/target.tar.gz path/to/file1 path/to/file2 ...
Tip
Don't have a client yet? See the Installation section below for options, or browse pages directly at tldr.sh.
What to try next:
- Install a tldr client for your platform
- Browse available pages by platform
- Contribute a new page or translation
2. Installation
System Requirements
tldr-pages is a content repository — the pages themselves have no runtime dependencies. You need a tldr client to read them from the command line.
| Requirement | Detail |
|---|---|
| Any OS | Linux, macOS, Windows, Android, FreeBSD, and more |
| A tldr client | Required to display pages in the terminal |
| Git (optional) | Only needed for contributing or building from source |
Installing a tldr Client
There are dozens of tldr clients for every platform and language. The most popular:
Node.js
npm install -g tldr
Python (tldr)
pip install tldr
Rust (tealdeer)
cargo install tealdeer
Homebrew
brew install tldr
Android (Termux)
pkg install tldr
Important
The
tldr-pages/tldrrepository is the page collection, not a client. You need a separate client application to read pages. See the full client list at the tldr-pages clients wiki.
Verifying Your Installation
After installing a client, verify it works:
tldr --version
Then fetch the page index:
tldr --update
Successfully updated local database
Cloning the Repository (for Contributors)
If you want to contribute pages or run the maintenance scripts:
git clone https://github.com/tldr-pages/tldr.git
cd tldr
npm install
Note
Git and Python must be installed to run the repository scripts locally. Node.js 20+ is required for the linting tools.
Install Troubleshooting
Error: command not found: tldr
Cause: The client binary is not in your PATH.
Solution:
- Verify the install location:
which tldrorwhere tldr - Add the binary directory to your
PATH - Restart your terminal session
Prevention: Use a package manager that handles PATH automatically (Homebrew, apt, npm global).
Error: Page not found
Cause: Local page cache is out of date or the command does not have a tldr page yet.
Solution:
- Update the cache:
tldr --update - Search for the command:
tldr --search keyword - If no page exists, consider contributing one
Error: npm install fails during contributor setup
Cause: Node.js version too old or network issues.
Solution:
- Verify Node.js version:
node --version(20+ required) - Clear npm cache:
npm cache clean --force - Retry:
npm install
3. Configuration
Page Format Specification
Every tldr page follows a strict format. Understanding it helps you read and contribute pages effectively.
A page consists of:
# command-name
> Brief description of the command.
> More information: <https://example.com/docs>.
- Description of example 1:
`command --option argument`
- Description of example 2:
`command --other-option`
| Element | Rule |
|---|---|
| Title | # command-name — matches the filename |
| Description | > blockquote, 1-3 lines |
| More info link | > More information: <URL>. — always present |
| Examples | - description line, followed by backtick-wrapped command |
| Max examples | 8 per page |
| Placeholders | path/to/file, string, command — never literal values |
Platform Organization
Pages are organized by platform in the repository:
| Directory | Platform | Scope |
|---|---|---|
pages/common/ |
Cross-platform | Commands available on most systems |
pages/linux/ |
Linux | Linux-specific commands |
pages/osx/ |
macOS | macOS-specific commands |
pages/windows/ |
Windows | Windows/CMD/PowerShell commands |
pages/android/ |
Android (Termux) | Android-specific commands |
pages/sunos/ |
SunOS/Solaris | SunOS-specific commands |
pages/freebsd/ |
FreeBSD | FreeBSD-specific commands |
pages/openbsd/ |
OpenBSD | OpenBSD-specific commands |
pages/netbsd/ |
NetBSD | NetBSD-specific commands |
pages/dos/ |
DOS | DOS-specific commands |
pages/cisco-ios/ |
Cisco IOS | Cisco network equipment commands |
Tip
Most tldr clients automatically select the right platform for your OS. Use
tldr --platform linux dockerto view pages for a different platform.
Translation Directories
Translated pages live in pages.{language_code}/ directories (e.g., pages.es/ for Spanish, pages.zh/ for Chinese). Each translation directory mirrors the platform structure of the English pages/ directory.
Note
See the Admin Guide for the complete
.markdownlint.jsonconfiguration reference and linting tool details.
4. Core Usage
Reading Pages
The primary use case — looking up how to use a command:
tldr tar
View a page for a specific platform:
tldr --platform osx brew
List all available pages:
tldr --list
Searching for Commands
Most clients support keyword search:
tldr --search "compress files"
Browsing Online
The complete collection is browsable at:
- Website: tldr.sh
- GitHub: github.com/tldr-pages/tldr
- PDF books: Generated per-language from the repository (see PDF Generation below)
Warning
Some older tldr clients may not support all platforms (e.g., Cisco IOS, DOS). Update to the latest client version if pages appear missing.
Generating PDF Books
The repository includes a Python script to render all pages for a language into a single PDF:
cd scripts/pdf
pip install -r requirements.txt
python3 render.py ../../pages -c solarized-light -o tldr-book.pdf
Rendered page 1 of the directory common
Rendered page 2 of the directory common
...
Converting all pages to PDF...
Created tldr-book.pdf in the current directory!
Important
The
render.pyscript requires Python 3 with themarkdownandweasyprintpackages. WeasyPrint has system-level dependencies (GTK, Pango, Cairo) — see WeasyPrint installation docs for your platform.
PDF CLI Options
| Option | Type | Default | Description |
|---|---|---|---|
dir_path |
string | (required) | Path to the pages directory to render |
-c / --color |
string | basic |
Color scheme: basic, solarized-light, or solarized-dark |
-o / --output |
string | tldr-book.pdf |
Custom output filename |
-p / --platform |
string(s) | (all) | One or more platforms to include (e.g., common linux) |
Generate a PDF for only the Linux platform:
python3 render.py ../../pages -c basic -p linux -o tldr-linux.pdf
Generate a PDF for a specific translation:
python3 render.py ../../pages.es -c basic -o tldr-book-es.pdf
Note
PDF generation for CJK languages (Bengali, Japanese, Korean, Malayalam, Tamil, Thai, Chinese, Chinese Traditional) is currently not supported via
build-pdf.shdue to font rendering limitations. You can still userender.pydirectly for these languages if you have appropriate fonts installed.
5. Common Tasks
Contributing a New Page
Goal: Add a tldr page for a command that doesn't have one yet.
Prerequisites: Git, a GitHub account, familiarity with the page format.
Steps:
-
Check if the page already exists:
find pages/ -name "command-name.md" -
Determine the correct platform directory (
pages/common/,pages/linux/, etc.) -
Create the page file:
touch pages/common/command-name.md -
Write the page following the format specification (see Configuration section)
-
Run the linter:
npm run lint-tldr-pages -
Submit a pull request
Verify: The CI checks (test.sh, check-pr.sh) run automatically on your PR.
If it fails: Fix linting errors reported by tldr-lint and markdownlint.
Translating a Page
Goal: Add a translation for an existing English page.
Steps:
-
Find the English page you want to translate (e.g.,
pages/common/tar.md) -
Create the matching file in the appropriate language directory:
mkdir -p pages.fr/common/ cp pages/common/tar.md pages.fr/common/tar.md -
Translate the description and example descriptions (keep command syntax unchanged)
-
Run the linter and submit a PR
Tip
Translation templates are available in
contributing-guides/translation-templates/to help maintain consistent phrasing across pages within a language.
Creating an Alias Page
Goal: Create a page that redirects to another command (e.g., gtar → tar).
Use the provided script:
python3 scripts/set-alias-page.py
This generates or updates alias pages that point readers to the canonical command page.
Updating "More Information" Links
Goal: Add or update the documentation URL across pages.
python3 scripts/set-more-info-link.py
Updating "See Also" References
Goal: Add cross-references between related commands.
python3 scripts/set-see-also.py
Checking for Common Errors
Goal: Find common formatting issues in a language directory.
cd pages.es
../scripts/check-errors.sh
Warning
check-errors.shusesgreppatterns to find common mistakes. It is not a substitute for the full lint suite (npm run lint-markdown+npm run lint-tldr-pages).
Building the Page Index
Goal: Generate the index.json file listing all available pages.
npm run build-index
Building ZIP Archives
Goal: Package pages for distribution.
bash scripts/build.sh
Note
build.shandbuild-pdf.share Linux/macOS only. On Windows, use WSL.
6. Troubleshooting
Linting Errors
Error: TLDR003 — Description too long
Cause: A description line exceeds the maximum length.
Solution:
- Shorten the description to fit within the line limit
- Split into two
>lines if needed
Prevention: Keep descriptions concise — tldr pages are meant to be brief.
Error: TLDR014 — Page title doesn't match filename
Cause: The # title heading doesn't match the filename (without .md).
Solution:
- Rename the file or update the title to match
- Use
python3 scripts/wrong-filename.pyto detect mismatches across the repository
Prevention: Always name the file exactly after the command.
Error: MD013 — Line length warnings
Cause: A line exceeds 250 characters (configured in .markdownlint.json).
Solution: Break long lines at natural points.
PDF Generation Issues
Error: ModuleNotFoundError: No module named 'weasyprint'
Cause: Python dependencies not installed.
Solution:
cd scripts/pdf
pip install -r requirements.txt
Error: Invalid directory. Please try again!
Cause: The dir_path argument doesn't point to a valid pages directory.
Solution: Verify the path is correct and points to a pages* directory:
python3 render.py ../../pages -c basic
Error: WeasyPrint OSError or missing system libraries
Cause: WeasyPrint requires system-level libraries (GTK3, Pango, Cairo, GDK-PixBuf).
Solution:
Debian/Ubuntu
sudo apt install libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0
macOS
brew install pango gdk-pixbuf libffi
Windows
Install GTK3 runtime or use WSL
Prevention: Install system dependencies before pip install weasyprint.
Contribution Workflow Issues
PR checks fail with check-pr.sh errors
Cause: Page syntax doesn't conform to tldr-pages standards.
Solution:
- Run locally:
bash scripts/test.sh - Fix all reported issues
- Push the fixes
Prevention: Run npm run lint-tldr-pages before committing. The husky pre-commit hook runs automatically if installed via npm install.
Error: husky - command not found
Cause: Dev dependencies not installed.
Solution:
npm install
Caution
Never bypass the pre-commit hook with
--no-verify. The CI will catch the same issues and block your PR.
7. FAQ
Q: What is the difference between tldr-pages/tldr and a "tldr client"?
tldr-pages/tldr is the GitHub repository containing the actual help pages — thousands of Markdown files organized by platform and language. A tldr client is a separate application (like tealdeer, tldr-node-client, or tldr-python-client) that downloads and displays those pages in your terminal. Think of it like Wikipedia (the content) versus a web browser (the viewer).
Q: How do I request a page for a command that doesn't have one?
Open an issue on GitHub with the title "Page request: command-name". The community tracks requests — recent examples include requests for sqlfluff (#22164), ukify (#22190), and mcopy (#21939).
Q: Can I contribute pages in my language?
Yes. Translations live in pages.{language_code}/ directories. Check the contributing-guides/translation-templates/ folder for standardized phrasing in your language. If your language doesn't have a directory yet, create one following the existing pattern.
Q: How many pages and languages does tldr-pages cover?
The repository contains over 35,000 files across 40+ language translations and 11 platforms. The English pages/ directory is the most complete, with translated directories at varying levels of coverage.
Q: What platforms are supported?
Linux, macOS (osx), Windows, Android, FreeBSD, OpenBSD, NetBSD, SunOS/Solaris, DOS, and Cisco IOS — plus a common category for cross-platform commands.
Q: Where should I put a page for a cross-platform command?
In pages/common/. Only use platform-specific directories for commands that genuinely exist only on that platform or behave very differently across platforms.
Q: How do I update a command's examples across all translations?
Use the update-command.py script:
python3 scripts/update-command.py
This updates the common content of a command example across all language versions.
Q: What's the page limit for examples?
A maximum of 8 examples per page. Keep examples focused on the most common use cases.
Q: Are there plans to document Zsh builtins and terminal games?
Yes — these are tracked as open community initiatives. See issue #21002 (Zsh builtins) and #22118 (terminal games).