AIXER Logo

Automated Extension Building, No More Manual Hustle

AIXER — Empowers Everyone To Build Extensions

Make Extensions For App Inventor, Kodular, Niotron & Other AI2 Based No-code App Builders.

AIXER is a powerful build system for MIT App Inventor extensions. Create dependency-based extensions like AdMob, Play Billing, ExoPlayer, and more with CLI tools, a desktop GUI, and a reproducible packaging pipeline.

Coming soon in next update: AI Integration To Automate Everything :)
🖱

Capabilities

AIXER ships with professional-grade tooling for building, testing, and shipping App Inventor extensions.

Capability AIXER
CLI buildsYes
Desktop GUI (AIXER Studio)Yes
Environment diagnostics (aixer doctor)Yes
Maven + Gradle dependency resolutionYes
Auto-import → dependency inferenceYes
ProGuard / R8 release buildsYes
Kotlin supportYes
Multi-component extensionsYes
Markdown docs (build --docs)Yes
Annotation stripping in output .aixYes (default)
FAST / Rush project migrationaixer migrate

All Features

AIXER ships with everything you need to build, test, and ship professional App Inventor extensions.

📂

Extension Scaffolding

Create new extension projects instantly with aixer init. Supports Java and Kotlin with optional SDK presets.

⚙️

Dependency Resolution

Automatically resolve Maven & Gradle dependencies. Auto-detect dependencies from Java/Kotlin imports.

📦

30+ SDK Presets

Curated SDK presets for AdMob, Lottie, Play Billing, ExoPlayer, OneSignal, Firebase, and more.

🚀

Release Builds

Build production-ready .aix files with ProGuard/R8 optimization. Smaller, obfuscated, and secure.

💻

Desktop GUI (AIXER Studio)

Launch the AIXER Studio desktop application with aixer gui for a visual build experience.

🔍

Environment Doctor

Audit your development environment and project with aixer doctor — catch issues early.

📜

Markdown Documentation

Auto-generate Markdown documentation for your extension with aixer build --docs.

🧰

Custom XML Resources

Add custom XML for ExoPlayer, FileProvider, layouts, drawables, and more. Validated with aixer xml check.

🔄

FAST / Rush Migration

Seamlessly migrate existing FAST or Rush projects to AIXER with aixer migrate.

🏠

Kotlin Support

Write your extensions in Kotlin with full build support and dependency resolution.

🗄️

Helper Dropdown Blocks

Support for red dropdown helper blocks via @Options and OptionList enums.

🌐

Multi-Platform

Works on Windows, Linux, and macOS with bundled Python and JDK support.

📦

Global JAR Management

Manage shared JARs across all projects with aixer global-jar commands.

📱

Multi-Component Extensions

Build extensions with multiple components in a single .aix package.

♻️

Annotation Stripping

Automatically strip compile-time annotations from shipped bytecode for smaller .aix files.

🔧

Dex & Tools Support

Dex JAR files with D8/R8 and manage optional build tools like rt.jar, desugar.jar, jetifier.jar.

📶

Future Updates

Update AIXER to the latest version with aixer update.

🏆

GitHub Actions CI

Automatically generated GitHub Actions workflow on init for continuous integration.

🧪

Smart Auto Build Pipeline

AIXER is smart enough to automatically handle to bring the extensions in your hands with its smart auto proguard rules handling, shrinking and sdks' jar packaging capabilities.

Installation Guides

Choose your platform and follow the steps to get AIXER up and running.

1

Install Python 3.8+ on your system

2

Open Command Prompt (Cmd) > navigate to the AIXER folder > run this command:

python3 -m pip install -e .
3

After that run this command:

aixer setup
4

Installation Done!

1

Install Python 3.8+ on your system

2

Open Terminal > navigate to the AIXER folder > run this command:

python3 -m pip install -e .
3

After that, run this command:

aixer setup
4

Installation Done!

Note: On some Linux distros or macOS setups (especially with system Python), you may need to use pip3 instead of python3 -m pip, or add --user if you hit a permissions error.
1

Install Python 3.8+ on your system

2

Open Terminal > navigate to the AIXER folder > run this command:

python3 -m pip install -e .
3

After that, run this command:

aixer setup
4

Installation Done!

Note: On some Linux distros or macOS setups (especially with system Python), you may need to use pip3 instead of python3 -m pip, or add --user if you hit a permissions error.

Choose Your Plan

Get started with a free trial, then unlock all features with a premium license.

🏆 1 Day Free Trial

Try AIXER free for 1 day with full access to all features. No credit card required. Start building extensions immediately.

Commands & Usage

Master AIXER with its complete set of CLI commands for building, managing, and deploying extensions.

Command Description Example
aixer init Create a new extension project with optional SDK presets aixer init MyExtension --sdk admob --sdk billing
aixer build Build extension into .aix file. Use --release for ProGuard/R8 aixer build --release --docs
aixer sync Download/sync all Maven/Gradle dependencies aixer sync --clean
aixer doctor Audit your AIXER environment and current project aixer doctor --json
aixer sdk Manage SDK presets (list, info, add, suggest) aixer sdk list
aixer sdk add lottie billing
aixer sdk info admob
aixer migrate Convert FAST or Rush project to AIXER aixer migrate --force
aixer xml Validate and normalize custom XML resources aixer xml check
aixer xml normalize res/xml/foo.xml
aixer gui Launch AIXER Studio desktop GUI application aixer gui
aixer install Install Python, JDK, and AIXER build tools aixer install
aixer update Update AIXER to the latest version aixer update
aixer update --pip
aixer activate Register email or refresh AIXER license aixer activate --email user@example.com
aixer license Show current license status aixer license
aixer setup Download required global JARs (android.jar, simple_components.jar) aixer setup
aixer global-jar Manage global JARs shared across all projects aixer global-jar list
aixer global-jar add mylib.jar
aixer global-jar remove mylib.jar
aixer dex Dex a JAR using D8/R8 from bundled tools aixer dex input.jar --output output.jar
aixer tools Manage optional build tools (rt.jar, desugar.jar, etc.) aixer tools status
aixer tools get rt.jar
aixer uninstall Uninstall AIXER and remove local cached data aixer uninstall --yes
aixer version Show AIXER version aixer version

Project Guide

Understand the AIXER project structure, key configuration files, and how to edit them for your extensions.

📁 Project Structure

When you run aixer init MyExtension, AIXER generates the following project layout:

MyExtension/ 📄 aixer.yml # Main project configuration 📁 src/ io/aixer/myextension/ MyExtension.java # Your extension source code 📁 deps/ jars/ # Local JAR dependencies aars/ # Local AAR dependencies 📁 output/ # Built .aix files go here 📁 assets/ icon.png # Extension icon (32x32) 📁 xml/ # Custom XML resources .gitignore README.md 📁 .github/workflows/ build-extension.yml # GitHub Actions CI
Key takeaway: Your Java source goes in src/, dependencies go in deps/, custom XML in xml/, and the built extension lands in output/. All configuration is centralized in aixer.yml.
📒 Java Source File (AdmobAdsPro.java / YourExtension.java)

Your extension's main Java class extends AndroidNonvisibleComponent and uses App Inventor annotations. Here is a typical AdMob extension as an example:

package io.aixer.myextension; import com.google.appinventor.components.annotations.DesignerComponent; import com.google.appinventor.components.annotations.SimpleFunction; import com.google.appinventor.components.annotations.SimpleObject; import com.google.appinventor.components.annotations.UsesLibraries; import com.google.appinventor.components.annotations.UsesPermissions; import com.google.appinventor.components.common.ComponentCategory; import com.google.appinventor.components.runtime.AndroidNonvisibleComponent; import com.google.appinventor.components.runtime.ComponentContainer; @DesignerComponent( version = 1, description = "AdMob Ads extension built with Aixer.", category = ComponentCategory.EXTENSION, nonVisible = true, iconName = "aiwebres/icon.png" ) @SimpleObject(external = true) public class AdmobAdsPro extends AndroidNonvisibleComponent { public AdmobAdsPro(ComponentContainer container) { super(container.$form()); } @SimpleFunction(description = "Load a banner ad.") public void LoadBannerAd(String adUnitId) { // Your AdMob logic here } @SimpleFunction(description = "Show interstitial ad.") public void ShowInterstitial(String adUnitId) { // Your interstitial logic here } }

What to change and why

Element Change Why
package Set to your unique package name, e.g. com.yourcompany.yourext Uniquely identifies your extension in App Inventor
@DesignerComponent(version) Increment when you publish updates Tells App Inventor to update the component
@DesignerComponent(description) Describe what your extension does Shown to users in the App Inventor palette
className Rename your class (e.g. AdmobAdsPro) Must be unique; becomes the component name in App Inventor
@UsesPermissions Add Android permissions your extension needs Required for accessing device features (Internet, Camera, etc.)
@UsesLibraries Reference library JARs your extension depends on Ensures required libraries are bundled in the .aix
@SimpleFunction Add methods with this annotation Each annotated method becomes a block in App Inventor
Note: You can also use @SimpleEvent to fire events back to App Inventor, @SimpleProperty for properties, and @Options for dropdown helper blocks. Use aixer init --lang kotlin to generate a Kotlin version instead.
⚙️ aixer.yml — Main Configuration File

This is the central configuration file for your AIXER project. AIXER reads this file to understand how to build your extension, what dependencies to resolve, and which tools to use.

# aixer.yml — Aixer project configuration name: MyExtension # Extension name package: io.aixer.myextension # Java package name version: 1 # Version code (integer) version_name: "1" # Version name (string) language: java # Source language: java or kotlin min_sdk: 21 # Minimum Android SDK version description: "MyExtension built with Aixer." proguard: false # Enable ProGuard shrinking authors: - Aixer Creator help_url: https://aixer.dev/docs icon: icon.png dependencies: resolver: auto # Dependency resolver: auto, maven, or gradle remote: # Remote Maven dependencies - com.google.android.gms:play-services-ads:23.6.0 - com.android.billingclient:billing:7.1.1 local_jars: [] # Local JAR files in deps/jars/ local_aars: [] # Local AAR files in deps/aars/ tools: processor: auto # Annotation processor tools_jar: auto # JDK tools.jar desugar: auto # Java desugaring tool jetifier: auto # AndroidX migration tool xmls: [] # Custom XML resource mapping auto_include_xml: true # Auto-include xml/ folder strip_annotations: true # Strip compile-time annotations generate_docs: false # Auto-generate docs on build sdks: [] # SDK preset IDs

Key fields explained — what to change and why

Field What to Change Why
name Set to your extension name, e.g. AdmobAdsPro Used as the output filename (AdmobAdsPro.aix) and component name
package Your unique Java package, e.g. com.yourcompany.ads Must match the package in your Java file. Prevents conflicts with other extensions
version / version_name Increment version (integer) for each release; version_name is the display string Users see version_name; code uses version to check for updates
language java or kotlin Tells AIXER which compiler to use. Must match your source code language
proguard Set true for release builds Shrinks and obfuscates your extension code. Use aixer build --release to activate
dependencies.remote List Maven coordinates: group:artifact:version AIXER downloads these automatically during aixer sync. Add your SDK dependencies here
dependencies.local_jars List JAR filenames placed in deps/jars/ For dependencies you've downloaded manually. AIXER bundles them into the .aix
xmls Map XML source files: source: xml/file.xml, target: xml/file.xml Custom XML resources like FileProvider paths, ExoPlayer layouts. The target must NOT start with res/ (App Inventor adds it). Use aixer xml check to validate
strip_annotations Keep true (default) Removes compile-time annotations from bytecode, resulting in a smaller .aix file
sdks Add preset IDs like admob, billing, lottie Pre-configures dependencies, ProGuard rules, and manifest entries. Use aixer sdk list to see all available presets
Common mistake: Forgetting to run aixer sync after adding new dependencies in dependencies.remote. Always run sync before building!
📦 aixer_jars.yml — JAR Whitelist / Blacklist

This file is auto-generated by aixer build and controls which JARs are included in or excluded from your final .aix file. You can edit it to fine-tune the content of your extension package.

# aixer_jars.yml — JAR inclusion decisions # whitelist = JARs to include in the AIX. # blacklist = JARs to exclude from the AIX. # Generated by `aixer build`. You may edit this file. whitelist: - play-services-ads-lite - play-services-ads-base - billingclient blacklist: - kotlin-stdlib - kotlinx-coroutines - annotations

How to edit — what to change and why

Section Usage Why
whitelist Add partial JAR names to force include them in the .aix Use when AIXER's auto-detection misses a required library. The name is matched as a substring against all resolved JAR filenames
blacklist Add partial JAR names to exclude them from the .aix Use to strip unwanted libraries (e.g. kotlin-stdlib if the user already has it, or documentation JARs). Reduces .aix file size
Tip: You can change the output path of this file by adding jars_config: aixer_jars.yml to your aixer.yml. Delete this file to regenerate it from scratch on the next build.
📱 AndroidManifest.xml — App Permissions & Components

You can add permissions, activities etc. directly to AndroidManifest.xml file.

Requirements

AIXER is lightweight and works with standard development tools.

🐍

Python 3.8+

Bundled with Windows installer

JDK 8+

JDK 17 recommended (auto-installed)

🖥️

Windows / Linux / macOS

Fully cross-platform

Get Help

Have questions or need support? We're here to help.

Contact via WhatsApp Purchase License Download AIXER