TeX Live Manager¶
- ID
tlmgr- Home page
- 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
- Source
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,localrevprints headerless CSV, one “name,revision” record per line; both fields are bare and comma-free. The--dataoption appeared in TeX Live 2018, hence the version floor.The outdated listing runs in
--machine-readablemode: 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
--sudoto 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 |
With |
|---|---|---|
List what’s installed |
|
|
List outdated packages |
|
|
Search for a package |
|
|
Install a package |
|
|
Upgrade one package |
|
|
Upgrade everything |
|
|
Remove a package |
|
|
Clear caches |
|
|
Run health checks |
|
|
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 |
|---|---|---|
|
✓ |
|
|
✓ |
|
|
||
|
✓ |
exact and extended search backfilled by |
|
✓ |
|
|
✓ |
|
|
✓ |
|
|
✓ |
|
|
✓ |
|
|
✓ |
|
|
✓ |
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, thenmpm restore tlmgr.tomlon the next one.Export a compliance SBOM:
mpm --tlmgr sbom(CycloneDX by default,--spdxfor SPDX).Gate CI on health:
mpm --tlmgr doctorrelays 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) withinstalled,outdated,search,install,upgrade,remove,syncandcleanupsupport, cross-platform; a bundled configuration-defined manager. Requires TeX Live>=2018.