All docs
The Package Manager
The desktop Package Manager: filter In Project, Installed and Store, freeze packages per project, pick variants, and add from a URL.
The desktop Package Manager is where you turn packages on and off, install new ones, and pick between contribution variants — all scoped to the current project.
Filters: In Project, Installed, Store#
The list is filtered by three tabs:
- In Project — packages active in the project you have open.
- Installed — everything available on this machine (pip entry-point packages, folders you added by reference, and the installed record).
- Store — the marketplace catalog, fetched on demand, showing what you own and what to buy.
The enable switch is a project-scoped freeze#
Toggling a package off does not uninstall it and does not lose data. It freezes the package's nodes for this project: each disabled step serves its cached output and stops recomputing. Nothing downstream recalculates through it.
# → disabled package's steps: STEP_SKIPPED (reason=package-disabled), cache intact
Toggle it back on and the real steps are restored (frozen placeholders swap back to the live classes) and recompute as normal. Because disabling only freezes nodes, it is safe to flip while you compare results.
Disabling also gates the palette: a disabled package's node types stop appearing in the add-step menu, and its views unmount.
Variants#
When two packages provide a step under the same node identity, the Package Manager shows a
Contribution variants section on the detail pane. Pick which provider is active (replace mode),
or keep several available side by side (coexist mode). For example, with lsd-mim and
lsd-mim-openpit both active, the openpit pit_shell step is offered as a variant of mim.solid.
Selecting one calls engine.set_variant(identity, mode=, provider=) and refreshes the pipeline.
See Node variants.
Default packages#
Which packages activate on launch is configurable:
LSD_DEFAULT_PACKAGES=lsd-gis,lsd-mim # comma-separated, wins first
Otherwise the active profile's default_packages (in ~/.lsd/profiles.json) applies. With
neither set, a bare launch defaults to all available packages on (opt out with
LSD_DESKTOP_NO_AUTOLOAD=1). A project that explicitly declares its packages is always respected.
Add from a URL or GitHub#
Beyond Add local… (register a folder by reference) and installing a .zip / .lsdpkg, the
Add from URL… action installs straight from the web:
pm.install_url("https://github.com/acme/lsd-widgets") # a GitHub repo
pm.install_url("https://example.com/lsd-widgets.zip") # a direct archive
A GitHub repository URL is resolved to its archive and unpacked; a direct .zip or .lsdpkg
downloads and installs. Paid store packages are the exception — Buy opens the web store page in
your browser for checkout. See Buy & install.
Related#
Learn — Develop a package · Node variants
API — PackageManager · lsd_package.json
Examples — A complete package
Frequently asked questions
Does disabling a package delete anything?
No. Disabling is a project-scoped freeze — the package's steps keep their cached output and simply stop recomputing. Re-enable and the nodes recompute as normal. Only hand-installed packages have a remove action.
How do I choose which packages load by default?
Set LSD_DEFAULT_PACKAGES (a comma-separated list) or a profile's default_packages in ~/.lsd/profiles.json. With neither set, a bare launch defaults to all available packages on.