Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Meta Package Manager has been maintained for 10+ years, and is free to use. You can help if you 🤝 purchase business support or 🫶 sponsor the project.
Meta Package Manager
Light Logo Dark Logo
  • Installation
  • Package managers
    • AppImage Manager
    • Antidote
    • Zsh Antigen
    • Alpine apk
    • Atom apm
    • Debian apt
    • apt-cyg
    • Linux Mint apt
    • asdf
    • Basalt
    • bin
    • bob
    • bpkg
    • Homebrew Formulae
    • Bun
    • Rust cargo
    • Homebrew Cask
    • cave
    • Chocolatey
    • Chromebrew
    • clib
    • PHP Composer
    • Conda
    • Perl CPAN
    • deb-get
    • devkitPro pacman
    • Fedora DNF
    • Fedora DNF5
    • dotnet tool
    • Lean elan
    • Gentoo emerge
    • Solus eopkg
    • Fink
    • Fish fisher
    • Flatpak
    • Linux fwupd
    • Google Cloud CLI
    • RubyGems
    • getnf
    • GNOME Shell extensions
    • GitHub CLI extensions
    • Haskell ghcup
    • GNU Guix
    • Haxe haxelib
    • jpm
    • Julia juliaup
    • kubectl krew
    • Neovim lazy-nvim
    • LuaRocks
    • MacPorts
    • Mamba
    • Mac App Store
    • Neovim mason-nvim
    • micro editor
    • Micromamba
    • MiKTeX
    • mise
    • Nala
    • Nimble
    • Nix
    • Node npm
    • Fish Oh My Fish
    • Ollama
    • OCaml opam
    • opkg
    • Arch Linux pacaur
    • Arch Linux pacman
    • Pacstall
    • Manjaro pamac
    • Arch Linux paru
    • Arch Linux pikaur
    • Python pip
    • Python pipx
    • pixi
    • PackageKit
    • FreeBSD pkg
    • OpenBSD pkg tools
    • Pkgin
    • Node pnpm
    • FreeBSD Ports Collection
    • PowerShell Gallery
    • Python pyenv
    • raco
    • Rust rustup
    • Scoop
    • SDKMAN
    • Scoop sfsu
    • Sheldon
    • slapt-get
    • Snap
    • Soar
    • Sorcery
    • Spack
    • Valve SteamCMD
    • stew
    • Solaris SVR4 package tools
    • Clear Linux Software Updater
    • TazPkg
    • TeX Live Manager
    • Topgrade
    • Arch Linux trizen
    • urpmi
    • Python uv
    • Python uvx
    • Vagrant
    • vcpkg
    • Neovim vim-pack
    • Volta
    • Visual Studio Code
    • VSCodium
    • WinGet
    • Void XBPS
    • Xcode xcodes
    • Yarn Classic
    • Yarn Berry
    • Arch Linux yay
    • Yazi ya
    • Fedora YUM
    • Zef
    • zerobrew
    • Zero Install
    • Zsh Zim
    • Zinit
    • Zsh zplug
    • openSUSE Zypper
  • Manager augmentations
  • Cross-manager operations
  • JSON & CSV exports
  • Snapshot and export
  • SBOM: Software Bill of Materials
  • CLI parameters
  • Man pages
  • Configuration
  • Per-manager overrides
  • Cooldown
  • Concurrency
  • Privilege escalation and sudo
  • Security model
  • Desktop menus
    • SwiftBar & Xbar plugin
    • GNOME Shell extension
  • Benchmark
  • Unsupported managers
  • Falsehoods programmers believe about package managers

Development

  • Contribution guide
  • Add a new package manager
  • Add a packaging channel
  • API
    • meta_package_manager.managers package
      • meta_package_manager.managers.am module
      • meta_package_manager.managers.antidote module
      • meta_package_manager.managers.antigen module
      • meta_package_manager.managers.apk module
      • meta_package_manager.managers.apm module
      • meta_package_manager.managers.apt module
      • meta_package_manager.managers.asdf module
      • meta_package_manager.managers.bin module
      • meta_package_manager.managers.composer module
      • meta_package_manager.managers.conda module
      • meta_package_manager.managers.deb_get module
      • meta_package_manager.managers.dnf module
      • meta_package_manager.managers.dotnet module
      • meta_package_manager.managers.emerge module
      • meta_package_manager.managers.eopkg module
      • meta_package_manager.managers.fisher module
      • meta_package_manager.managers.flatpak module
      • meta_package_manager.managers.fwupd module
      • meta_package_manager.managers.gem module
      • meta_package_manager.managers.gext module
      • meta_package_manager.managers.ghcup module
      • meta_package_manager.managers.guix module
      • meta_package_manager.managers.homebrew module
      • meta_package_manager.managers.luarocks module
      • meta_package_manager.managers.mamba module
      • meta_package_manager.managers.mas module
      • meta_package_manager.managers.miktex module
      • meta_package_manager.managers.mise module
      • meta_package_manager.managers.nala module
      • meta_package_manager.managers.neovim module
      • meta_package_manager.managers.nimble module
      • meta_package_manager.managers.nix module
      • meta_package_manager.managers.npm module
      • meta_package_manager.managers.oh_my_fish module
      • meta_package_manager.managers.pacman module
      • meta_package_manager.managers.pacstall module
      • meta_package_manager.managers.pip module
      • meta_package_manager.managers.pipx module
      • meta_package_manager.managers.pixi module
      • meta_package_manager.managers.pkcon module
      • meta_package_manager.managers.pkg module
      • meta_package_manager.managers.pnpm module
      • meta_package_manager.managers.pwsh_gallery module
      • meta_package_manager.managers.scoop module
      • meta_package_manager.managers.sdkman module
      • meta_package_manager.managers.sfsu module
      • meta_package_manager.managers.sheldon module
      • meta_package_manager.managers.snap module
      • meta_package_manager.managers.spack module
      • meta_package_manager.managers.sun_tools module
      • meta_package_manager.managers.tazpkg module
      • meta_package_manager.managers.uv module
      • meta_package_manager.managers.vagrant module
      • meta_package_manager.managers.vcpkg module
      • meta_package_manager.managers.volta module
      • meta_package_manager.managers.winget module
      • meta_package_manager.managers.xbps module
      • meta_package_manager.managers.yarn module
      • meta_package_manager.managers.zef module
      • meta_package_manager.managers.zim module
      • meta_package_manager.managers.zinit module
      • meta_package_manager.managers.zplug module
      • meta_package_manager.managers.zypper module
    • meta_package_manager.sbom package
      • meta_package_manager.sbom.base module
      • meta_package_manager.sbom.cyclonedx module
      • meta_package_manager.sbom.spdx module
      • meta_package_manager.sbom.vulnerabilities module
    • meta_package_manager.bar_plugin module
    • meta_package_manager.bar_plugin_renderer module
    • meta_package_manager.brewfile module
    • meta_package_manager.capabilities module
    • meta_package_manager.cli module
    • meta_package_manager.cli_explore module
    • meta_package_manager.cli_maintenance module
    • meta_package_manager.cli_sbom module
    • meta_package_manager.cli_snapshots module
    • meta_package_manager.config module
    • meta_package_manager.cooldown module
    • meta_package_manager.definitions module
    • meta_package_manager.dispatch module
    • meta_package_manager.docstring_corpus module
    • meta_package_manager.execution module
    • meta_package_manager.labels module
    • meta_package_manager.logo module
    • meta_package_manager.manager module
    • meta_package_manager.package module
    • meta_package_manager.platforms module
    • meta_package_manager.pool module
    • meta_package_manager.specifier module
    • meta_package_manager.sudo module
    • meta_package_manager.summary module
    • meta_package_manager.tables module
    • meta_package_manager.version module
  • tests package
    • tests.conftest module
    • tests.destructive_plan module
    • tests.fake_manager module
    • tests.test_bar_plugin module
    • tests.test_brewfile module
    • tests.test_cli module
    • tests.test_cli_backup module
    • tests.test_cli_dump module
    • tests.test_cli_install_remove module
    • tests.test_cli_installed module
    • tests.test_cli_managers module
    • tests.test_cli_orphans module
    • tests.test_cli_outdated module
    • tests.test_cli_restore module
    • tests.test_cli_sbom module
    • tests.test_cli_search module
    • tests.test_cli_upgrade module
    • tests.test_cli_which module
    • tests.test_cooldown module
    • tests.test_dispatch module
    • tests.test_docs module
    • tests.test_docstring_corpus module
    • tests.test_doctor module
    • tests.test_execution module
    • tests.test_gnome_extension module
    • tests.test_help module
    • tests.test_logo module
    • tests.test_manager_apt module
    • tests.test_manager_definition module
    • tests.test_manager_homebrew module
    • tests.test_manager_mas module
    • tests.test_manager_mise module
    • tests.test_manager_overrides module
    • tests.test_manager_pip module
    • tests.test_manager_pipx module
    • tests.test_manager_pwsh_gallery module
    • tests.test_manager_uv module
    • tests.test_manager_winget module
    • tests.test_managers module
    • tests.test_metadata module
    • tests.test_orphans module
    • tests.test_pool module
    • tests.test_sbom module
    • tests.test_sbom_vulnerabilities module
    • tests.test_specifier module
    • tests.test_sphinx_crossrefs module
    • tests.test_sudo module
    • tests.test_version module
  • Downstream packaging
  • Binaries
  • Infrastructure
  • Releasing
  • Index
  • Module Index
  • Changelog
  • History
  • Todo-list
  • Code of conduct
  • Legal notices
  • GitHub repository
  • Funding
Back to top
View this page
Edit this page

meta_package_manager.logo module¶

Terminal rendition of the mpm brand mark, and the --version screen it decorates.

The mark is the isometric open box of docs/assets/logo-square.svg, redrawn as a half-block raster: two sub-pixel rows share one terminal line, so LOGO paints as half as many lines as it has rows.

Half-blocks are the primitive because a terminal cell is twice as tall as it is wide, which makes their sub-pixels square. That also rules out the alternative worth naming, since it looks obvious and is not: drawing the mark as directional line-art characters (╱, ╲, │), the way edge-detection ASCII art does. An isometric edge sits at slope 0.25 in cell space, far too shallow for ╱, and that figure is scale-invariant — no height fixes it. Stretching the projection to 45° earns the diagonals but leaves the mark only ~12 columns wide, too few for the four flaps.

Caution

The mark’s structure is carried by color alone: strip the ANSI codes and it collapses into one solid silhouette. LogoVersionOption therefore only draws it when color reaches the output, falling back to click-extra’s plain rendering everywhere else — which is also the form machine readers parse, the bar plugin probing mpm --no-color --version.

meta_package_manager.logo.DOCS_URL = 'https://mpm.run'¶

Canonical documentation host, advertised on the version screen.

meta_package_manager.logo.TAGLINE = 'Meta Package Manager'¶

What the mpm acronym stands for, as spelled out under the logo’s wordmark.

meta_package_manager.logo.LOGO: tuple[str, ...] = ('       ..    ..       ', '     .....  .....     ', '   ......::++......   ', ' ......::::++++...... ', ' ....::::....++++.... ', '   .:::::++::+++++.   ', '  ...::::++::++++...  ', ' ......:::+:+++...... ', '  ......:::+++......  ', '   +......:+......:   ', '   +++....+:....:::   ', '   ++++++++::::::::   ', '   ++++++++::::::::   ', '   ++++++++::::::::   ', '    +++++++:::::::    ', '      +++++:::::      ', '        +++:::        ', '          +:          ')¶

The mark, as one shading tone per sub-pixel, two rows to a rendered line.

A space is transparent and leaves the terminal’s own background alone. The rest name the plane the sub-pixel faces, which is what an isometric solid shades by: . up (the flap tops and the cube’s lid), : right, + left. No outlines: the solid is reconstructed from the three shades its planes catch, the way an unlit render reads.

Rasterized from a model re-derived from the SVG’s polygon geometry — rim, flap fold depth, body height and cube placement all measured off it — then mirrored about its vertical axis, swapping + for : since what faces left on one side faces right on the other. Symmetry is imposed at that point rather than left to the rasterizer, which drifted three separate ways: a column count rounded off the row scale left the sampling grid off-centre, paint order tilted mirror-paired surfaces, and an odd column count gave the axis a column that would have had to face both ways at once.

The box is open, so the two far walls show through its rim, and they carry the plane opposite the one they sit behind: the far-left wall is lit as a right-facing face, which is why the interior’s left half is : where the exterior’s is +. That mirroring is what keeps the floating cube legible against the wall behind it, each of its faces landing on the other tone. The interior cells were filled by testing every empty cell’s centre against the rim quadrilateral in the artwork’s own coordinates, so they cannot drift from the SVG the way an eyeballed fill would.

Hand-editing a row is fine, but keep the rows equal in length and even in number, keep the width even, and keep every row symmetric.

meta_package_manager.logo.BRAND_WASH = '#d3d3f6'¶

The pale lavender of the artwork’s lit planes.

One of the two colors the whole identity is drawn from, with BRAND_INK. Declared here as well as in docs/brand_update.py because runtime code cannot read the SVG sources, which are not shipped in the wheel; test_ansi_logo_tracks_the_brand_palette fails if the two ever disagree.

meta_package_manager.logo.BRAND_INK = '#2d2364'¶

The deep purple of the artwork’s shadowed planes, and of its lettering.

The second brand color. It used to be the wordmark’s alone, the box outline carrying a third, lighter purple that this mark’s shadow faces stood in for, so the terminal rendition inherited a mismatch the artwork has since dropped.

meta_package_manager.logo.BRAND_MID = '#807bad'¶

The midpoint of the two, for the third plane an isometric solid needs.

Computed rather than chosen, so the palette remains two colors and a derivation. The artwork gained it when the mark went flat: with no outline left to separate the faces, a right-facing plane can no longer share a value with a left-facing one.

meta_package_manager.logo.TONES: dict[str, int] = {'+': 17, '.': 189, ':': 103}¶

Xterm-256 palette index per shading tone of LOGO.

One index per plane, mapped to the closest thing the palette can render: the lit faces take BRAND_WASH, the shadowed ones BRAND_INK, and the right-hand planes BRAND_MID.

Indices rather than truecolor: the 256-color cube is the widest-supported palette, and click emits no downgrade of its own for a terminal that cannot do 24-bit — including Apple’s own Terminal, where a 24-bit sequence would take the mark with it. The cost is borne entirely by the ink: the cube resolves dark colors coarsely, so #00005f is as close as it gets (a perceptual distance of ~24, against ~3 for the wash). It is the nearest entry that keeps any chroma at all, the closer ones by raw distance all being grays, which would paint a purple mark in ash.

meta_package_manager.logo.LOGO_WIDTH = 22¶

Columns the mark occupies, every rendered line being padded to it.

meta_package_manager.logo.LOGO_LINES = 9¶

Terminal lines the mark renders to, two sub-pixel rows making one.

meta_package_manager.logo.GUTTER = '   '¶

Blank columns separating the mark from the metadata column beside it.

meta_package_manager.logo.LABEL_WIDTH = 10¶

Column width the metadata keys are padded to, aligning their values.

meta_package_manager.logo.Colors¶

A cell’s foreground and background palette indices.

None is transparent, leaving the terminal’s own color to show through.

alias of tuple[int | None, int | None]

meta_package_manager.logo.env_summary()[source]¶

One-line interpreter and platform summary.

Feeds both the plain --version output (as click-extra’s env_info template field) and the version screen’s own Python and Platform rows, so the two renderings can never disagree on what they report.

Return type:

str

meta_package_manager.logo.platform_label()[source]¶

Current platform and CPU architecture, as displayed to the user.

Return type:

str

meta_package_manager.logo.render_logo()[source]¶

Paint LOGO into styled lines, one per pair of sub-pixel rows.

A cell whose two sub-pixels carry different tones paints the top one as foreground over the bottom one as background, which is what fits two independent colors on one line. Runs of cells sharing a color pair are styled together rather than one escape sequence per character, keeping the mark from tripling in size.

Return type:

tuple[str, ...]

meta_package_manager.logo.version_screen(prog_name, version)[source]¶

Compose the mark and the metadata column into the full version screen.

The metadata is centred against the mark’s height, and either column may be the taller of the two: a line missing from one side simply renders blank.

Returns None when the terminal is too narrow to seat the two columns side by side, leaving the caller to fall back rather than emit a wrapped mess. The threshold is measured off the metadata actually built, since its widest row grows with the manager count and the platform name. A non-interactive stream reports shutil’s 80-column default, wide enough that a redirected-but-forced-color run still gets the screen it asked for.

Return type:

str | None

meta_package_manager.logo.colors_reach_output()[source]¶

Will ANSI codes survive all the way to the user’s terminal?

Resolves click-extra’s color tri-state, deferring to the output stream’s TTY status on its auto default, exactly as click.echo does when it decides whether to strip the codes itself.

Return type:

bool

class meta_package_manager.logo.LogoVersionOption(param_decls=None, message=None, fields=None, styles=None, message_style=None, is_flag=True, expose_value=False, is_eager=True, help='Show the version and exit.', **kwargs)[source]¶

Bases: VersionOption

--version, upgraded to the full version screen when the terminal allows it.

Three conditions gate the screen, and failing any one of them falls back to click-extra’s plain message template unchanged — which is a deliberate guarantee, not just a default: that plain form is the one every machine reader parses.

  • Color reaches the output. The mark keeps its structure in its colors alone, so a stripped one is an unreadable blob.

  • The terminal is wide enough to seat the metadata column beside the mark without wrapping it.

  • Accessible mode is off. A raster read out cell by cell is noise to a screen reader, so --accessible keeps the plain two lines.

Preconfigured as a --version option flag.

Parameters:
  • message (str | None) – the message template to print, in format string syntax. Defaults to {prog_name}, version {version}.

  • fields (Mapping[str, Any] | None) – mapping of template field name to a forced value, overriding the value auto-computed for that field. Keys must be members of template_fields (for example {"version": "1.2.3"}).

  • styles (Mapping[str, Callable[[str], str] | None] | None) – mapping of template field name to its Style, merged over default_styles. Pass None as a value to clear a field’s default style. Keys must be members of template_fields.

  • message_style (Callable[[str], str] | None) – fallback style for the message literals and for any field that has no style of its own.

render_message(template=None)[source]¶

Draw the version screen, or defer to the plain template.

Return type:

str

meta_package_manager.logo.version_screen_params()[source]¶

click-extra’s default parameters, with --version swapped for our own.

Passed to the CLI’s @group(params=…), the documented hook for tuning that list. Swapping the instance in place keeps click-extra’s carefully ordered parameter sequence, and keeps version_fields= working: it targets whichever parameter is a VersionOption, which the subclass still is.

Return type:

list[Parameter]

Next
meta_package_manager.manager module
Previous
meta_package_manager.labels module
Copyright © Kevin Deldycke and contributors
Made with Furo
Last updated on 2026-08-29
On this page
  • meta_package_manager.logo module
    • DOCS_URL
    • TAGLINE
    • LOGO
    • BRAND_WASH
    • BRAND_INK
    • BRAND_MID
    • TONES
    • LOGO_WIDTH
    • LOGO_LINES
    • GUTTER
    • LABEL_WIDTH
    • Colors
    • env_summary()
    • platform_label()
    • render_logo()
    • version_screen()
    • colors_reach_output()
    • LogoVersionOption
      • LogoVersionOption.render_message()
    • version_screen_params()