# 1. Mods as Additional Catalogs
Part of [[Modding with Addressables]]. Next: [[2. Authoring a Content Pack]].
In this course a **mod** (or a cosmetic / optional pack) is a **content catalog plus its bundles**, loaded at runtime with official `Addressables.LoadContentCatalogAsync`, then addressed with the same `LoadAssetAsync` / `InstantiateAsync` you already know from [[3. Loading Instantiating and Releasing]]. It is not a new programming language, and it is not a storefront.
## 1.1 What can be in the pack
Assets that use **types already compiled into the player**:
- Prefabs whose scripts are types the player already contains (a hat that uses your existing `CosmeticAttach` component).
- ScriptableObject definitions whose classes already live in the game ([[ScriptableObject Architecture]]).
- Textures, audio, Animator controllers that your existing runtime knows how to play.
- Optionally an Addressable **scene**, loaded with `LoadSceneAsync` as in [[5. Scenes Catalogs and Remote Content]], if that scene only references player-known types.
## 1.2 What this series will not do
- Load a **new managed DLL** or "drop in a .cs file and compile it in the player." Addressables is an asset catalog, not a scripting sandbox. If a later elective wants a verified scripting hook, that is a different, carefully scoped design — not a hidden API in 2.9.1 `LoadContentCatalogAsync`.
- Implement IAP, paid DLC checkout, or Unity Economy. A pack may be optional; selling it is out of scope ([[Publishing to itch.io and Steam]] stays non-commercial).
- Redo groups, Play Mode Scripts, or the release-handle rules. If you leak a handle here, reread [[3. Loading Instantiating and Releasing]] and [[7. Addressables Pitfalls and Quest]].
## 1.3 Trust is a design requirement
A catalog is a map plus bundles you did not necessarily build in the same sitting as the player. Treat the catalog **URL or path** as something you chose (a class server, a known HTTPS folder, a file next to the player). Do not teach "paste any URL from chat" as a feature. Part 4 covers hash files, HTTPS, and failed loads.
## 1.4 Exercise
Write the pack contract on a cover sheet: one label you will use (`cosmetics` or `mod_hats`), three asset types allowed, and a sentence that all MonoBehaviours on those prefabs already exist in the player.
## Sources
- https://docs.unity3d.com/Packages/
[email protected]/manual/LoadContentCatalogAsync.html
- [[Addressables]]