Skip to content

Install And Manage Packages

EasyBar can install packages from the official registry, another registry, a local directory, or a direct archive. Package operations do not require the EasyBar app to be running, but reload EasyBar after an install, update, or uninstall when you want the active Lua runtime to pick up the change.

For the concepts behind packages, libraries, and registries, start with Widget Store.

Search the store

List every package in the official registry or filter by name, description, kind, or category:

easybar widgets search
easybar widgets search QUERY

Use another remote or local registry index with:

easybar widgets search QUERY --registry https://example.com/easybar/index.json

The generated Catalog is the website view of the official package source. The CLI searches the selected live registry.

Install an official package

Install the latest compatible immutable release by package name:

easybar widgets install PACKAGE_NAME
easybar config reload

Registry releases include a versioned archive URL and SHA-256. EasyBar verifies the digest before extracting the archive and resolves required package dependencies before activation.

Installing an already installed package is an error. Use widgets update for a normal registry upgrade. Use --force only when you intentionally want to replace the installed package from a supported source, including reinstalling the same version:

easybar widgets install PACKAGE_NAME --force

Use another registry when needed:

easybar widgets install my-widget --registry https://example.com/easybar/index.json

The registry value may also be a local index.json path.

List installed packages

easybar widgets installed

Filter by package kind or request machine-readable output:

easybar widgets installed --widgets-only
easybar widgets installed --libraries-only
easybar widgets installed --json

The command is offline and reports the package database under EasyBar's managed data directory.

Check for updates

List newer registry releases without changing anything:

easybar widgets outdated

Update one package or every outdated package:

easybar widgets update PACKAGE_NAME
easybar widgets update --all
easybar config reload

A named update changes nothing when the selected registry does not contain a newer compatible release. update --all processes outdated packages one at a time; a package that commits successfully remains updated if a later package fails.

Pass --registry to use another remote or local registry. Updates only apply to packages whose recorded installation source matches a release in that registry. Local packages and unrelated archives are not silently replaced by update --all.

Install a local package

A local package directory needs a valid package.toml; it does not need a Git repository or a registry entry:

easybar widgets install ./my-widget --no-registry

With --no-registry, every dependency must already be installed. Without that option, EasyBar uses installed compatible dependencies first and asks the selected registry for missing or incompatible ones.

For package layout and manifest fields, see Create & Contribute.

Install an archive directly

Install a local archive by path:

easybar widgets install ./my-widget-0.1.0.tar.gz

A remote archive requires an explicit SHA-256:

easybar widgets install \
  https://example.com/my-widget-0.1.0.tar.gz \
  --sha256 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

The archive must place package.toml at its root. EasyBar rejects symbolic links, absolute archive paths, and parent-directory traversal.

Dependencies

Package dependencies use package names with exact or caret semantic-version constraints:

[dependencies]
shared = "^0.1.0"

A package is activated only when its dependency requirements can be satisfied. Library modules are then available through their manifest-declared export names:

local retry = require("retry")

Dependencies that become unused are left installed. Removal is always explicit.

Uninstall a package

easybar widgets uninstall PACKAGE_NAME
easybar config reload

EasyBar refuses to remove a package while another installed package depends on it. Uninstall removes the package's managed versions and activation links; it never removes files from your configured manual widgets_dir.

Managed data

Package state lives below:

~/.local/share/easybar/packages/

That directory is owned by the package manager. Do not edit active links or stored package versions by hand during normal use. For the exact store layout, atomic replacement behavior, rollback, and version retention rules, see Package Store Internals.