Rush • A new and improved way of building extensions

Rush is a build tool, built to be a complete replacement for the existing way of developing extensions. It attempts to improve the overall developer experience and reduce the amount of boilerplate code you need to write to make extensions.

With Rush, you no longer need to use annotations to define your extension’s metadata and Android manifest tags. Instead, you get a separate metadata file, rush.yml, and direct support for AndroidManifest.xml (more on that below).

Not just that, Rush sports a beautiful interactive CLI that accompanies you from scaffolding to building production-ready optimized builds of your extension.

Installation [Latest release: v1.2.5]


Using PowerShell (Windows only)

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

Using Shell

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

Note: If you install Rush using Bash, you’ll need to update your PATH environment variable to include Rush’s bin directory. Instructions for the same will be printed by the script after all other steps are complete.

Your very first Rush project


Once you’ve Rush installed on your system, fire up a terminal app, cd into the directory you wish to create the extension in, and then run rush create <extension_name>. Answer the prompted questions, and woo-hoo, you have a brand new Rush project ready! :partying_face:

rush-create

Now, cd into the created directory and run rush build. Once the build is complete, you’ll find your extension in the out directory. Voila! You just built your very first Rush extension! To know more about the build command and its supported flags, check out this wiki.

rush-build

How’s Rush different?


If you take a look at the generated Java file for your extension (which you can find in srcpackage), you’ll find that there are no DesignerComponent and SimpleObject annotations in there. In fact, there is not a single class-level annotation. So, where did all these annotations go?

The Metadata file (rush.yml)


All the annotations related to defining the extension’s metadata, like, its name, description, minimum Android SDK, license, etc. are replaced by the metadata file – rush.yml. It also keeps an entry of all the external libraries and assets required by your extensions.
To know more, check out this wiki.

Note: Dependencies and assets defined in rush.yml are required to be added to ./deps and ./assets directories respectively.

rush.yml file for an extension named Gradients

Android Manifest file


Believe it or not, nothing is worse than having to use Java annotations to define your extension’s Android manifest elements. You know the pain if you’ve ever written large manifest tags using those annotations. Even writing a single one could be ridiculously tedious.

But worry not, with Rush you get out-of-the-box support for directly using an AndroidManifest.xml file. It is located inside the src directory and is generated automatically when you scaffold your extension with the rush create command. It’s time to say goodbye to the ugly annotations!

Note: Because of the restrictions imposed by App Inventor’s extension system, you can’t use every manifest tag. For a detailed list of supported tags, check out this wiki.

Code Optimization and Obfuscation


When you build your extension with the --release flag (-r), Rush obfuscates, shrinks, and optimizes your extension’s Java code using ProGuard. You can use the ProGuard rules file (proguard-rules.pro), located inside the src directory, to modify the default behavior.

To turn off the optimization pass --no-optimize flag along with the --release flag. Similarly, you can optimize your code without the --release flag by passing --optimize flag (-o) as well. More on supported build flags here.

Rush is Open-Source


Yes, Rush is open-source and all the code for the CLI as well as the Java annotation processor is available on GitHub under the GPLv3 license.
Go, check it out. And yes, don’t forget to :star: both the repos. :wink:

Acknowledgement


A huge thanks to all the alpha and beta testers for their constant helpful feedback throughout the development phase. Without them, this public release won’t be possible.

Feedback


For all the types of feature requests and bug reports, file an issue on GitHub.

Also, do let me know your thoughts on this new, and probably, improved way of building extensions in the replies below.

Cheers,
Shreyash

85 Likes
Learn how to create extensions
How to add dependency in Rush?
Taifun file extension is no longer work on scoped file access on Android 11
Bubble Picker with Smooth Animation
[Discontinued] Background Tasks [4.1] :partying_face:
Face to Screen distance calculation
[Free] Fetch - A powerful and simple download tool
Natural Language Parser: Solve complex natural problems
Creating Extensions
[F/OS] PointerTools - for Pointer Accessibility
[F/OS] SharedDB - Store / Retrieve data between applications
[Free/OS] Dynamic Click Utils - An Extension to handle clicks on child components easily with dynamic components
How To Get Label Auto Lines Count
✍️Text Writer : Add Writing animation to your app
[Free] 📝 Text to Handwriting : Convert your text to handwriting 🎉
(Rush) Download and Install rush code editor
Blocks algorithm
[F/OS] Lyrics Viewer - Play Lyrics for songs in Music Players
[Free] RulerPickerExtension
UrlMetaData - for get meta data of website
[F/OS] Music Meta Editor - Id3 Tag Editor ( Metadata )
InApp Review Extension
Why Appy Builder Closed?
How do I create extensions
Extension IDE is not working
[F/OS] :closed_lock_with_key: SecureDB - Store Data Locally With Security
[Discontinued] OneSignal Fix Extension
Look Extensions pls
How do you build extensions?
Utility animations that are responsive on all types of devices
I will create the extension with a Rush
Rush powershell error
Getting error in rush
[Free] In App Review Extension
⭕ [FREE] Circle Menu Extension : :tada: Added Support For Floating On Screen
How to create an extension?
Error developing extension site
Unable to produce AIX for extension when using Rush
Creating Extensions
What language is needed to develop extensions
How can i create an extension?
App Inventor Source Zip is Empty
How can i create an extension?
How to create Extensions?
[BETA/OS] File Cryptography - File Encryption and Decryption
[FREE] ImageBlur Extension
[F/OS] PedrozaThumbnail Extension
Error while verifying Apache Ant install
[Discontinued] Background Tasks [4.1] :partying_face:
How to enter the <uses-feature value in the manifest.....through the extension
Can make this code as extension
[F/OS] Network Tools Extension - To work with network
I have to learn what for make an extension

:+1::+1::+1::+1::+1: brada

3 Likes

Great job @Shreyash :+1: :+1: :+1:

4 Likes

Awesome mind blowing. You have done a really great job @Shreyash. Really appreciate it.

I don’t understand this. Does this mean we get kotlin support for extension developement ??? Will we be able to use libraries based on kotlin ??

1 Like

Yes, that’s right. You’ll be able to write extensions is Kotlin as well as use libraries written in Kotlin. :wink:

9 Likes

And moreover we still need to add ant and all that stuff ??

No, the only thing you need is Java, and of course, Rush. Check out this wiki to learn how to install Rush.

1 Like

@Shreyash The first image is missing in your post.

1 Like

It’s fixed now. Thanks for pointing it out.

1 Like

I get this issue when using run command

Screenshot 2021-03-13 205841

I have downloaded in the C drive and added bin folder in system path variable as well. Like this :
Screenshot 2021-03-13 205759

Try restarting your terminal.

PS: This isn’t related to your problem, but please use some other directory to create your extension. Rush/bin is meant to store the Rush executable.

is the issue due to dart sdk ??? as I haven’t added dart in system variables.

Nope, you don’t need Dart SDK. Can you please re-check if you’ve added the correct folder to the PATH?

Also to add on to what @Shreyash said, you have to restart your terminal after changing your PATH in System Variables.

2 Likes

Wonderful! I like how you reimagined extension development!

5 Likes

Although I don’t know how to develop Extensions but I think I will learn easily with this… It will reduce lots of work…
:grin:

4 Likes

Yes, you’re right. In fact, that’s the main goal of Rush!

Congratulations Young!
This is a true example of useful work.
His work is an innovation in the extension creation process.
Congratulations on your effort to do something so important to the community.
Congratulations ! @Shreyash

3 Likes

Thanks a lot. I really appreciate you taking the time to express that! :smile:

1 Like

Hey @Shreyash Thanks a lot! :smiley:
I recently had a talk with my friends on how tools like Kodular are making complex things easier and more accessible.
And this tool Rush, I guess, will do the same by easing the difficulties in the process of extension development!
Looking forward to use it…

Thanks for your work and the efforts taken behind it!

And Congratulations for the accomplishment!!!
:smiley:

4 Likes