Package Manifest Overview
Rather than using scripts AppGet uses YAML
files to define application packages. The manifest file provides all information required to install a package by AppGet. We believe this is dramatically more secure and much easier to maintain that the alternatives.
All available packages are hosted in our official GitHub Repository. You can review and propose changes to any of the manifests using a pull-request.
For example, vlc.yaml
id: vlc
name: VLC media player
version: 3.0.3
home: https://videolan.org/
license: GNU Lesser General Public License v2.1+
installMethod: NSIS
installers:
- location: https://get.videolan.org/vlc/3.0.3/win32/vlc-3.0.3-win32.exe
sha256: 65bf42b15a05b13197e4dd6cdf181e39f30d47feb2cb6cc929db21cd634cd36f
- location: https://get.videolan.org/vlc/3.0.3/win64/vlc-3.0.3-win64.exe
sha256: 59940804b6a89f0c83b576247dd90f2c5a22b8c7f040ebf82813c59968828035
architecture: x64
Root Fields
id
(Required) The unique ID of the package. See Package ID
name
(Required) Full marketing name of the application See Package Name
version
Version of the application
home
Fully qualified product homepage URL where users can see vendor provided information about the application
repo
Fully qualified URL that points to the software repository hosting the source of the application; usually on GitHub, GitLab, Bitbucket, SourceForge, etc.
license
Software license under which the application has been released and distributed
installMethod
(Required) The install method used by the package. Supported values are:
MSI
MSI or Windows InstallerInno
Inno Setup by JRSoftwareSquirrel
SquirrelWix
Wix ToolsetNSIS
Nullsoft Scriptable Install SystemInstallBuilder
BitRock InstallBuilderCustom
none of the above
Installers
installers
list contains all installers available for the application. Each manifest must have at least one installer. But can have more to support multiple CPU architectures or different versions of Windows.
Installer Fields
location
Fully qualified URI that points to the installer. Currently only HTTP and HTTPS protocols are supported but support for more protocols are planned.
architecture
CPU architecture supported by this installer. Supported values are: x86
, x64
. If architecture isn't specified x86
will be assumed
sha256
Used to validate the integrity and correctness of the downloaded file
minWindowsVersion
Minimum version of Windows required for the application to install/work correctly.
Table below describes the list of supported values for minWindowsVersion
Manifest Value | Desktop | Server |
---|---|---|
6.0 | Windows Vista | Windows Server 2008 |
6.1 | Windows 7 | Windows Server 2008 R2 |
6.2 | Windows 8 | Windows Server 2012 |
6.3 | Windows 8.1 | Windows Server 2012 R2 |
10.0 | Windows 10 | Windows Server 2016 |
Package ID
The “Package ID” is the primary identifier for an application in AppGet. It’s also the value users will use to install or interact with the package.
Keep in Mind
Package ID is not meant EVER to change, take extra care to pick an appropriate package name that follows the convention and rules below.
Here are some things to keep in mind when trying to create an ID for a new package
- Only allowed to contain letters, numbers and dash. Things like
+
should be spelled out, for examplenotepad-plus-plus
- Only lowercase letters are allowed
- Vendor name is usually omitted, unless application name is too generic. For example use
adobe-reader
instead ofreader
- Don't include the version of the App in the ID unless the version is part of the Product Name. This exception usually comes in the form of year, for example
office-2017
visual-studio-community-2017
- Keep the edition of the app in the ID if more than one edition is available, e.g.
docker-community-edition
- Keep the release channel of the app in the ID except for the main channel. example,
chrome
should install the regular version of chrome whilechrome-canary
should install the Canary release channel. Same rule and apply to LTS releases as well, for examplenode
andnode-lts
- Inevitably, there are a small number of exceptions not covered by the rules. Don’t hesitate to contact the community if you need any clarification.
Package Name
Relax :)
Package name is not nearly as important as the Package ID since it's only used for display purposes and can be updated without breaking anything.
- Start with the English marketing name of the Application, such as
Google Chrome
,Microsoft Office
,Dropbox
. The easiest way to find this name is too look up the application in Wikipedia; the Article title is usually the name we are looking for. - Remove the version numbers
- Don't include hardware designations such as “for x86”, “32-bit”
- Pay attention to details, for example:
Git Hub
vsGitHub
vsgithub
Tags and Versions
Even though tags and versions might seem similar they serve very different purposes. You can think of Tags and Versions in the same way you think of ID and Name
Version is mostly used for display purposes. It lets the user know which version of the application will be installed by the manifest. In the future, it will also be used to allow you to upgrade already existing packages. On the other hand Tags are used to install a specific version of an application when available.
Tags
AppGet uses tags similar to the way that docker repository uses tags using the package-id:tag
syntax. When interacting with packages omitting the tag assumes the default latest
tag. for example appget install node
and appget install node:latest
have the same effect.
Tags aren't meant to be used for release channels (LTS, nightly, beta, preview etc.). Release channels should be appended to the ID of the package (See Package ID) and are considered separate packages. For example chrome
and chrome-canary
are considered two different packages. However different release channels can have their own underlying version tags, for example node-lts:8.11
and node:10.1
Tags should only be used when being able to install and stay on a specific major release is both common AND desirable.
When should a tag be used:
- If newer versions of an application introduce major breaking change or drop of major functionality
- If for mission critical reasons staying on a specific version of an application is common. This is commonly used for development platforms e.g. Node, Python etc.
- For licensing purposes, For example, if newer versions of an app require a new/upgraded license/key