guinget Changelog

What's new in guinget 0.3.0.2 Beta

May 12, 2022
  • Fixed:
  • Some packages have manifests that result in a file path that's too long for Windows. On Windows 10 version 1607 and higher, the LongPathsEnabled Registry key allows you to remove the 260-character path limit (259 characters with a NUL at the end). Applications have to change their manifest to support this, and this version of guinget has done such. If you still have issues, you can open the EnableLongPathsEnabled.reg file using an elevated (Administrator) Command Prompt or PowerShell. As with any .reg file, it's wise to check it in Notepad first. You can also turn this feature off by opening DisableLongPathsEnabled.reg in another elevated prompt. You may need to restart your computer for these changes to take effect. A future version will make this easier. See also: #149
  • Changed:
  • The database URL that we pull from has been updated to be https://cdn.winget.microsoft.com/cache/source.msix from https://winget.azureedge.net/cache/source.msix as winget will probably soon have a new version that uses this URL. Currently things don't appear broken, but they might soon. See also for my issue in my repo: #150 and also the winget PR that changed the URL: microsoft/winget-cli#2026 and see this for the winget preview version it's part of: https://github.com/microsoft/winget-cli/releases/tag/v1.3.1251-preview
  • Updated Microsoft.Data.Sqlite and Microsoft.Data.Sqlite.Core to 6.0.5 from 6.0.3.
  • Deprecation notices:
  • The dropdown boxes in the Action column are deprecated in this version and will be removed in v0.4 since it was difficult to keep them with efficiency improvements. As a result, there's a new option in the Options window Package List + Details tab that'll let you single-click in the Action column to open the package context menu instead of having to double-click if you want to get used to how v0.4 will be. This is off by default, as it's kinda wonky with dropdown columns. Please see the related content in the Added section for more information.
  • Since the code to get details from winget is deprecated, it was commented out in version 0.1 alpha. This code may continue to exist in this state as an example for how to get info from winget.

New in guinget 0.3.0.1 Beta (Mar 28, 2022)

  • Added:
  • As mentioned in the Deprecation notices section, there's a new checkbox in the Options window Package List + Details tab that'll let you single-click in the Action column to open the package context menu instead of having to use the dropdowns, which will be removed in v0.4 since it was difficult to keep them with significant efficiency improvements. It's off by default due to wonkiness related to slowly clicking multiple times and causing the dropdown to activate along with showing the context menu. You can turn it on by navigating to Tools>Options...>Package List + Details and checking the Show Action column context menu when single-clicking one of the cells in that column checkbox.
  • Fixed:
  • Sometimes the package list SQLite database wouldn't be properly closed by libguinget, so now I'm making sure everything related to the database is disposed and that the connection has its pools cleared after the datatable is filled. Before there would rarely be a messagebox that shows up asking you to close the Explorer window that's navigated to the package list cache folder. I would sometimes leave that folder open by accident, and that messagebox was meant to only show up in that situation, but sometimes the database wouldn't be properly closed and would incorrectly claim that Explorer is open to that folder. Maybe I should try to figure out if I can show what program has a handle to the database, just in case it ends up not being Explorer, which would mean that people will know what's going on more easily and I wouldn't have to open up Process Explorer to figure out what's going on during development.
  • libscrollswitchtabs was using the "Apace" License due to a typo, which has been corrected as it uses the Apache License, Version 2.0.
  • Changed:
  • Both guinget and libguinget are now built using the Release configuration. This appears to decrease memory usage significantly (at least 20 MB when loading the package list, probably more), even though I didn't think it would help much because the filesize was barely any smaller, and so I didn't use it until now.
  • When loading the package list, the main window's progress bar no longer gets refreshed every time a package is added to the datagridview, and it only goes up by a certain amount every so often.
  • If the current row is divisible by 100 and there are 100 or more packages total, then the progress bar will go up by 100 every 100 packages.
  • If the current row is divisible by 10 and there are 10 or more but fewer than 100 packages total, then the progress bar will go up by 10 every 10 packages.
  • If there are fewer than 10 packages, then the progress bar will go up by 1 for every package, just like how it used to work.
  • This change makes guinget a little more efficient, but it may still say "(Not responding)" in the titlebar. Further optimizations in v0.4 will make package list loading far more efficient, and will usually no longer display "(Not responding)" in the titlebar. Early testing shows that it may still display in Task Manager, though.
  • Due to the way searches currently work, this change was also applied to searches and filters. This is unnecessary in v0.4, as searching is near-instant in that version thanks to the "further optimizations" mentioned previously.
  • The KDE-style fast resize checkbox now has a statement that "neither guinget nor Drew Naylor are associated with KDE, and KDE is (R) KDE e.V.)". This is something I just completely forgot that I should do, which is weird considering I did that for the 7-Zip and RoboCopy options currently under the Experimental tab.
  • Licenses and legal notices have been added for all dependencies used by Microsoft.Data.Sqlite, because I realized that would be a good idea when I noticed Microsoft.Data.Sqlite was now under the MIT License. I also realized that I didn't have the license files for it and its dependencies that I'm required to include, since I just forgot even though I added the license for YamlDotNet a long time ago.
  • New installations will default to the DrewNaylor folder in the Start menu due to the removal of the space in my name so it looks more like I'm a serious developer than just... my name going, "Hello!" like Michael Rosen when you open the Start menu.
  • Moved almost all About window text into Resources for easier editing.
  • YamlDotNet has been updated to version 11.2.1.
  • Microsoft.Data.Sqlite and Microsoft.Data.Sqlite.Core have been updated to version 6.0.3.
  • SQLitePCLRaw.bundle_e_sqlite3, SQLitePCLRaw.core, SQLitePCLRaw.lib.e_sqlite3, and SQLitePCLRaw.provider.dynamic_cdecl have been updated to version 2.0.7.
  • System.Runtime.CompilerServices.Unsafe has been updated to version 6.0.0.
  • The postbuild script now has an easy way to switch between Debug and Release builds by just changing a variable.
  • Deprecation notices:
  • The dropdown boxes in the Action column are deprecated in this version and will be removed in v0.4 since it was difficult to keep them with efficiency improvements. As a result, there's a new option in the Options window Package List + Details tab that'll let you single-click in the Action column to open the package context menu instead of having to double-click if you want to get used to how v0.4 will be. This is off by default, as it's kinda wonky with dropdown columns. Please see the related content in the Added section for more information.
  • Since the code to get details from winget is deprecated, it was commented out in version 0.1 alpha. This code may continue to exist in this state as an example for how to get info from winget.

New in guinget 0.3 Beta (Jun 26, 2021)

  • Added:
  • KDE-style fast resize (issue #71; pr #125)
  • While resizing the window, the package list is replaced with a screenshot of itself that's then stretched until resizing is finished.
  • One side-effect of this is that the package list will flicker after moving the window because moving a window counts as resizing it. Not sure how to make it only use the fast resizing during an actual resize and not a move.
  • Any windows above the package list will show up in the screenshot while resizing it. Not sure how to prevent that from happening, but it's not really that big of an issue.
  • This is on by default, and can be turned off by unchecking the Use KDE-style fast resize for the package list so that resizing the window is smooth when there are a lot of packages listed checkbox under Tools>Options...>Package List + Details. Doing so will return to the previous resizing behavior.
  • "Validate Manifest" window (issue #28)
  • Tools>Validate manifest... displays a window that allows you to enter or browse for a manifest to validate.
  • By default, it uses a folder browse window for use with multi-file manifests, but you can check the Browse for singleton manifest checkbox below the textbox to use a file open dialog, which will let you select a single-file manifest.
  • When you're ready for validation, simply click the Validate button at the bottom-right and the manifest will be passed to winget with output displayed in CMD.
  • "In Soviet Russia, manifest validates you."
  • Per-user installation options are now available in the manifest. Personally I highly recommend not using per-user installation for security reasons, but I think winget requires or at least highly recommends making it available for people.
  • Fixed:
  • All the packages now display as expected when you scroll to the bottom before clicking the package list or moving controls around. (issue #117)
  • Packages with lowercase IDs will now be sorted properly rather than being shown after the rest of the packages. (issue #111)
  • The currently-selected package now displays its details once the cache update is complete. Usually this will be the first item in the package list. This has been a regression since database-loading became the default.
  • The Import and Export menu items weren't blocked while refreshing the cache. (issue #109)
  • Changed:
  • Way faster cache updates and package list loading (pr #110)
  • Loading the package list isn't (usually) painfully slow anymore as the statusbar isn't being manually updated every time a row in the package list is updated. Sometimes it can still be slow, though.
  • Something else that may help increase the speed of package list loading would be that the list of manifests is now put together with Async stuff.
  • Updating the cache is now a lot faster. Most of the changes involve extracting only .yaml files and moving the folders instead of copying them. As a result of the speed improvements, we now show each file as it's being extracted and the extraction progress bar displays as you'd expect, where it increases for each file.
  • Canceling the zip file extraction will now immediately stop the cache update without you having to wait if you cancel it during the manifest zip file extraction as the cancel update flag is checked before each file is extracted. The database extraction still doesn't extract per-file, so it may take a bit to cancel, but it shouldn't be necessary as it was fast before. (issue #124)
  • If it's still slow for you, opening guinget, letting it run for a bit, and closing it a few times should get .NET Framework's JIT to compile it to machine code for better performance.
  • RoboCopy is still used if not using the built-in .NET Framework stuff and will probably be replaced with a move command in a future version for consistency.
  • Instead of being a regular TextBox, the package details textbox is now a RichTextBox. This means you can click links in manifests without having to copy and paste them. There's still a context menu, though with only Copy, Select All, and Right to left Reading order as the rest weren't really important or didn't seem to do anything.
  • Searches and package-marking may also be a bit faster as they're also not constantly updating the statusbar. Searches are still a little slow at the moment due to the DataGridView control being slow at hiding rows.
  • Closing the cache update window now sets the cancel update flag just like if you clicked the "Cancel" button. This has been a problem since v0.1 alpha, but it's now addressed. There's no way to stop it during the moving phase, so it'll just continue in the background if the window is closed. (issue #129)
  • Canceling the cache update while downloading the manifest zip file will cancel the rest of the update.
  • The 7-Zip and RoboCopy cache update code is now Async so that the progress bars update while running the commands and the windows remain interactive. (pr #116)
  • In the Apply Changes window, the Confirm changes and Close buttons have switched places to match the Options window. As a result, the sizes of both buttons may be slightly different. (issue #127)
  • The Package Details tab in the Options window is now Package List + Details to accommodate the fast resizing feature's checkbox without having to add more tabs that would be redundant. Additionally, the checkboxes on that tab have their own groupboxes to keep them visually separate. (pr #125))
  • Showing or hiding the sidebar is now done after changing HiDPI sizes if done through the Options window. This means it may take a bit for things to catch up, but it should also look less broken.
  • The uninstaller in Add & Remove Programs/Programs and Features/Apps & features now only displays "guinget" as the name rather than also showing the version number.
  • YamlDotNet has been updated to version 11.2.0.
  • Microsoft.Data.Sqlite has been updated to version 5.0.7.
  • The installer has been compiled with Inno Setup Compiler 6.2.0. The most noticeable effect of this is that there are new icons in the installer and in Apps & features.
  • Documentation has been updated.
  • An unused class has been commented out.
  • Removed:
  • Update-manifests.bat support has been completely removed and the script was moved to the deprecated folder in case anyone wants to see what it was. Updating to guinget v0.3 beta will delete the update-manifests.bat file in the installation directory. (pr #116)
  • Support for directly loading manifests has been completely removed along with its associated text in the Options window. (pr #116)

New in guinget 0.2.0.3 Alpha (Jun 21, 2021)

  • Fixed:
  • All the packages now display as expected when you scroll to the bottom before clicking the package list or moving controls around. (issue #117)
  • Packages with lowercase IDs will now be sorted properly rather than being shown after the rest of the packages. (issue #111)
  • Loading the package list isn't (usually) painfully slow anymore as the statusbar isn't being manually updated every time a row in the package list is updated. Sometimes it might still be pretty slow, though. Further optimizations in v0.3 should help a lot with this. (part of pr #110 but manually backported)
  • Changed:
  • The uninstaller in Add & Remove Programs/Programs and Features/Apps & features now only displays "guinget" as the name rather than also showing the version number. This is something else that's backported from v0.3.
  • YamlDotNet has been updated to version 11.2.0.
  • Microsoft.Data.Sqlite has been updated to version 5.0.7.

New in guinget 0.2.0.2 Alpha (Apr 7, 2021)

  • Added:
  • Initial support for multi-file manifests.
  • Requires loading from the database, which is now automatically set to on when upgrading to this version using the installer.
  • Directly loading manifests by modifying the config file will result in a bunch of extra entries showing up because I didn't implement a version of multi-file manifest support for it as it's deprecated.
  • Fixed:
  • There's a potential performance regression relating to loading package descriptions that should be fixed or at least mitigated now.
  • If a single-file manifest can't be found when selecting its package in the package list, the package details textbox will now display "(Couldn't find manifest)" instead of continuing to show the previously-selected package's manifest.
  • Spacing has been added between the labels in the download progress window so they don't clip into each other at some DPI settings.
  • Changed:
  • Single-file manifests now have a header that says "Manifest" above them in the package details textbox for consistency with the multi-file manifest section headers.
  • As mentioned previously, database-loading is now enforced on upgrading using the installer. If things aren't displaying properly, you can use the Defaults button in the Options window to check the database-loading checkbox, then click OK.
  • There are some wording updates in the Options window relating to database-loading.
  • YamlDotNet has been updated to version 11.0.1.
  • Microsoft.Data.Sqlite has been updated to version 5.0.5.
  • Removed:
  • Does hiding the database-loading checkbox and deleting its description label count?
  • Deprecation notices:
  • Please be aware that loading manifests directly is deprecated and UI configuration for the feature was removed in guinget v0.2.0.2. A future version will fully remove it. More details: #105
  • update-manifests.bat is deprecated. Its removal will be done in stages to slowly transition to a world that no longer relies on update-manifests.bat for any scenario:
  • For now it'll stay in the package, but be unused by default. <-- You Are Here
  • Eventually the version in the package will be changed to be a simple script that tells you where to download the main script.
  • After a while it'll be fully removed from the package.
  • A while after that support for it will be fully removed from guinget. It's expected that support will be fully removed by the time guinget (and winget, but it may take longer for guinget to gain that feature) supports multiple sources, if not in the same version.
  • It may be possible that it'll go from being supported in a way that requires it to be enabled manually to being removed from the package, or having support be removed completely, all at once.
  • Since the code to get details from winget is deprecated, it was commented out in version 0.1 alpha. This code may continue to exist in this state as an example for how to get info from winget.

New in guinget 0.2.0.1 Alpha (Mar 31, 2021)

  • Added:
  • Support for the new v1.0 singleton manifests and their file paths.
  • Multi-file manifests will have initial support in guinget v0.2.0.2, with better support in a future version.
  • Since ShortDescriptions are now supported in the manifests and some migrated packages have the ID as their ShortDescription, the regular Description is shown instead if the package ID matches the ShortDescription.
  • Fixed:
  • The code for replacing only the first period in an ID was corrected so it actually works now instead of always using the fallback like it used to.
  • Changed:
  • YamlDotNet has been updated to version 10.0.0.
  • Removed:
  • Because support for v1.0 manifests was added, support for v0.1 manifests was dropped. Shouldn't be a problem since the main repo was migrated.
  • Deprecation notices:
  • Please be aware that loading manifests directly is deprecated and UI configuration for the feature will be removed in guinget v0.2.0.2. More details: #105
  • update-manifests.bat is deprecated. Its removal will be done in stages to slowly transition to a world that no longer relies on update-manifests.bat for any scenario:
  • For now it'll stay in the package, but be unused by default. <-- You Are Here
  • Eventually the version in the package will be changed to be a simple script that tells you where to download the main script.
  • After a while it'll be fully removed from the package.
  • A while after that support for it will be fully removed from guinget. It's expected that support will be fully removed by the time guinget (and winget, but it may take longer for guinget to gain that feature) supports multiple sources, if not in the same version.
  • It may be possible that it'll go from being supported in a way that requires it to be enabled manually to being removed from the package, or having support be removed completely, all at once.
  • Since the code to get details from winget is deprecated, it was commented out in version 0.1 alpha. This code may continue to exist in this state as an example for how to get info from winget.

New in guinget 0.2 Alpha (Mar 11, 2021)

  • Added:
  • Support for uninstall and upgrade
  • Uninstall and Upgrade are available in the package context menu, Selected packages menu, and the Action column dropdowns.
  • Both may require experimental winget features to be available and on for them to work.
  • You can use Ctrl+U to mark a package for uninstallation and Ctrl+P to mark a package for upgrade.
  • Unfortunately, there were no other characters that fit better for the accelerator than p in upgrade.
  • Filtering the Action column
  • Action column filters are available from the sidebar dropdown by changing it from Search terms to Action.
  • Double-clicking or pressing Enter on any of them works almost like the Search terms list, except nothing gets sent to the search box.
  • Unlike the Search terms list, you can't clear this listbox.
  • From PR #93: Now you can filter packages based on how they're marked, like Synaptic. You get to the Action filters by opening the sidebar dropdown and choosing Action. From there you can double-click or press Enter on the items in the listbox to filter as desired, or use All for an unfiltered list. As these filters use the same code as the search box, it says "Searching for (filter)..." in the statusbar even though it's looking in the Action column. Additionally, if it's set to search after a cache update, a regular search will be performed if there's text in the search box. This regular search will override any other filter since it uses the same core code.
  • Importing and exporting packages
  • These features rely on winget import and winget export and require the relevant experimental features to be on.
  • You can use them from File>Import packages... and File>Export packages..., respectively.
  • Keyboard shortcuts are available for both.
  • Import packages...: Ctrl+O
  • Export packages...: Ctrl+S
  • Keyboard shortcuts are subject to change if better ones are suggested.
  • JSON is the main file type in the browse dialogs, but you can show all files if you need to.
  • Choosing a file in the import dialog will run winget import (your-filepath-here), and saving a file in the export dialog will run winget export (your-filepath-here).
  • The next version will add options to choose which (if any) import and export flags will be sent to winget.
  • Had a tough time figuring out what accelerators to set, so if anyone suggests better ones than m for Import and o for Export, they might be changed as long as they don't conflict with any other items in the File menu.
  • Viewing available upgrades
  • View>Available upgrades... will open a CMD window and run winget upgrade to display a list. Eventually something better than CMD may be used so text doesn't disappear if it's long.
  • Requires the relevant experimental features to be available and on in winget.
  • Viewing installed packages
  • View>Installed packages... will open the Apps & features page in the Settings app by default.
  • If the Settings app can't be run, we'll try to run Programs and Features in Control Panel instead.
  • You can change what opens from this menuitem by going to Tools>Options...>Apps and UIs, and selecting something in the dropdown. Available choices:
  • Settings app: Apps & features (default)
  • CMD: winget list
  • Control Panel: Programs and Features
  • Using winget list requires the relevant experimental feature to be on in winget, if it's not already considered stable.
  • Deleting temp files after cache update
  • This is what update-manifests.bat offered the user, and now it's available in guinget by default.
  • You can turn it off by unchecking Delete temp files after cache update from Tools>Options...>Refresh Cache, and clicking OK.
  • If you're an app developer who's using libguinget, simply set PackageListTools.DeleteTempDirsAfterCacheUpdate = True before running the cache update to use this.
  • Temporary files are always deleted before refreshing the cache.
  • Specify version number when installing, upgrading, and uninstalling
  • By default, version numbers are passed to winget when installing, but not when upgrading or uninstalling.
  • For uninstallation, this is to ensure something doesn't get messed up when the "wrong" version is uninstalled.
  • It's expected that you'll want to upgrade to the latest version, so it's also not passed to winget on upgrade.
  • You can change these from Tools>Options...>Apply Changes and the mini-form in the Apply changes window accessible from the Options... linklabel in the bottom-left corner as mentioned below.
  • From the Options window: Not specifying a version number will just use the latest version according to winget. You may want to use this when installing, but maybe not when upgrading or uninstalling as that may cause issues.
  • Reset package status in the Apply changes window
  • Right-click on a package and choose Reset status for selected package to change its Current status back to Ready if you have trouble with winget and need to change your settings but don't want to close and reopen the Apply changes window.
  • You can also reset the status for all packages using Reset status for all packages.
  • Skip certain packages
  • In case there's a package you don't want to have it try to install/uninstall/upgrade again after resetting status or forgot to unmark before opening the Apply changes window with other packages marked, you can use Skip selected package to set a selected package's Current status to Skip so you can use the Confirm changes button instead of having to go one-by-one.
  • Any packages with their Current status set to Skip will be ignored until resetting that package's status or closing and re-opening the Apply changes window.
  • Mini-form for Apply changes-related options
  • Both of the checkboxes that were on the Apply changes window were moved into a new mini-form, accessible from the Options... linklabel in the bottom-left corner of the Apply changes window.
  • This mini-form duplicates everything in the full Options window's Apply Changes tab, with some wording changes here and there.
  • When the Apply changes window is moved around, this one stays "glued" to just below the bottom-left corner.
  • Maximizing the Apply changes window moves this one to the bottom-left corner just above the Options... linklabel.
  • Any changes in this mini-form will be applied as soon as the control for that setting is changed.
  • If things get messed up by accident, you can use the Defaults button in the bottom-left corner to reset the settings in this form to default.
  • The Close button just closes the form and isn't a cancel button, unlike the full Options window.
  • Resizing this window will give you scrollbars, though the buttons at the bottom appear to cover the checkboxes and other controls. Might be a good idea to do a table layout panel and put the controls and buttons in separate panels.
  • Checking the Automatically open this window when the Apply Changes window is opened checkbox will, as it says, open the mini-form every time Apply changes is opened. I notice that the checkbox text is different to the Apply changes window text, so I'll eventually change the Apply changes window text to be properly capitalized as a window title.
  • Since it may be difficult to see all the controls in the mini-form, it may eventually be merged into a sidebar for the Apply changes window. Didn't really want to do that after getting everything working in this version as late as it was implemented.
  • Known issue: If the Apply changes window is too low when you open the mini-form, the mini-form will be offscreen. (issue #101)
  • Buttons to delete cache files guinget uses
  • You no longer have to manually delete guinget's cache in case things break. Instead, you can use the Delete cache files in Local AppData button from Tools>Options...>Maintenance.
  • If you're an app developer using libguinget, you can call it with this:
  • libguinget.PackageListTools.DeleteCacheFilesInRoaming(Me, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"Delete cache files in Local AppData")
  • Older versions of guinget used Roaming instead of Local, so you can also delete that cache using the Delete cache files in Roaming button from the same tab as the other button.
  • Developers using libguinget can use this by calling
  • libguinget.PackageListTools.DeleteCacheFilesInRoaming(Me, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Delete cache files in Roaming")
  • It's assumed you're using this from a form as the messageboxes are attached to the calling form.
  • The Maintenance tab will be moved to a sources manager app in a future version. It's in the Options window for now because it's easier and faster than putting together another program with its own UI.
  • Pressing Delete on an item in the sidebar search terms list will clear it.
  • Running CMD from guinget
  • You can run CMD right from guinget in case you need to drop into a terminal to do something in winget using File>Run CMD.
  • Running CMD elevated is available with File>Run CMD elevated (UAC)
  • Keyboard shortcuts for each are available.
  • Run CMD: Ctrl+Alt+T
  • Run CMD elevated (UAC): Ctrl+Alt+Shift+T
  • Known issue: Running CMD from guinget on 64-bit Windows causes filesystem redirection to occur, resulting in anything that has to be launched from the "real" System32 not working correctly. (issue #98)
  • Unless you need to run something like SystemPropertiesProtection.exe from the "real" System32 folder, you're probably fine.
  • This may affect running Add and Remove Programs on Wine from this CMD window, though.
  • If you need to use the "real" System32 folder, just use CMD from the Start menu, I guess. Compiling guinget as 64-bit would fix this, but winget doesn't offer multiple architectures yet and I don't want to have people manually install a different version.
  • Copyright info for winget is displayed in the About window now.
  • Fixed:
  • Some of the ListBox controls in the sidebar tabpages are the wrong size. (issue #74)
  • Canceling the UAC dialog after clicking "Edit winget settings as admin (UAC)" causes a mild exception. (issue #77)
  • If there's only one package loaded, the statusbar text will now display "1 package loaded" instead of "1 packages loaded".
  • If there are fewer manifests available than the number of rows in the database that are returned, it won't crash anymore.
  • This fix isn't part of the library, so other programs would have to manually add it if they set up the progress bar maximum value the same way I did.
  • The way this was implemented is the progress bar maximum value was being set to the total number of manifest paths found in LocalAppData. That's fine as long as there were as many as or more manifests than returned database rows, but if manifests are manually deleted, it's not ok.
  • Now we're setting the maximum value to the number of rows in the database if we're supposed to load from the database.
  • Other crashing issues related to the database-loading code have been fixed, such as where you had to manually delete the manifest folder to use the database.
  • Changed:
  • Search when typing, and loading from the database have both graduated from being experimental features.
  • Database loading should be better, faster, and stronger too than just loading the manifests.
  • The main benefit is that you'll only see packages winget can also see, but there might be a bit of a speed boost since there's less manifest reading.
  • Loading only the latest version of each package is still off by default since some packages don't display the correct latest version and there's no way to force a specific version without the full list.
  • Search when typing is also off by default since it might bother people if it just starts searching all of a sudden and they don't expect it.
  • You can turn on search when typing through Tools>Options...>Search, and check Search when typing.
  • If the delay is too much or not enough, you can change it from the default of 325 milliseconds.
  • For loading the latest versions only, you can check the relevant checkbox on the Refresh Cache tab in the Options window.
  • Existing installs will have to turn this on manually from Tools>Options...>Refresh Cache since each new version migrates settings from the previous version automatically. Eventually I'll add a way to reset the settings to get the new version's config file instead.
  • Marking a package or multiple packages will store the width of the column and re-apply it right after the autosize is turned off.
  • This makes it so that no matter how many packages are being marked at once, it should be fast and look ok except for the first time you mark a package in a given session.
  • Not sure why, but the first time you mark any packages in a session, the Action column shrinks until they're marked. If I figure it out, I'll fix it in a future version. (issue #94)
  • The package list in the Apply changes window is now unselected when you open it since it confused me a while back and might confuse other people.
  • When downloading, extracting, and copying the manifests, the progress dialog now stays on top of just the main window if possible. If a main window isn't specified, it'll fall back to being on top of every window.
  • Tabs in the Options window have been switched around where more potentially-relevant ones are above ones that might not be used as much.
  • Since uninstall and upgrade are now supported, mentions of "install" on things like "Install interactively" have been changed to be neutral, such as "Run interactively".
  • guinget's cache has been moved to %LocalAppData%winget-frontends. You can delete the old cache from the Options window Maintenance tab as mentioned above.
  • HiDPI Mode now resizes the package list in the Apply changes window so it's easier to use on higher-resolution devices.
  • The rounded edge on the right side of the toolbar is now hidden.
  • Developers using the library might need to know that some subs and functions were renamed.
  • BulkInstallPkg is now BulkPackageProcessor
  • InstallPkg is now SinglePackageProcessor
  • That might be it, I hope.
  • BulkPackageProcessor has an Actions(i) list as its first thing now. I might stop specifying updates in the library for developers. Please don't use the library unless you're prepared for breakages across versions.
  • There were some wording updates in the Options window.
  • YamlDotNet has been updated to version 9.1.4, and Microsoft.Data.Sqlite has been updated to version 5.0.4.
  • Documentation has been updated. This includes up-to-date info in the readme (except the outdated screenshots), an updated usage guide, and updates to other documentation files for the latest version.
  • Updated copyright years from 2020 to 2020-2021.
  • Removed:
  • Nothing in this version as far as I can tell.
  • Deprecation notices:
  • update-manifests.bat is deprecated. Its removal will be done in stages to slowly transition to a world that no longer relies on update-manifests.bat for any scenario:
  • For now it'll stay in the package, but be unused by default. <-- You Are Here
  • Eventually the version in the package will be changed to be a simple script that tells you where to download the main script.
  • After a while it'll be fully removed from the package.
  • A while after that support for it will be fully removed from guinget. It's expected that support will be fully removed by the time guinget (and winget, but it may take longer for guinget to gain that feature) supports multiple sources, if not in the same version.
  • It may be possible that it'll go from being supported in a way that requires it to be enabled manually to being removed from the package, or having support be removed completely, all at once.
  • Since the code to get details from winget is deprecated, it was commented out in version 0.1 alpha. This code may continue to exist in this state as an example for how to get info from winget.
  • update-manifests.bat Version 2021.01-1 - January 22, 2021:
  • Switched to using LocalAppData instead of Roaming since guinget also switched and anyone that still uses update-manifests.bat would have issues.
  • Added a message at the end of the cache update that allows deleting the cache files in the old location.
  • Updated copyright years.

New in guinget 0.1.3.0 Alpha (Dec 1, 2020)

  • Added:
  • Bulk package installs:
  • For now, they're all passed to winget all at once, but eventually there may be a graphical progress indicator.
  • You can still install one package at a time by double-clicking or pressing Enter on the one you want to install.
  • Only packages marked as "Ready" will be bulk-installed, in case there were others that were installed solo in the current session.
  • To make it easier to bulk-install packages, Confirm changes is now focused when opening the Apply changes window.
  • Tip: If you run into an issue with winget, you can close and reopen the Apply changes window to reset package status and try again.
  • New keyboard shortcuts:
  • Ctrl+I to mark packages for installation (not the best since it looks like a lowercase "L", but there isn't really anything else that would make sense).
  • Ctrl+D to mark packages to be ignored (Do nothing).
  • Ctrl+H to open the Apply changes window.
  • Pressing Ctrl+F when the search box is focused will send focus back to the package list.
  • Update winget sources:
  • If winget doesn't automatically update its sources, you can now use the Package list>Update winget sources menu item to have it update its sources without having to type winget source update manually.
  • For some reason as mentioned in a few other places in this changelog, winget doesn't properly update its sources if it's running elevated. As a result, please don't run guinget version 0.1.3 and above as an administrator; elevating winget is handled automatically via an option described below and as a separate menu item if you want to edit winget settings as an administrator, also described below.
  • An elevated winget session does pick up the source updates done from a non-elevated user account if you have a standard/limited account you usually use and a separate one for administrative activity, so it should work fine if you use that menu item then install a package with winget elevated by guinget.
  • Edit winget settings:
  • Instead of having to type winget settings every time you want to edit its settings, you can just use Tools>Edit winget settings.
  • In case you wish to edit the settings used by an administrator account you elevate winget with, use Tools>Edit winget settings as admin (UAC).
  • If the default JSON file type editor differs between your limited account and the administrator account, the settings file will open in different programs. Changing the default when logged into the other account will change it in this situation as well.
  • Elevate winget:
  • Sometimes winget won't automatically elevate package installers, but now you can force it to with the Elevate winget (UAC) checkbox in the Apply changes window.
  • MSIX packages like Windows Terminal might not install properly if your account used for administrative actions is logged out at the moment.
  • Windows 10 version 2004 might have issues with running winget elevated, so hopefully winget will elevate the installer itself. If it doesn't, then it's broken and there's not really anything you can do based on my experience.
  • The account used for administrative actions must have winget installed, so what you'll probably have to do is this:
  • Log into your administrator account.
  • Download and install winget in your administrator account.
  • Log back into your regular account.
  • Download and install winget in your regular account (if you don't, it won't be able to run for some reason).
  • Make sure winget still runs in both an elevated and non-elevated CMD window (just winget should be enough).
  • Update winget's sources, perhaps using Package list>Update winget sources, or manually type it in CMD. For some reason, winget doesn't update its sources if it's running elevated from a non-administrator account.
  • Now you can use the Elevate winget (UAC) checkbox.
  • Edited excerpt from the usage guide: Please don't run guinget as administrator in version 0.1.3 or higher, as winget seems to have an issue updating its sources when running elevated (which is what guinget does if guinget itself is elevated). If you need to install a package with winget elevated, please use the Elevate winget (UAC) checkbox in the Apply changes window as described above. Be sure to use the Package list>Update winget sources menu item described below if winget complains that it can't find that package/package version, then try installing that package again.
  • When one package is selected, you can show it in winget in any of these ways:
  • Show in winget from the package context menu
  • Selected packages>Show in winget
  • Ctrl+W
  • Currently, this sends the version along with the package ID, but it may be useful to add an option to send only the package ID.
  • If no packages are selected or loaded, this button may look available, but it's not and clicking it will do nothing. I just didn't get around to blocking it in that situation yet.
  • Instead of only showing the package details for the first package you select, now each package shows its details as you select them.
  • If this doesn't work as expected or you prefer the old method, you can uncheck Show last-selected package details when selecting multiple packages under Tools>Options...>Package Details.
  • Please note that if you're using Shift+click and the selection goes above the first-selected package, then the first-selected package's details will be shown instead of the most-recently selected one like it's supposed to. More details.
  • The Apply changes window is now wider to accommodate the Elevate winget (UAC) option.
  • More experimental options have been added, and you can use them by unchecking Hide unfinished controls and experimental stuff on the Tools>Options...>Experimental tab, then reopening the tab. Please note that they're not fully tested and may cause issues.
  • Hide unfinished controls and experimental stuff
  • Name in config file: HideUnfinishedControls
  • Boolean; defaults to True/checked
  • This is listed here because it had a checkbox added to the Options window, but it's been in the config file in every version.
  • May require application restart to take full effect. The rest of these options still apply even if this is on.
  • If unchecked, these options and other unfinished controls will remain visible even after restarting or upgrading guinget.
  • Load only the latest version of each package
  • Name in config file: OnlyDisplayLatestPackageVersion
  • Boolean; defaults to False/unchecked
  • Some packages may display a version number that's not really the latest version. Not sure how to fix this at the moment. Requires loading from the community database checkbox to be checked.
  • Search when typing
  • Name in config file: SearchWhenTyping
  • Boolean; defaults to False/unchecked
  • Instead of requiring you to press Enter or click Search on the toolbar, you can just wait a bit (325 milliseconds by default) for search to run automatically. This feature would probably have been a regular, non-experimental one had it been implemented sooner and not within a week of the expected release phase.
  • Wait time (ms)
  • Name in config file: SearchWhenTypingTimerInterval
  • Integer; defaults to 325
  • This is how long it'll wait after you finish typing before running a search (in milliseconds).
  • Minimum value is 1, and maximum value is 9999.
  • HiDPI Mode
  • Name in config file: HiDPIMode
  • Boolean; defaults to False/unchecked
  • For now, only doubles the height of items in the package list.
  • May eventually be expanded to cover the rest of the controls that are difficult to use on HiDPI devices.
  • Default source name
  • Name in config file: DefaultSourceName
  • String; defaults to "winget"
  • In case the default source for winget is renamed, you can change it so guinget still works. This is used when passing packages to winget to do things like show or install them, because it gets confused when a package is available in multiple sources and there are multiple sources active. One affected package is Windows Terminal.
  • Not really a new feature since it wasn't noticeably lacking before, but you can use the mouse scroll wheel to switch tabs in the Options window. This is provided by libscrollswitchtabs.
  • Help>How to use guinget is available if you ever have trouble, and it goes to the usage guide. You can use F1 for it, too.
  • More copyright info for each library is displayed in the About window now.
  • Fixed:
  • [SECURITY]: An extra is added to the end of the extraction path for security reasons when extracting sources. This also applies to update-manifests.bat version 2020.10-1. Shouldn't be a concern right now, but it could be when third-party sources are used.
  • If multiple sources are used (such as both the default/"community" one and the Store), winget will get confused if you try to install a package available in both, even if you specify the version number. This is no longer the case in guinget as the default source name is now passed to winget. You can change the DefaultSourceName in the config file (or under Tools>Options...>Experimental, if hidden controls are shown) in case the default source's name changes in the future, but it's currently winget. (issue #70)
  • Double-clicking or pressing Enter while the search terms list was focused but nothing was selected (such as after an app restart or after clearing all the search terms) would cause a mild exception. This is fixed now.
  • I messed up the checkbox state when you click the Defaults button in the Options window in 0.1.2, but it's fixed now. (issue #47)
  • guinget 0.1.2 and 0.1.1 appear to ship with the same version of libguinget (0.1.1), even though they don't. This is now fixed for version 0.1.3. (issue #45)
  • If the database is built incorrectly and ends up not giving the correct details for some packages, guinget will no longer crash if it can't find the manifest and ends up trying to load a path with Nothing.
  • The database was broken just after 1 AM EDT on October 8, 2020, so this is to prevent future crashes, even if the database is broken again.
  • Changed:
  • Package Actions have been moved out of their submenu so they're easier to access now:
  • Action: Install instead of Action>Install
  • Action: Do nothing instead of Action>Do nothing
  • The Options window now contains everything that can be configured anywhere else in the UI.
  • You can get to this window from Tools>Options..., but the Search options... shortcut is still available.
  • As a result of containing every available option, the Show sidebar checkbox was moved to the Layout tab as it makes more sense there.
  • Exact matches are now the default when using Selected packages>Search for package ID, but you can change it back by unchecking Use exact match for selected package ID search in Tools>Options...>Search.
  • Only one package can be selected at a time to use this button, otherwise it'll be unavailable. This is how it was intended to be used before, but I didn't make it like that.
  • If no packages are selected or loaded, this button may look available, but clicking it won't do anything. Didn't get around to making it unavailable yet.
  • Since this relies on using double-quotes ("") in the search box, you can surround your search term with double-quotes if you want to do an exact search without using the menu item, even if the option to use exact matches is off.
  • Searches check the entire package ID when surrounded by double-quotes, rather than checking if the package ID simply contains the search term.
  • If the search term doesn't begin and end with double-quotes, exact matches won't be performed.
  • libguinget: Manifest paths are now added to a List(Of String) instead of a String that's manually split with ?.
  • libguinget: GetPackageDetailsTableFromSqliteDB() returns a new column, that being what it thinks is the latest version of a package.
  • Per-user installation is now available in the installer as a result of winget eventually requiring it. If you've already installed for the entire system, you'll have uninstall and reinstall to get the option to install as per-user.
  • YamlDotNet has been updated to version 9.1.0, and Microsoft.Data.Sqlite has been updated to version 5.0.0.
  • Documentation has been updated. This includes up-to-date info and better readability in the readme, an almost entirely rewritten usage guide, and updates to other documentation files for the latest version.

New in guinget 0.1.2.0 Alpha (Oct 22, 2020)

  • Added:
  • Search sidebar:
  • Displays all search terms from the current session, like Synaptic
  • Double-clicking or pressing Enter on one of these terms (aside from All, at the top) will start a search for it
  • Double-clicking or pressing Enter on All at the top of the list will take you back to an unfiltered list
  • The list can be cleared with the items in its context menu :
  • Clear selected search term clears whatever is currently selected in the list
  • Clear all search terms clears everything
  • Both options leave the All entry
  • If you don't want to use the sidebar, you can hide it in three ways:
  • Clicking the X button in the top-right corner next to the page dropdown
  • Unchecking View>Sidebar
  • Unchecking the Show sidebar checkbox in the Options window under Package list>Search options..., and clicking OK.
  • Resizable using the splitter line between it and the package list area, although the size doesn't persist between sessions. May be a good idea to allow this at some point.
  • Please be aware that it may take several more times of pressing Tab to get back to the package list from the search bar when the sidebar is showing.
  • Escape/Esc key clears the search box when focused
  • An Options window has been added:
  • For now, this only has search-related options, but more stuff will be here in a future version. You can get to this window from Package list>Search options... or from Search options... in the Search button dropdown on the toolbar.
  • You can reset the values to default using the Defaults button in the bottom-left corner of the window. These settings won't be applied until clicking OK.
  • Search for all packages containing a specific ID using Search for last-selected ID in the package context menu or from the Selected packages menu
  • Searches are automatically re-run after a cache update if there's something in the search box. This can be turned off by opening Package list>Search options..., unchecking Re-run search after cache update, then clicking OK.
  • The setting for Install interactively (-i) is automatically migrated if using the installer version, as migrating settings relies on being installed to the same folder as the previous version.
  • Some experimental features have been added, and you can use them by changing the config file :
  • Use7zipForExtraction: Boolean; defaults to False:
  • Package manifest ZIP files will be extracted using 7-Zip instead of the built-in .NET extractor. This may be a lot faster, although it's neither fully tested nor is it as complete as the code using the .NET extractor.
  • If 7-Zip can't be found in what's set in PathTo7zip, extraction will fail.
  • PathTo7zip: String; defaults to "C:Program Files7-Zip7z.exe":
  • Specifies the path of the 7-Zip CLI binary for use when using 7-Zip for extraction.
  • UseRobocopyForCopying: Boolean; defaults to False:
  • Robocopy will be used for copying manifests into the proper folder instead of the built-in .NET file copy method. This may be a lot faster, although it's neither fully implemented nor is it fully tested.
  • During testing on my laptop, using 7-Zip and Robocopy reduced the cache updating time from 1 minute 40 seconds to about 1 minute 4 seconds.
  • Closing guinget before the cache update is completed if using Robocopy and/or 7-Zip will leave those programs open and you'll have to close them manually. This should be changed in a future version to automatically close them when closing guinget.
  • LoadFromSqliteDb: Boolean; defaults to False:
  • The package list will be loaded using the same SQLite database as winget uses by default, located at https://winget.azureedge.net/cache/source.msix. This still relies on the manifests to get the package descriptions as those aren't directly available in the database, though.
  • The goal is to allow the database URL to be changed, but it's hardcoded for now. May be a good idea to allow the manifest location to be changed eventually, too.
  • Each package version is listed as a separate entry even when loading from the database, though using the database will make sure only packages winget can display right now are shown.
  • Loading the descriptions may still take a bit as we have to take the package ID and version number and figure out where its manifest is, instead of just grabbing all the manifests and loading from them. In case we can't find a package's manifest, we'll just look through all the manifests until we find the right one.
  • Figuring out where each package's manifest is stored is done in three ways:
  • If replacing all instances of "." in the package ID and appending the package version to the end of the path along with ".yaml" finds a file that exists, then that's great and we'll use that file. This is the fastest method.
  • If that doesn't work, then we only replace the first instance of the "." in the ID and try again with the version thing. This should be fast, too.
  • If neither of those work, then we fall back to looking for manifests with the package's version number in their filename, opening each file match we find, checking the package ID in the file, and if it's a match, we use it. Otherwise we keep going until finding the manifest. At the moment, this doesn't check to make sure that a file exists, so it may crash if it can't find a matching manifest. The Visual Studio profiler says there's a lot of garbage collection going on as well, so this will probably need to be changed to something like Using to keep automatic garbage collection to a minimum.
  • Some packages may be in a different order compared to loading all the manifests at once, but this shouldn't be much of an issue, and clicking the Package column header should sort them as expected.
  • Both the zip file and installer for version 0.1.2 will be larger than version 0.1.1 due to the extra libraries that are used when reading the SQLite database.
  • You may need to manually delete the package list cache located in %AppData%winget-frontendssource before using the database as it may get confused if the manifest directory (winget-pkgs) exists but the database one (winget-db) doesn't. This'll be changed when loading from the database is officially supported.
  • Fixed:
  • Sometimes the package context menu isn't shown where expected. (issue #14)
  • If a manifest cannot be found after being loaded into the package list, guinget will no longer try to load the manifest.
  • Changed:
  • Both guinget and libguinget have been upgraded to use .NET Framework 4.8, primarily to reduce the number of libraries copied to the bin directory when using Microsoft.Data.Sqlite. Users may need to update to .NET Framework 4.8 for guinget/libguinget version 0.1.2 to work on their systems:
  • Microsoft has a table of system requirements available, but to make things simple, versions of Windows prior to Windows 10 1903 (aside from Windows 8.0, which doesn't appear on that list for .NET Framework 4.8 so I assume it's not supported anymore) will have to update to .NET Framework 4.8.
  • Disk space requirements increased from 2.5 GB to 4.5 GB in .NET Framework 4.8, so guinget's disk space requirements are going up as well with a note that it's based on .NET Framework's requirements.
  • Due to using Microsoft.Data.Sqlite for database reading (if set), there are now several more libraries in the bin folder, so all the libraries have been moved to lib. This may cause issues for people upgrading from 0.1.1 or earlier to 0.1.2 without using the installer, so it's recommended to delete the files in there and copy them all from the ZIP file. This will remove any changes made to the config file if they were done in the one next to the app. The installer will delete libguinget and YamlDotNet if present when upgrading.
  • The header of the currently-selected column is now highlighted due to something Microsoft changed in .Net Framework 4.8.
  • More detail has been added to some error messages when the manifest zip file can't be extracted or copied for some reason.
  • YamlDotNet has been updated to version 8.1.2.
  • Package list>Selected package has been moved to its own menu, Selected packages. This helps make both menus less cluttered.
  • If there's something in the search box, it'll appear in the status bar as "Searching for (search term)...". Otherwise it'll just say "Searching..."
  • Package list>Search has been renamed to Package list>Focus search box.
  • The main window has been resized to be a little bigger, as the sidebar made it feel a little small.
  • The cache update progress window's progress bar animation speed has been sped up from 100 to 63 so that it feels like it goes faster even though it doesn't; this is a psychological thing.
  • Uninstaller now mentions the winget-frontends folder after uninstallation. This was a last-minute change in 0.1.1's installer, but it's also in this version.
  • Instead of displaying a hardcoded version number, the About window now display's the version number from the Assembly Info.
  • There's no longer a version number displayed in the main window's titlebar.
  • Documentation has been updated. This includes new screenshots, better organization in the readme, and updates to other documentation files for the latest version.
  • Removed:
  • The non-split Search button on the toolbar has been deleted since the split one is now functional with the Search options... button in its dropdown.
  • No installer startup message is displayed for the default installer anymore.
  • Deprecation notices:
  • Update-manifests.bat is deprecated. Its removal will be done in stages to slowly transition to a world that no longer relies on update-manifests.bat for any scenario:
  • For now it'll stay in the package, but be unused by default. <-- You Are Here
  • Eventually the version in the package will be changed to be a simple script that tells you where to download the main script.
  • After a while it'll be fully removed from the package.
  • A while after that support for it will be fully removed from guinget. It's expected that support will be fully removed by the time guinget (and winget, but it may take longer for guinget to gain that feature) supports multiple sources, if not in the same version.
  • It may be possible that it'll go from being supported in a way that requires it to be enabled manually to being removed from the package, or having support be removed completely, all at once.
  • Since the code to get details from winget is deprecated, it was commented out in version 0.1 alpha. This code may continue to exist in this state as an example for how to get info from winget.