There was a discussion about this on Addressables forum, but since it's been 2 years since last official response, I'd like to get some recent insights into the situation. https://forum.unity.com/threads/bug-1-2-4-duplicate-textmeshpro-assets-in-bundles.754211/ Our project stumbled upon this issue because we made the decision to put almost all of the game assets into Addressables (and away from Resources/ BuildSettings) except for a small Boot scene. We have a lot of UI prefabs/scenes with TMP elements that reference materials and font assets. These same assets are meant to be in Resources folder by the way TextMeshPro is currently implemented (as of 3.0.6). Because there is no way to have Unity reference assets across Resources and AssetBundles, there is inevitable asset duplication. Because we target mobile platforms and some font assets were pretty big, this became an issue. To overcome, I had to resort to some ugly hacking (see thread above). I had to put everything (TMP Settings, materials, Font Assets, Sprites) outside of Resources - it's the only way to get rid of duplication. But then I realized just how deeply TextMeshPro is tied to Resources folder both at Editor and Runtime: TMP Settings must be in a strict hard-coded path in Assets folder (not ideal because we try to put all third party stuff into a dedicated folder..) and must be in Resources. You can ignore it and just move this asset out and load via Addressables, but TMP will complain that "essential assets" needs to be imported and some editor functions won't work (like font asset creation). You can't dynamically load fallback fonts. This is a big problem if you want to support various languages but don't want to keep ALL fonts in memory (some fonts like Japanese or Chinese have thousands of symbols and better not be loaded until they are needed). To work around this I had to: Create a "template" TMP Settings asset with empty Fallback fonts array; Load this asset via Addressables and then manually inject (by reflection hacking) only the required Font Assets based on current user language into the instantiated clone of the asset; Replace the static instance of TMP Settings with this clone (again, using reflection). If you reference materials by name using rich text tags and your materials are not in Resources folder - it won't work. Some more hacking is required. Doing a search in code for Resources.Load you can see some even less obvious uses. Each one is a potential issue.. So in the end, current situation with TextMeshPro assets is rather grim: TextMeshPro is a must-have package promoted by Unity; Addressables is a must-have package promoted by Unity; They do "kinda" work together.. except not really, you get a duplicate asset issues which can be (and actually is) critical for "real" production projects on mobile platform; TMP is hard-wired into Resources (which Unity manual advises against using since forever...) which does not work at all with Asset Bundles; If you need to optimize text asset memory usage / build size - you need to resort to hacking or creating and maintaining local fork of TextMeshPro (both are a lot of work and have pros and cons). Please consider addressing this.