TeX Live Manager

ID

tlmgr

Home page

https://www.tug.org/texlive/

Version requirement

>= 2018

Platforms

🅱️ BSD · 🐧 Linux · 🍎 macOS · ⨂ Unix · 🪟 Windows

Operations

installed · outdated · search · install · upgrade · upgrade_all · remove · sync · cleanup · doctor

purl types

pkg:tlmgr

CLI name

tlmgr

Issues and PRs

📦 manager: tlmgr

Source

meta_package_manager/managers/tlmgr.toml

tlmgr is TeX Live’s native package manager.

Parsing notes, verified against the tlmgr.pl source (TeX-Live/texlive-infra) and real captures:

  • Package operations only work on a vanilla upstream TeX Live install. Distro-packaged TeX Live (Debian, Fedora) is dpkg/rpm-owned and disables tlmgr’s mutating commands.

  • info --data name,localrev prints headerless CSV, one “name,revision” record per line; both fields are bare and comma-free. The --data option appeared in TeX Live 2018, hence the version floor.

  • The outdated listing runs in --machine-readable mode: tab-separated records between an “end-of-header” and an “end-of-updates” line, with a one-char status in field 2 (“u” = updatable). Diagnostics move to stderr in that mode.

  • TeX Live versions are years. The version regex deliberately matches only the 4 digits following “version”, so pre-2017 layouts (“TeX Live 2016 version 20160523”) resolve to their year and fail the >=2018 floor.

  • tlmgr never prompts on per-package operations and never self-escalates: on the default user-owned /usr/local/texlive install no root is needed, while root-owned installs refuse mutations. Mutating operations are marked privileged but escalation stays opt-in (default_sudo is left off): pass --sudo to mpm for a root-owned TeX tree.

What mpm adds to tlmgr

Through mpm, tlmgr gains --exact and --extended search, to narrow to exact names or match descriptions.

Bigger still, mpm reaches across every manager at once: mpm installed and mpm outdated cover tlmgr alongside every other manager you run in one table, mpm upgrade --all updates them together, and mpm sbom exports the whole machine as one bill of materials.

Every mpm command also gains --dry-run and --plan previews, cross-scheme version comparison and purl identifiers. See manager augmentations for how each one is built.

Your tlmgr commands, in mpm

You already know tlmgr: each operation maps one-to-one onto mpm, in an interface shared by every manager.

To…

With tlmgr

With mpm

List what’s installed

tlmgr info --only-installed --data name,localrev

mpm --tlmgr installed

List outdated packages

tlmgr --machine-readable update --list --all

mpm --tlmgr outdated

Search for a package

tlmgr search --global <query>

mpm --tlmgr search <query>

Install a package

tlmgr install <package_id>

mpm install pkg:tlmgr/<package_id>

Upgrade one package

tlmgr update <package_id>

mpm --tlmgr upgrade <package_id>

Upgrade everything

tlmgr update --all

mpm --tlmgr upgrade --all

Remove a package

tlmgr remove <package_id>

mpm remove pkg:tlmgr/<package_id>

Clear caches

tlmgr backup --clean --all

mpm --tlmgr cleanup --cache

Run health checks

tlmgr check all

mpm --tlmgr doctor

Prefix any command above with --dry-run to simulate the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.

Operations

Operation

Supported

Notes

installed

outdated

orphans

search

exact and extended search backfilled by mpm

install

upgrade

upgrade_all

remove

sync

cleanup

doctor

Selecting and configuring tlmgr

Deselect tlmgr for a single run with --no-tlmgr, or persist the choice in your configuration:

[mpm]
tlmgr = false

Keep it enabled but tune how mpm drives it with a per-manager override:

[mpm.managers.tlmgr]
timeout = 900

mpm config-template tlmgr prints every overridable attribute as a ready-to-paste block.

Recipes

A few jobs you would otherwise script around tlmgr, one mpm command each:

  • Snapshot and clone a machine: mpm --tlmgr dump tlmgr.toml, then mpm restore tlmgr.toml on the next one.

  • Export a compliance SBOM: mpm --tlmgr sbom (CycloneDX by default, --spdx for SPDX).

  • Gate CI on health: mpm --tlmgr doctor relays TeX Live Manager’s own diagnosis and exits non-zero on trouble.

Privilege escalation

mpm runs this manager as the current user and never prepends sudo by default. Flip the policy for its privileged operations with --sudo or the per-manager sudo override.

Root is required for its cleanup_cache, install, remove, sync, upgrade, upgrade_all operations.

See privilege escalation for the full policy.

Cooldown

State of TeX Live Manager’s release-age gating, from the cooldown support table:

Status: ❌ None (TeX Live, curated)

A cooldown only pays off where a compromised release can be withdrawn while the clock runs, and can only be emulated where the registry dates its releases. From the retraction table:

Registry: Curated app stores and archives

With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --allow-unsupported-managers opts back in.

Version probe

The version is probed by running:

$ tlmgr --version
tlmgr revision 66798 (2023-04-08 02:15:21 +0200)
tlmgr using installation: /usr/local/texlive/2023
TeX Live (https://tug.org/texlive) version 2023

and extracted with:

r"TeX Live.*version (?P<version>\d{4})"

Reference traces

Raw native outputs captured in the bundled definition: the reference mpm’s parsers were written against. If you know TeX Live Manager well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ tlmgr info --only-installed --data name,localrev
tlmgr: package repository https://mirror.ctan.org (verified)
sansmath,15878
titlesec,68677
$ tlmgr --machine-readable update --list --all
location-url	https://mirror.ctan.org
total-bytes	323544
end-of-header
adjmulticol	u	62935	63073	316000	-	-	-	-	-
end-of-updates
running mktexlsr ...

Feed any of these through mpm and the raw output becomes one uniform table, the same shape for every manager: filter it, project columns, or export it (mpm --tlmgr installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.

Changelog

  • 7.2.0 (2026-07-09)

    • Add TeX Live Manager (tlmgr) with installed, outdated, search, install, upgrade, remove, sync and cleanup support, cross-platform; a bundled configuration-defined manager. Requires TeX Live >=2018.