Skip to content

Shims like Scoop #361

Description

@Witchilich

Description of the new feature/enhancement

Like how Scoop has. For example without adding anything to path, we can just type gpu-z to launch GPU-Z or use mpv.net from commandline with mpvnet <url>. UWP apps also have this, notepads for Notepads, wt for Windows Terminal etc.

Activity

  1. added
    Issue-FeatureThis is a feature request for the Windows Package Manager client.
    on May 29, 2020
  2. ghost added
    Needs-TriageIssue needs to be triaged
    on May 29, 2020
  3. bog-dan-ro commented on May 29, 2020

    @bog-dan-ro

    I'm using scoop instead of choco just because it adds the essential apps to the path automagically.

  4. Witchilich commented on May 29, 2020

    @Witchilich
    Author

    BogDan Vatra (@bog-dan-ro) Scoop does not add anything to the path. It adds their Shims directory to path and adds shims to that path. Same as UWP's 'WindowApps' directory.

  5. gep13 commented on May 29, 2020

    @gep13

    Just to be clear, Chocolatey has this functionality as well, and has for a long time.

  6. added this to the milestone on May 29, 2020
  7. ferventcoder commented on Mar 19, 2021

    @ferventcoder

    To follow up on what Gary mentioned and make sure the credit is in the proper place, I just wanted to note that Chocolatey brought about the idea of shims not to clutter your PATH - it existed long before Scoop was created as a concept called batch redirects. Later we moved to shim exes. Luke thought shimming was great and added it to Scoop. Just want to make sure the credit is in the proper place on shims.

    References:

    I think your confusion might be in that Chocolatey could defer to an installer as well, which might put things on PATH. Scoop doesn't use the installer at all, it just unpacks, so the shims are much more necessary. Chocolatey's docs on this - https://docs.chocolatey.org/en-us/features/shim

    (NOTE: This is a repost of what I noted on a different issue).

  8. quangkieu commented on Mar 19, 2021

    @quangkieu

    Windows already has some kind of shim in windowsapp folder. Like wt.exe for windows terminal; wsl.exe for the lixus sub system

  9. quangkieu commented on Mar 19, 2021

    @quangkieu

    I think the manifest need someway to specify which to shim from final install folder

  10. denelon commented on Feb 18, 2022

    @denelon
    Collaborator

    We are working on support for portable / standalone executables like NuGet. This mechanism is being considered as a part of:

  11. quangkieu commented on Feb 18, 2022

    @quangkieu

    Demitrius Nelon (@denelon) as taking about shim, I wonder if we could request open version of windows store shim for like wt.exe, wsl.exe to use in personal project

  12. denelon commented on Feb 18, 2022

    @denelon
    Collaborator

    Quang Kieu (@quangkieu) what you are referring to is an App Execution Alias I believe. This is part of the behavior supported by MSIX packages. https://docs.microsoft.com/windows/msix/desktop/desktop-to-uwp-prepare

  13. denelon commented on Jul 7, 2022

    @denelon
    Collaborator

    Windows Package Manager 1.3 preview releases and the Windows Package Manager 1.3 release candidate use symbolic links for portable applications to avoid cluttering a user's path environment variable. We're still discussing the relative value of trying to create a mechanism affecting the path when an installer is used for a package. We've added install notes to give users information about a recently installed package that could contain information like the requirement to restart the terminal session to get any potential path entries that have been made by an installer.

  14. KaranKad commented on Oct 9, 2022

    @KaranKad

    If an app depends on some .dll file within its directory, symbolic links do not work. Also, symbolic links require admin permission.

  15. shoogle commented on Nov 1, 2022

    @shoogle

    Not every Windows executable supports command line usage. We should be able to list the ones that do in the app manifest and then the shims for them would be created automatically in an existing directory that's already in PATH.

    restart the terminal session to get any potential path entries that have been made by an installer

    That's what we want to avoid having to do 😉. Both the restarting of terminal and the pollution of PATH with new directories are bad.

    FWIW, Homebrew also creates shims (or rather it permits maintainers to do so in the app manifests). See Homebrew/homebrew-cask#18809: "Everyone agrees shim scripts are desirable, so lets allow them."

    Winget is more modern and IMO more elegant than the other package managers, but this pain point is a major inconvenience that makes it difficult to recommend right now.

  16. removed this from the milestone on Nov 14, 2024
  17. ttimasdf commented on Jan 20, 2025

    @ttimasdf

    From my observation some packages already start using this feature, like astral-sh.uv.

    So maybe we can close this issue since it has been already resolved?

    get-command uv
    
    CommandType     Name                                               Version    Source
    -----------     ----                                               -------    ------
    Application     uv.exe                                             0.0.0.0    C:\Users\user\AppData\Local\Microsoft\WinGet\Links\uv.exe
  18. samhocevar commented on Jul 28, 2025

    @samhocevar

    From my observation some packages already start using this feature, like astral-sh.uv.

    So maybe we can close this issue since it has been already resolved?

    The astral-sh.uv package uses a portable installer, so it can use the PortableCommandAlias feature. This discussion is mostly about non-portable installers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Issue-FeatureThis is a feature request for the Windows Package Manager client.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions