In short

A UPackage is the container for anything stored on disk. It holds one or more UObjects and functions as the outermost container object for any .uasset.

In depth

What was and is now a UPackage from Nick Darnell (from BenUI's Discord server)

Thanks to Eren (Unreal Source Discord) for sharing the message

In Text: “A long time ago, in UE1,2,3, things like textures, levels, meshes…etc we’re stored on a package, you might place all of your games textures into a single texture package.

This of course, is madness. It meant that if you were an artist on the team and wanted to import a new texture you had to checkout and checkin a package that might be several hundred megs. Lame.

In early pre-UE4, they decided to move to one asset per package. So just like before the outer of all assets, textures, blueprints, whatever is always a UPackage. It’s the container for anything stored on disk. It’s also used for temporary storage like, the outermost of any arbitrarily constructed UObject that doesn’t have a specific outer gets the transient package.

So that’s all it is, a package holds one or more UObjects and functions as the outermost container object for any uasset”

Thanks Olsson, Northsar, Baffled and Ramius for the following

Also, all reflected c++ types are stored in the packages /Script/ModuleName. ModuleName here is a “package”, /Script/ModuleName is the path to the module “package” on the virtual filesystem. The ModuleName isn’t a real package, the module in that path is saying where that package belongs.

Note: Script/ is for c++ files and Game/ is for assets.

For example a Blueprint package has 2 assets: the blueprint (blueprint.blueprint) and the generated class (blueprint.blueprint_C).

For example a blueprint asset package contains two objects: UBlueprint asset and UBlueprintGeneratedClass UClass