Nine Unity Packages That Are Worth the Import
Every package is a dependency you will maintain. Here are nine that consistently pay for themselves on mobile projects, and the ones we stopped using.

A package earns its place when it replaces work you would otherwise write and maintain yourself. On mobile projects nine consistently do: input, UI text, tweening, camera control, addressable content, localisation, testing, profiling analysis, and a save or serialization helper. Everything else is usually optional.
Why this matters
Packages are not free. Each one adds build size, compile time, a version to track, and a risk that an engine upgrade breaks something.
That cost is invisible early and obvious late, usually during a platform update when three dependencies need attention at once.
The useful discipline is not avoiding packages. It is being able to say what each one replaces.
How we judge whether a package earns its place
Four questions, applied before importing anything.
- What would we write instead? If the answer is under a day, write it.
- Is it actively maintained? Check the last release date against the current engine version.
- What does it cost in the build? Some packages are small; some pull in an entire subsystem.
- Can we remove it later? A package touching every file is difficult to reverse.
Every dependency is a promise to maintain something you did not write. Nine is a reasonable number of those promises. Thirty is not.
The nine, and what each replaces
1. The current input system. Replaces a pile of platform-specific input handling and makes touch, mouse, and controller behave consistently. Worth adopting at project start rather than mid-way, since migration touches every control.
2. TextMeshPro. Replaces the legacy text component. Better rendering at every size, proper font atlases, and far fewer draw calls in UI. This one is close to mandatory.
3. A tweening library. Replaces dozens of hand-written coroutines animating positions, scales, and colours. It is the single largest reduction in boilerplate available, and it makes the timing work in Making a 2D Game Feel Good practical rather than tedious.
4. Cinemachine. Replaces custom camera scripts. Damping, lookahead, dead zones, and confinement come configured rather than written. For 2D and simple 3D games it removes a week of fiddly work.
5. Addressables. Replaces hand-rolled loading and bundle management. The reasoning for and against is in Addressables or Asset Bundles.
6. The localisation package. Replaces a spreadsheet and a lookup script. Worth adding early even for a single language, because retrofitting text extraction later is genuinely painful.
7. The test framework. Replaces manual verification of the parts of your game that are pure logic. Economy maths, save migration, and level validation all benefit, and none of them need a running game to test.
8. A profiling analysis tool. Replaces reading raw profiler output. Being able to compare two captures and see what changed turns performance work from guesswork into measurement.
9. A serialization helper. Replaces the built-in serializer's limitations around dictionaries, polymorphism, and nullable types, all of which show up in save systems. The reasons this matters are in Save Systems That Do Not Corrupt.
Packages we removed, and why
Four categories that looked useful and were not.
| Removed | Reason |
|---|---|
| Large asset store frameworks | Imposed an architecture we then worked around everywhere |
| Multiple overlapping UI kits | Two ways to build a screen means neither is the way |
| Analytics wrappers | An extra layer over an SDK that already had a simple interface |
| Unused engine modules | Physics, terrain, and video modules shipping in games that never used them |
The pattern is consistent. Packages that solve a narrow problem age well. Packages that want to own your architecture age badly, because your project eventually needs to do something they did not anticipate.
Watching your dependency and build cost
Three habits keep this manageable.
- Audit the manifest each milestone. Remove anything unused. It takes ten minutes and prevents a slow accumulation.
- Pin versions. Automatic updates during a milestone are a source of mysterious breakage.
- Check module inclusion in player settings. Disabling unused engine modules reduces build size for free, which connects to Cut Your Unity Build Size in Half.
Before an engine version upgrade, check each package against the target version first. One incompatible dependency can hold a project on an old version for months, which becomes a problem when a platform requirement changes.
What we would do
Start a new mobile project with four: input, TextMeshPro, a tweening library, and Cinemachine. Those four pay back within the first weeks on nearly every project.
Add Addressables and localisation when the project's shape is clear, which is usually after the prototype. Add testing when the first piece of real logic appears, typically the economy or save system.
Then hold the line. When somebody proposes a tenth package, ask what it replaces and how long that would take to write. Frequently the honest answer is an afternoon.
The short version
- Judge a package by what it replaces, whether it is maintained, its build cost, and whether it can be removed.
- Input, TextMeshPro, tweening, and Cinemachine are worth having from day one.
- Addressables, localisation, testing, profiling analysis, and a serialization helper follow as the project takes shape.
- Packages that own your architecture age worse than packages that solve one problem.
- Audit the manifest every milestone and pin versions during a push.
- Check every dependency against the target version before an engine upgrade.
Open your package manifest and remove anything you cannot say a sentence about. If you want a second look at a project's dependencies before an engine upgrade, get in touch.
Related reading: 12 Free Tools Solo Devs Use to Ship Faster, Unity Mobile Performance, and Godot or Unity in 2026.
Got a game idea? We build it.
You bring the concept. We design, build, test and launch it, and you own 100% of the finished game.
Share Your Game Idea →