The problem with dependency chains
Many AIR extensions that are installed with a package manager (APM) do not come alone. They bring a chain of helper ANEs: a shared core library, Android support libraries, Google Play services, Firebase, network and image libraries. Often these helpers are only there because another extension needs them.
Every one of these ANEs is packaged into your app and loaded when it starts, whether your app uses the feature or not. The app gets bigger, starts slower and does more work in the background.
What we measured in our own apps
Our apps stream live video and two-way voice, often from older phones and tablets. In 2026 we replaced every third-party extension in them with our own self-contained extensions and compared the results on real devices:
| Extensions in the Android app | 45, of them 35 third-party, most of them helper ANEs → 13, all our own |
| Application descriptor | Android: 197 → 133 lines (manifest additions 117 → 85), iOS: 161 → 126 lines. Fewer manifest entries to maintain and fewer things to break |
| App size | −6.5 MB on Android (−10 %), −5.9 MB on iOS (−14 %) |
| Start of the app | about twice as fast |
| Background work | no analytics or helper libraries running beside the stream: more CPU and bandwidth left for video and voice, which matters most on older devices |
Conflicts and update pressure
When several extensions share the same helper ANEs, their versions have to match. A new version of one extension often requires new versions of the shared helpers, and then of every other extension that uses them.
The result: updates you did not need, version conflicts at build time, and every combination has to be tested again on every platform. That is work that does not make your app any better.
Our approach: self-contained
Wrapping platform libraries in a thin shell and hanging a set of helper ANEs on it is the quicker way to ship many extensions. Building every extension complete and self-contained takes far more work: each one has to bring exactly what it needs, be tested on its own on every platform and still work next to all the others. We chose that work, so that you don't carry the consequences in your app.
- One file per feature. Each extension is a single ANE. No core library, no helper ANEs, no package manager.
- Only what the feature needs. Where a platform library is required, such as Google Play Billing or Firebase Cloud Messaging for push on Android, the build adds exactly that library automatically. Nothing else.
- Independent updates. Updating one extension never forces you to update another.
- Proven in production. Every extension runs in our own apps on iOS, Android and macOS and is tested on current and older devices.
Add the extension ID to your application descriptor, copy the file into your project, done. See all extensions · Pricing