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


Using PowerShell (Windows only)

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

Using Bash

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

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

60 Likes

:+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