How to work with Unity Package Manager in Unity 2017.2.x+

Unity Package Manager was added in 2017.2.x.
When upgrading our project, we saw that it creates a bunch of empty folders for packages in the project folder, as follows:

└── Packages
    ├── com.unity.purchasing
    ├── com.unity.purchasing@0.0.19
    ├── com.unity.standardevents
    └── com.unity.standardevents@1.0.10

All of them are empty. The generated manifest is also empty:

$ cat UnityPackageManager/manifest.json
        "dependencies": {

This raises a few questions:

  1. Are those empty folders actually used? Removing them and re-opening the project seems to re-create them.
  2. Do they need to (or should) be checked into the project repository? Since they are generated empty, they cannot be added to Git or Mercurial (which is what we use).
  3. How do we pick or pin specific packages or versions of those packages?
  4. How do we guarantee that our project is built with the same versions across all developer machines and build machines? The last thing we want is one of the machines to randomly pick a different version of a package and produce different results! I tried moving the contents of those packages from my local user folder into the project folder and repository, but the moved files do not seem to be used, and instead the ones in local user folder get repopulated…

Hi @zzgrzyt ,

1. You should not see these folders in the project browser. If this is the case, please open a bug. 2. The file `manifest.json` should be persisted in your source control system. Please see for more info. (Please note the folder was renamed `Packages` in 2018.1) 3. In 2017.2, this should not be exposed as stated above. So you cannot do anything. In 2018.1, a proper UI is exposed to manage packages. 4. The project manifest (`manifest.json`) will give you this guarantee.