Repository navigation
Install in LocalAppData on Windows #1592
Description
Description
By default, Vite+ is installed in %USERPROFILE%\.vite-plus. This adds clutter to the user's profile folder, especially since the folder is not hidden (unlike on POSIX systems). This issue is related to #827.
Suggested solution
Change the default installation location to either %LOCALAPPDATA%\vite-plus (which is equivalent to $XDG_DATA_HOME) or in %LOCALAPPDATA%\Programs\vite-plus (which is used by MSI installers as the default per-user install location).
Strictly speaking, the default per-user install location is a known folder with the ID FOLDERID_UserProgramFiles. The default path is %LOCALAPPDATA%\Programs, but it can be overridden on an individual system. Therefore, the path to this folder should be retrieved by calling the SHGetKnownFolderPath function in shell32.dll. The following script uses P/Invoke within PowerShell to get the value (with no error checking):
# Here be P/Invoke...
$Shell32 = ([System.Management.Automation.PSTypeName]'Win32.Shell32').Type;
if (-not $Shell32) {
# The PreserveSig = false setting automatically unmarshals the return value.
$signature = @'
[DllImport("shell32.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode, ExactSpelling = true, PreserveSig = false)]
public static extern string SHGetKnownFolderPath(
ref Guid rfid,
uint dwFlags,
IntPtr hToken
);
'@
$typeArgs = @{
MemberDefinition = $signature
Name = "Shell32"
Namespace = "Win32"
PassThru = $true
};
$Shell32 = Add-Type @typeArgs;
}
# GUID for FOLDERID_UserProgramFiles known folder: {5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}
# $guid = [System.Guid]::ParseExact("{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}", "B")
# $guid = [guid]"{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}"
$guid = [System.Guid]::new(0x5CD7AEE2, 0x2219, 0x4A67, 0xB8, 0x5D, 0x6C, 0x9C, 0xE1, 0x56, 0x60, 0xCB);
# The flag in the second argument tells Windows to create the folder if it doesn't exist
# The null pointer as the third argument means we get the known folder path for the current user
$path = $Shell32::SHGetKnownFolderPath([ref]$guid, 0x00008000, [IntPtr]::Zero);
return $path;Alternative
No response
Additional context
No response
Validations
- Read the Contributing Guidelines.
- Confirm this request is for Vite+ itself and not for Vite, Vitest, tsdown, Rolldown, or Oxc.
- Check that there isn't already an issue requesting the same feature.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Start date
Target date
Effort
Activity
liangmiQwQ commentedon Sep 19, 2026
Completed in #2346