← Overview

Why no APM

One extension, one file. No dependency chains.

NO APM NEEDED. Download and enjoy. It can’t get any simpler. Just update the Adobe AIR SDK. If you need help, we are here.

Why our native extensions for Adobe AIR come without a package manager, without a core library and without helper ANEs, and what that changed in our own apps.

45 → 13 ANEs−6.5 MB on Android−5.9 MB on iOSAbout 2× faster start

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 app45, of them 35 third-party, most of them helper ANEs → 13, all our own
Application descriptorAndroid: 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 appabout twice as fast
Background workno 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

Contact

Moving away from dependency chains?

We replaced them in our own apps step by step. If you want to do the same in your AIR app, we'd like to hear from you.

[email protected]