tealdeer 1.9.1 is a client for the tldr pages project, which replaces man pages with short examples. The Windows build is a single 3695104-byte tldr.exe.

The problem it solves is the first thirty seconds of using an unfamiliar command: you know it takes flags, you do not remember which, and the man page runs to nine screens before the first example.

I measured the cache download, the size of what lands on disk, and how long a single lookup takes compared with the process start-up cost.

One 3695104-byte exe

The Windows build is a single file with no installer. Everything it needs is linked in, and the page content lives outside it in a cache directory.

ItemValueNote
tldr.exe3695104 bytesStandalone, no runtime
Version output15 bytesOne line naming 1.9.1
--help output2158 bytesFlags and config hints
Cache on disk4264961 bytes7395 files after --update

The binary and the pages are separate

The exe is 3695104 bytes and contains no pages. The 4264961 bytes of content arrive separately on --update, which is why the first lookup fails on a clean machine.

No pages means an error, not an empty result

Running tldr tar before --update prints "Page cache not found" and exits. It does not fall back to anything, so a script that depends on it needs the update step first.

The cache is 7395 files

One --update wrote 7395 files totalling 4264961 bytes into %LOCALAPPDATA%\tealdeer. That is about 577 bytes per file, because each page is a short Markdown document.

MetricValue
Files written7395
Total bytes4264961
Average per file577 bytes
Location%LOCALAPPDATA%\tealdeer

7395 small files, not one blob

Because each page is its own file, a lookup only touches one of them. That also means the first query after an update pays no index-building cost: the filename is the command name.

The update is the only slow part

Downloading and unpacking 7395 files took long enough that the first attempt timed out at two minutes on this connection. After that, every lookup is local.

Lookups cost 141 to 143 ms

A single page lookup takes 141 to 143 milliseconds, and --version takes 140. The page itself costs almost nothing; the process start dominates.

CommandMedianOutput
tldr --version140 ms15 bytes
tldr tar143 ms1227 bytes
tldr rsync141 ms1693 bytes
tldr --list184 ms70195 bytes

Three milliseconds to read a page

The gap between --version at 140 ms and tldr tar at 143 ms is the entire disk read and render for one page. Everything else is loading a 3695104-byte image.

Listing everything costs 44 ms more

--list walks the whole cache and prints 70195 bytes of page names in 184 ms. That is 44 ms above a single lookup, which sets the cost of touching all 7395 files at roughly 6 microseconds each.

Only 305 pages are for Windows

The cache splits into ten platform directories under pages.en, and the counts are lopsided: 4551 pages are common, 2070 are Linux, and only 305 are Windows.

Platform directoryPages
common4551
linux2070
osx375
windows305
dos26
android22
cisco-ios17
sunos11
openbsd10
netbsd8

Windows is 4.1% of the cache

305 out of 7395 pages is 4.1%. Linux gets 2070, which is 6.8 times more. A command that exists on both platforms will usually resolve to the common or Linux page, and the examples will use POSIX flags.

The ten directories add up exactly

4551 plus 2070 plus 375 plus 305 plus 26 plus 22 plus 17 plus 11 plus 10 plus 8 equals 7395, the same file count the update reported. Nothing is stored outside these directories.

What a page looks like

The output starts with a one-line description, then a list of task-and-command pairs. Keywords inside the command are highlighted, and the flag letters are bracketed in the prose so you can see which letter does the work.

ElementExample from the rsync page
Description lineOne sentence on what the command is for
Task lineWhat you want to do, in plain words
Command block--archive, --compress, --progress with paths
Bracketed letters[c]reate maps the c in cf to create
tealdeer 1.9.1 showing the rsync page in a Windows console: green description lines above yellow highlighted command invocations with paths, vertical scrollbar showing the page fits one screen

Brackets explain the short flags

On the tar page the line reads "[c]reate an archive and write it to a [f]ile", followed by tar cf target.tar file. The bracket tells you which letter in the command corresponds to which word.

No full option list on purpose

A page shows five to ten common invocations and stops. It is not a reference: if you need the complete flag list, the man page is still the place to look.

Flags worth knowing

The tool takes a command name and a few switches. Configuration lives in a file that it can generate for you.

FlagEffect
--updateDownload and replace the whole cache
--listPrint every page name, 70195 bytes
--seed-configWrite a starter config file
--show-pathsPrint where config and cache live
> tldr --update
> tldr tar
  Archiving utility.
  Often combined with a compression method, such as `gzip` or `bzip2`.

Platform matters

Each page has variants per platform. The Windows build serves the common variant, so a command shown may assume POSIX paths or flags that do not exist in cmd. Check the page's platform list before copying.

Auto-update is opt-in

Without a config, the cache never refreshes and pages age. The starter config has an auto_update switch that has to be turned on explicitly.

Where it earns a place

Looking up a command you use twice a year, in a console where opening a browser costs more than the answer.

TaskFitWhy
Recalling flag combinationsHigh141 ms, examples first
Learning a new tool by exampleHighFive to ten real invocations per page
Exact flag referenceLowPages omit the full option list
Offline on a fresh machineLowNeeds one --update before anything works

It complements man, not replaces it

A page answers "how do I do X with this command" in one screen. A man page answers "what does flag Y do" exhaustively. Both are one command away, and they are for different moments.

Licence and cost

MIT for the client, CC-BY-SA for the pages. Free for personal and commercial use, source on GitHub, written in Rust. The Windows build is one exe with no installer.