⚡ [OS] Bolt CLI — A Modern, Lightning-Fast Extension Compiler with Java/Kotlin, Maven & Universal Migration!

:high_voltage: Bolt CLI (Universal Edition)

bolt

Build Faster, Compile Smarter.
The Universal, Lightning-Fast Framework & CLI for MIT App Inventor 2 Extensions.

Version 2.0.0

Features • Installation • Commands • Compiler Daemon • Diagnostics • D8 DEX Caching • Live Testing • Mini-NDK • Unit Testing • Licensing • Compatibility • bolt.yml • Build from Source • Credits


:rocket: Overview

Bolt CLI is a modern, high-performance universal command-line tool designed to revolutionize how you develop and build extensions for MIT App Inventor 2 and its distributions (Kodular, Niotron, AndroidBuilder, etc.).

Powered by an in-process Kotlin & ECJ JVM compiler engine, Bolt runs universally on Windows, macOS (Intel & Apple Silicon), Linux, and Android Termux without platform-specific native binary dependencies.

[!IMPORTANT]
Credits & Acknowledgements: Bolt CLI is built upon the excellent foundation of the original Rush CLI project created by Shreyash Saitwal. We express our sincere gratitude and credit to Shreyash and all the Rush contributors for their pioneering work in building compilation toolsets for the App Inventor community.

  • Thanks to Fast CLI by jewel to innovate me to there features functions ideas to help us the excellent innovation develop and implement on Boltcli.

:sparkles: Key Features

  • :package: Advanced Multi-Tier Dependency System: Support for runtime dependencies: (Local JAR/AAR in deps/ or remote Maven coordinates with automatic inline comment stripping), compile-time only compile_time: stubs (strictly excluded from AIX), and companion provided_dependencies: (excluded from final AIX).

  • :desktop_computer: Real-Time System Diagnostics & Clean Terminal Output: Clean, distraction-free bullet logs during bolt build, paired with detailed .bolt/BuildLog.txt recording real-time device specs (CPU cores, physical RAM Used/Total GB, storage disk space, Android/Windows OS detection) and exact build duration.

  • :puzzle_piece: Auto-Injected Helper dropdown blocks (OptionList): Scaffold dropdown block helpers (bolt generate helper <type> or bolt create -t <int|str>) with automatic helper class imports and demo @SimpleProperty dropdown methods injected directly into your main component class.

Helper blocks template here

Helper Enums (OptionList) with Auto-Injected @SimpleProperty

App Inventor supports dropdown blocks through OptionList<T>. Bolt CLI completely automates scaffolding, import injection, and demo property creation with support current project and New project creation:

# Generate Integer dropdown helper enum on existing projects 
bolt generate helper int 
# Or generate String dropdown helper enum 
bolt generate helper str 
# Or generate helper by custom name 
bolt generate helper int Direction
# Or New projects 
#When you generate a helper or create a project with -t int or -t str
bolt create <project name> -h int|str

  • :shield: 100% App Inventor Build Server Compatibility (AAPT & D8): Clean .aix packaging layout with zero duplicate class collisions, XML comment stripping in AndroidManifest.xml, shorthand component expansion (.MyService -> <pkg>.MyService), ${applicationId} substitution, and automated min_sdk verification.
  • :artist_palette: Extension Assets Validation (assets:): Declared assets in assets/ are validated with automated warnings if file size exceeds 5MB to prevent AIX upload rejections, and auto-packaged directly into the .aix archive.
  • :shield: R8 Minimization & Code Preservation (minimize:): Custom exclude_dependency and exclude_project directives automatically generate -keep class <pkg>.** { *; } rules in .bolt/minimize-rules.pro to prevent essential classes from being stripped during shrinking.
  • :globe_with_meridians: Extension Homepage & Auto-Versioning: Declare homepage: to render clickable links in component metadata and out/extension.txt, and enable auto_version: true to increment component version on every successful build automatically.
  • :high_voltage: Lightning-Fast In-Process Builds (bolt build): Compiles Java, Kotlin, AIDL, ProGuard, R8, D8 Dex, and packages the .aix bundle in sub-3 seconds without external JVM spawn overhead.
  • :fire: Persistent Compiler Daemon (bolt daemon): Keeps JVM dependencies, HotSpot JIT, and compiler classes warmed up in RAM for sub-4 second incremental builds.
  • :high_voltage: D8 DEX Compilation & Incremental Caching (--dex, -dx): Compiles Java/Kotlin bytecode into Dalvik/ART classes.dex with incremental MD5 checksum caching for instant cache hits.
  • :counterclockwise_arrows_button: Dev Sync (bolt sync dev): Automatically fetches and updates desugar_jdk_libs:2.1.5 and configuration files directly from Google Maven.
  • :test_tube: Real Unit Testing (bolt test): Execute unit tests locally powered by the official JUnit 5 Platform Console Standalone Runner with automatic test scaffolding and live progress trees.
  • :mobile_phone: Live Hot-Reloading (bolt run): Instant live extension hot-reloading to an Android phone over WebSocket (port 9000) and Wi-Fi UDP auto-discovery (port 9001) without rebuilding APKs.
  • :hammer: Mini-NDK & Native C/C++ (JNI & NDK) Support: Build ultra-compact C/C++ shared libraries out-of-the-box (2-3 KB) using -Oz, -flto, and --strip-all without requiring the full Android Studio NDK!
  • :gear: JNI Native Library Support: Package .so native libraries across architectures (armeabi-v7a, arm64-v8a, x86_64, x86). By parsing @UsesNativeLibraries, Bolt intelligently maps ABI suffixes like -v7a into component_build_infos.json and bundles physical binaries into the .aix per official MIT App Inventor build server specifications.
  • :artist_palette: Custom XML Integration (@UsesXmls): Custom layouts and manifests specified via @UsesXmls are extracted and injected into .aix via component_build_infos.json, maintaining compatibility with Kodular and Niotron.
  • :puzzle_piece: Multi-Component & Android 11+ Manifest Extraction: Build projects with multiple @DesignerComponent classes, and automatically extract <uses-feature> and <queries> tags into component_build_infos.json.
  • :scissors: Annotation Stripping (deannonate): Strip heavy App Inventor metadata annotations silently post-compilation using an ASM-based remapper for maximum binary efficiency.
  • :page_facing_up: Automatic Documentation & Helper Enums: Automatically generates an out/extension.txt Markdown file alongside your .aix summarizing properties, methods, events, and Helper Enums (OptionLists) with parameter tables, return types, and binary size.
  • :locked_with_key: Automated Offline RSA Licensing (bolt auth): Secure your premium extensions with offline RSA-2048 public/private key licensing automatically tied to customer App Inventor email addresses.
  • :open_file_folder: Project Scaffolding (bolt create): Scaffold complete Java or Kotlin projects with pre-filled skeletons (str, int), IDE support (IntelliJ, VS Code, Eclipse), and GitHub Actions workflows.
  • :package: Smart Dependency Management (bolt add & bolt sync): Search Maven Central directly via CLI (bolt add <group>:<artifact>) and resolve remote dependencies automatically.
  • :deciduous_tree: Project Tree Visualizer (bolt tree): Display a beautiful visual hierarchical representation of project files and export clean output to tree.txt.
  • :counterclockwise_arrows_button: Seamless Legacy Migration (bolt migrate): Port legacy projects (Rush, Fast, Extension-Template, AI2 sources) into modern Bolt projects with automatic pre-migration ZIP backups.
  • :shield: Bytecode Shading & Protection: Built-in JarJar relocation (shading), StrGuard string encryption, ProGuard obfuscation, and R8 shrinking with clean noise-filtered logs.
  • :hot_beverage: Modern Java & Kotlin Support: Write extensions in Java 8/11/17/21+, Kotlin, or both in the same project with full AIDL, AndroidManifest, and native App Inventor type resolution (YailList, trove4j, kawa).

:inbox_tray: Installation & Setup

Bolt requires a Java Runtime Environment (JRE or JDK 11+, JDK 17 recommended) to execute.

Note: Bolt bundles its own Eclipse Compiler for Java (ecj.jar), so a standalone javac compiler is not required. Any standard Java 11+ runtime (java) is sufficient to run Bolt CLI.

:window: Windows (PowerShell)

Default location: %LOCALAPPDATA%\Bolt (e.g. C:\Users\<user>\AppData\Local\Bolt)

Run in PowerShell:

iwr https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.ps1 -useb | iex

To install in a custom directory:

& { $(iwr https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.ps1 -useb) } -InstallPath "D:\Tools\Bolt"

To skip Java check/download:

& { $(iwr https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.ps1 -useb) } -SkipJava

:red_apple: macOS & :penguin: Linux

Default location: ~/Bolt

Run in Terminal:

curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.sh -fsSL | sh

To install in a custom directory:

curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.sh -fsSL | sh -s -- --path /opt/Bolt

To skip Java verification:

curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.sh -fsSL | sh -s -- --skip-java

:mobile_phone: Android (Termux)

Default location: ~/Bolt

Build and compile extensions directly on your phone:

termux-setup-storage
curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install-termux.sh -fsSL | bash

To install in a custom directory:

curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install-termux.sh -fsSL | bash -s -- --path ~/my_custom_bolt

To skip Termux OpenJDK installation:

curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install-termux.sh -fsSL | bash -s -- --skip-java

:laptop: Commands Reference

here
Command Description
bolt build [path] Compiles the extension into a production .aix in out/
bolt create <name> Scaffolds a new extension project (Java or Kotlin)
bolt clean [path] Deletes old build artifacts, temporary files, and .bolt caches
bolt tree [path] Visualizes project file hierarchy in terminal and exports to tree.txt
bolt add <dependency> Searches Maven Central and adds dependency coordinate to bolt.yml
bolt sync [path] Downloads and syncs project and dev dependencies into deps/
bolt sync dev Automatically fetches desugar_jdk_libs:2.1.5 & config from Google Maven
bolt sync ndk Verifies and checks Mini-NDK installation in ~/.bolt/libs/ndk
bolt deps <sync|tree> Inspects and resolves project dependency trees
bolt run [path] Starts Live Testing hot-reload server for Android companion (ports 9000/9001)
bolt test [path] Executes real unit tests locally via JUnit 5 Console Platform Runner
bolt auth <init|generate> Extension licensing system (RSA-2048 keypair & customer license generator)
bolt generate helper <int|str> Scaffolds OptionList dropdown helper and injects @SimpleProperty into main class
bolt migrate [type] Migrates legacy projects (Rush, Fast, Template, AI2) with auto ZIP backup
bolt daemon <start|stop|status> Manages the persistent background Bolt Compiler Daemon
bolt upgrade Upgrades Bolt CLI to the newest available release

Command Options

here
  • -r / --proguard: Force ProGuard bytecode obfuscation and optimization
  • -s / --r8: Force Google R8 shrieker and tree-shaking task on build
  • -o / --optimize: Optimize extension bytecode size
  • -dx / -x / --dex: Generate desugared Dalvik/ART classes.dex via D8 with incremental caching
  • -m / --keep-manifest: Keep manifest components (Activity, Service, Receiver) in ProGuard rules
  • --no-daemon: Bypass the background compiler daemon and compile locally in-process
  • --deannotate: Strip internal App Inventor metadata annotations post-build for smaller binary size
  • -t <str\|int> / --template <str\|int>: Scaffold pre-filled extension skeleton with helper enum on create
  • -p <package> / --package <package>: Specify root package identifier on create
  • -l <Java\|Kotlin> / --language <Java\|Kotlin>: Set primary programming language on create
  • -v / -d / --verbose / --debug: Enable verbose diagnostic logging
  • -c / --color: Enable or disable ANSI terminal colors
  • -V / --version: Display version information

:high_voltage: Compiler Daemon

here

Bolt introduces a persistent background compiler daemon that keeps all toolchains (ECJ, Kotlin compiler, D8, ProGuard) resident and warm in RAM:

# Check daemon status
bolt daemon status

# Start daemon in background
bolt daemon start

# Run builds (automatically delegates to daemon!)
bolt build

# Stop daemon when finished
bolt daemon stop

When active, bolt build automatically delegates to the daemon on port 19090, reducing build times to under 3 to 4 seconds! If the daemon is stopped, Bolt transparently falls back to local in-process compilation.


:page_facing_up: Documentation & Wiki

For comprehensive usage guidelines, configurations reference, and architectural deep dives:


Demo Terminal

here

Bolt CLI version:

bolt-v

Bolt Language Selection

bolt-lang

Bolt Project Created

bolt-created

Bolt Tree

bolt-tree

Bolt Migrate

migrate-demo

Bolt Build

bolt-build


:handshake: Open Source & Contributing

Bolt CLI is 100% Open Source and licensed under the GPL-3.0 License. We welcome contributions, bug reports, and suggestions from the extension developer community!

GitHub Repository: TechHamara/bolt-cli :glowing_star: (Don't forget to drop a star!)

Bolt-CLI release page

Issues & Bug Tracker: Report an issue

Contributions: Pull requests are highly welcome. Fork us and help make extension development better for everyone!


:heart: Support & Donations

If Bolt CLI saves you hours of development time, please consider supporting the project:


Happy coding, and let's build some amazing extensions! :rocket:
(Built with :heart: for the MIT App Inventor, Kodular, and Niotron Communities)

Check out demo project :backhand_index_pointing_down:

4 Likes

Installation routine for Debian based linux distros ? Build from source ?

Oh, found this on the github page - confusing...

Linux & macOS

Current Not Support.

  1. In the terminal, run the automated installation script:

curl https://raw.githubusercontent.com/TechHamara/bolt-cli/main/scripts/install/install.sh -fsSL | sh

  1. Add $HOME/.bolt/bin to your PATH environment variable.
1 Like

Yes, but I already :backhand_index_pointing_up:mentioned,

Current Not Support.
future release add to support the linux and macos build.

It seems you have updated the unreleased version of Rush. I hope you continue working on it.

Still not clear...does it install for Linux, or not?

@TIMAI2
This version linux and mac os installation not working.
And future release add soon..

1 Like

wow thank you

1 Like

Nice! Thanks

1 Like

MOD: removed the part of your post that wasn't necessary.

why its not build??

Check out logs.txt file on .bolt folder error log
Why error occurred or share pm @TechHamara me


i got this

Hello, @TechHamara, I am testing your framework on a windows 10 vm (gnome-boxes) with intelijIDEA. It’s doing fine, but I tried to add supabase-sdk for kotlin library (and some manual dependencies that bolt couldn’t find) and after sync, the “io“ appears as unresolved reference on the imports on the extension code (e.g.:import io.github.jan.supabase.createSupabaseClient)
but in my innocent/naive mind to the behind the scenes of kotlin (I know how to program, but don’t understand exactly how gradle or maven resolvers work) it should appear as it is in the maven repository: https://mvnrepository.com/artifact/io.github.jan-tennert.supabase

relevant bolt.yml

extension code imports:

pls help (or do you think it’s just a IDE issue?)

Hi @Olga_Cortez

Check out more sync error info on .bolt folder log.txt file.

The issue of most cases library proper not loaded in your project.

Retry sync command to resolved issue.
Or change library version.

Also if you wait then new version comming soon..

With lots of features. Stay tuned and thanks for using the bolt CLI.

Well… I couldn’t find this log.txt file anywhere, any idea what’s going on?

PS C:\Users\souza\Desktop\oi\Supabased> ls

Diretório: C:\Users\souza\Desktop\oi\Supabased

Mode LastWriteTime Length Name


d----- 16/09/2026 19:00 .bolt
d----- 16/09/2026 17:36 .github
d----- 16/09/2026 18:04 .idea
d----- 16/09/2026 17:36 .vscode
d----- 16/09/2026 17:36 assets
d----- 16/09/2026 17:36 deps
d----- 16/09/2026 17:36 src
-a---- 16/09/2026 19:02 18589 .classpath
-a---- 16/09/2026 17:36 12 .gitignore
-a---- 16/09/2026 17:36 419 .project
-a---- 16/09/2026 18:53 2239 bolt.yml
-a---- 16/09/2026 17:36 106 README.md

PS C:\Users\souza\Desktop\oi\Supabased> ls ..bolt\

Diretório: C:\Users\souza\Desktop\oi\Supabased\.bolt

Mode LastWriteTime Length Name


-a---- 16/09/2026 19:00 27314 deps.hive
-a---- 16/09/2026 19:02 0 deps.lock
-a---- 16/09/2026 19:00 64 env.json
-a---- 16/09/2026 19:00 29 timestamps.hive
-a---- 16/09/2026 19:02 0 timestamps.lock

PS C:\Users\souza\Desktop\oi\Supabased>

C:\Users\souza.bolt>dir log.txt /s
O volume na unidade C não tem nome.
O Número de Série do Volume é 06DF-D65A
Arquivo não encontrado (file not found)

Check out this path log.txt file.

And I am found the issue is bolt cli, that only resolved local library and proper not package remote maven library.

* fixed the issue on next update.

And Next update early comming.

1 Like

Got it! Also, I ran a ps1 script to add all dependencies as jars or aars, but it says in build that kotlin 2.x version is not supported

PS C:\Users\souza\Desktop\oi\Supabased> bolt build
+===============================+
| . . __ |
| _ |
_ ____ | | / | |
| | __ \ / _ \ | | \ \ |
| | _\ ( <_> )| |
| | |
| |___ / _/ |_/ |__| |
| / |
+===============================+
(v1.1.0)
Built on 2026-08-26 11:10:00

  • Initializing build ✓ ... (0.64s)
    info Cleaning build caches
    ┌ Compiling Java classes
    │ info Picked 1 source file
    │ error [kapt] KAPT "compile" mode is not supported in Kotlin 2.x. Run kapt with -Kapt-mode=stubsAndApt and use kotlinc for the final compilation step.
    │
    ┌─ [ KOTLIN / KAPT COMPILATION ERROR ] ────────────────────────
    │ │
    │ │ What went wrong:
    │ │ The Kotlin Compiler or Kapt annotation processing failed. This
    │ │ usually indicates syntax errors in your Kotlin source files,
    │ │ unresolved references, or bad annotation processor usage.
    │ │
    │ │ :light_bulb: Steps to Fix the Error:
    │ │ 1. Open your Kotlin files in src/ and verify that there are no syntax errors or typos.
    │ │ 2. Ensure that companion classes or fields are correctly annotated with @Extension or @DesignerComponent.
    │ │ 3. Verify that all Kotlin dependencies and packages are correctly referenced or included in bolt.yml.
    │ │ 4. Run bolt clean to clear any corrupt build caches and try again.
    │ │
    │ └────────────────────────────────────────────────────────────────────────
    └ × ... (29.76s)

BUILD FAILED in 30s 404ms
PS C:\Users\souza\Desktop\oi\Supabased>

hi @Olga_Cortez
bolt cli new version solved the error. with lots of new features.
please wait..
and can also use my bolt mobile ide community post thread :backhand_index_pointing_down: to check features functions and test app and build your extensions.

thank you for fined out the error.

Hello :waving_hand: Dev

:high_voltage: Bolt CLI Release v2.0.0 (Universal Edition) :high_voltage:

For all 4 platforms

  • Windows
  • Mac
  • Linux
  • And Android Termux

:rocket: Recent Powerful Features

Ready Made Helper blocks template here

Helper Enums (OptionList) with Auto-Injected @SimpleProperty

App Inventor supports dropdown blocks through OptionList<T>. Bolt CLI completely automates scaffolding, import injection, and demo property creation with support current project and New project creation:

# Generate Integer dropdown helper enum on existing projects 
bolt generate helper int 
# Or generate String dropdown helper enum 
bolt generate helper str 
# Or generate helper by custom name 
bolt generate helper int Direction
# Or New projects 
#When you generate a helper or create a project with -t int or -t str
bolt create <project name> -h int|str

  • And others Check out first post.
  • Join :backhand_index_pointing_right: telegram for more upcoming update.