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, including helpers your app only needs for a small part of what they contain. 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.
distriqt with APM compared to Klug
Until 2026 our own apps used extensions from distriqt (airnativeextensions.com), installed with APM. Today they use only our own extensions. This is what changed for us:
| distriqt with APM | Klug | |
|---|---|---|
| Installation | with APM, the AIR package manager | copy one ANE file, add its extension ID. No APM |
| Helper ANEs | a Core ANE plus dependency ANEs; in our Android app: AndroidX, Google Play services, Firebase, Kotlin, Guava, gRPC, OkHttp, Picasso and more | none. Each extension is self-contained |
| Downloads | APM downloads every extension together with its whole chain of dependency ANEs; different versions of the same helper lead to build conflicts | one download per feature, nothing else |
| Load on the device | every helper ANE is packaged into the app and loaded at start, even parts the app never uses | only the code the feature needs: smaller app, faster start |
| Dependency | when Apple or Google change their requirements, you wait until the extension, its helpers and APM are all updated | we update with every new iOS, Android and macOS and test in our own apps first |
| Extensions in our Android app | 45, of them 35 third-party | 13 |
| Updates | shared helper ANEs have to match across all extensions | every extension updates on its own |
| Price per extension | yearly subscription, single extensions up to $70 per year, all extensions $200 per year | from €9 per year, support from €39 |
| Catalogue | much larger, many more extensions | 14 extensions, all running in our own published apps |
Our experience: in our apps we repeatedly had to wait for updates of extensions and their helper ANEs before we could meet new Android and iOS requirements in time. With our own extensions we no longer wait.
Prices as published on airnativeextensions.com and on our pricing page in November 2026. distriqt is a trademark of its owner; we are not affiliated with distriqt.
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.
- New devices first. iPhone Duo, Galaxy Z Fold and Galaxy Z Flip are already supported, including folding and rotating at runtime.
- Light while streaming. The camera light works during a live stream: with KlugMedia, and with KlugTorch on iOS.
- No silent discontinuation. If we ever discontinue an extension, you hear it from us at least 12 months in advance, and your paid licence keeps working until the end of its term. See the licence terms.
- 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