meta_package_manager.managers.sfsu module¶

class meta_package_manager.managers.sfsu.SFSU[source]¶

Bases: PackageManager

sfsu (Scoop For Speed and Usability) is a Rust reimplementation of Scoop’s slower read paths, working against the same buckets and ~/scoop install tree.

mpm reaches for sfsu only where it is both faster than Scoop and speaks JSON: installed, outdated and search all pass --json and are parsed as structured objects instead of the whitespace tables Scoop prints.

Note

sfsu implements no mutating verbs, so install, remove and both upgrade commands are bound straight to Scoop through the Delegate descriptor: those operations run the scoop binary, and a host with sfsu but no Scoop cannot mutate anything.

Initialize cli_errors list.

name: str = 'Scoop sfsu'¶

Return package manager’s common name.

Default value is based on class name.

homepage_url: str | None = 'https://github.com/winpax/sfsu'¶

Home page of the project, only used in documentation for reference.

platforms: frozenset[Platform] | Group | Platform | Iterable[Platform | Group] = frozenset({Platform(id='windows', name='Windows')})¶

List of platforms supported by the manager.

Allows for a mishmash of platforms and groups of platforms. Will be normalized into a frozenset of Platform instances at instantiation.

requirement: str | None = '>=1.16.0'¶

Version requirement specifier.

Supports a comma-separated range of constraints (e.g. ">=1.20.0,<2.0.0"). A bare version string like "1.20.0" is treated as >=1.20.0.

Parsed by meta_package_manager.version.VersionRange.

Defaults to None, which deactivates version check entirely.

post_args: tuple[str, ...] = ('--no-color',)¶

Global list of options used before and after the invoked package manager CLI.

Automatically added to each meta_package_manager.execution.CLIExecutor.run_cli() call.

Essentially used to force silencing, low verbosity or no-color output.

version_regexes: tuple[str, ...] = ('sfsu\\s+(?P<version>\\S+)',)¶
> sfsu --version
sfsu 1.17.2
sprinkles 0.22.0 (crates.io published version)
property installed: Iterator[Package]¶

Fetch installed packages.

> sfsu list --json
[
  {
    "name": "7zip",
    "version": "26.00",
    "source": "main",
    "updated": "2026-03-18 17:54:32",
    "notes": ""
  },
  {
    "name": "git",
    "version": "2.53.0.3",
    "source": "main",
    "updated": "2026-03-15 09:12:04",
    "notes": ""
  }
]
property outdated: Iterator[Package]¶

Fetch outdated packages.

Uses sfsu status --only apps --json which returns packages with available updates.

> sfsu status --only apps --json
{
  "packages": [
    {
      "name": "git",
      "current": "2.53.0.2",
      "available": "2.53.0.3",
      "missing_dependencies": [],
      "info": null
    }
  ]
}
search(query, extended, exact)[source]¶

Fetch matching packages.

Caution

Search does not support extended or exact matching. Results are refiltered by meta_package_manager.manager.PackageManager.refiltered_search().

> sfsu search --json git
{
  "main": [
    {
      "name": "git",
      "bucket": "main",
      "version": "2.53.0.3",
      "installed": true,
      "bins": []
    },
    ...
  ],
  ...
}
Return type:

Iterator[Package]

install¶

Install one package.

> scoop install 7zip
Installing '7zip' (22.01) [64bit] from main bucket
7z2201-x64.msi (1.8 MB) [====================] 100%
Checking hash of 7z2201-x64.msi ... ok.
Extracting 7z2201-x64.msi ... done.
Linking ~\scoopppszip\current => ~\scoopppszip.01
Creating shim for '7z'.
Creating shortcut for 7-Zip (7zFM.exe)
Persisting Codecs
Persisting Formats
Running post_install script...
'7zip' (22.01) was installed successfully!

Notes
-----
Add 7-Zip as a context menu by running: "C:\scoop\...install-context.reg"
upgrade_all_cli¶

Generates the CLI to upgrade all outdated packages.

> scoop update --all
upgrade_one_cli¶

Generates the CLI to upgrade the provided package.

> scoop update 7zip
remove¶

Remove one package.

> scoop uninstall 7zip --purge
Uninstalling '7zip' (22.01).
Removing shim '7z.shim'.
Removing shim '7z.exe'.
Removing shortcut ~\AppData\Roaming\Scoop Apps-Zip.lnk
Unlinking ~\scoopppszip\current
'7zip' was uninstalled.
sync()[source]¶

Sync package metadata.

Uses sfsu’s native update command which updates Scoop and all buckets.

> sfsu update --no-color
Return type:

None

cleanup_cache()[source]¶

Removes old versions of all installed apps and clears the cache.

> sfsu cleanup --all --cache --no-color
Return type:

None

cli_names: tuple[str, ...] = ('sfsu',)¶

List of CLI names the package manager is known as.

This list of recognized CLI names is ordered by priority. That way we can influence the search of the right binary.

..hint::

This was helpful in the case of the Python transition from 2.x to 3.x, where multiple versions of the same executable were named python or python3.

By default, this property’s value is derived from the manager’s ID (see the MetaPackageManager.__init__ method above).

id: str = 'sfsu'¶

Package manager’s ID.

Derived by defaults from the lower-cased class name in which underscores _ are replaced by dashes -.

This ID must be unique among all package manager definitions and lower-case, as they’re used as feature flags for the mpm CLI.

virtual: bool = False¶

Should we expose the package manager to the user?

Virtual package manager are just skeleton classes used to factorize code among managers of the same family.