In 2015 Hal Abelson posted the following in the App Inventor Google Groups:
4 Aug 2015, 15:40:19
to MIT App Inventor Forum
The MIT App Inventor team is delighted to announce the availability of Extension Components for testing. We hope the Extension Components will prove to be a major enhancement to App Inventor: Extensions provide a way for anyone to build their own App Inventor components, which others can then use in creating apps.
App Inventor is free and open software, so people have always been able to build personal systems and install their own components. But until now, the only way to make those components available to others has been to create and maintain a personal App Inventor server that has those components built in.
Extension components, in contrast, can be loaded dynamically into any App Inventor system, so they can be shared and imported into projects as needed. For example, educators and educational software developers to provide extension components tailored to specific lessons and activities, so that students can have these available in building apps. Examples might be simulations or tools for large-scale data analysis, or image recognition. Those features might be unfeasible to implement with the built-in App Inventor blocks, either because of processing speed or programming complexity. But the same capability might be readily implemented using extension components that encapsulate the necessary processing.
Anyone can create extension components. This requires gaining some familiarity with the App Inventor source code (located on Github) and programming in Java. Once you create an extension component, you can share it with anyone for use in their App Inventor projects. Extension components can be housed anywhere on the Web. They need not be stored at MIT or any other special place, although MIT hosts a repository where people can make extension components available for sharing and public use.
Today, we’re releasing a test server for App Inventor that supports the Extension Components feature. You can find it at extension-test.appinventor.mit.edu. There’s also a document called App Inventor Extensions that explains how to create and use Extension Components. Once we've accumulated enough feedback, we'll make extension components a regular part of App Inventor.
With extensions, the range of App Inventor features can be expanded enormously. We hope that people will explore this tool to build new capabilities for App Inventor and their creations.
The implementation of App Inventor Extension Components is the work students who participated with the MIT App Inventor team in through Google Summer of Code: Ethan Hon, Justus Raju, and Mouhamadou Sall.
In 2015 that rocked the App Inventor world. Users could make their own extensions to an already powerful programming language.
Almost all extensions that were made did something that could not be done with the build in blocks. We could have sidemenus, read exif info from pictures, etc. Now we even have extensions that can let App Inventor apps run in the background. Something that once said could not be done.
The most extensive list of (all) extensions made for App Inventor can be found here.
The last couple of years I see more and more extensions that could be done with the build-in blocks. I see a lot of the same kind of extensions. I also see that (new) users ask for an extension for a problem instead of wondering about how it can be done with blocks. So somewhere along the line extensions became so popular that they are seen as the holy grail of using App Inventor.
Let's get back to my question.
What would be a good reason to use an extension for something that could also be done with the build-in blocks? I for instance can imagine that if i don't have to put 500-1000 blocks in my project i would rather use an extension that does the same thing. But for my most important projects i never use an extension.
I am not against extensions, but i make a calculated choice if i want to use them in my projects or not. I use extensions myself for things that can not be done in blocks and because i like to test the work of others.
For me there are a number of downsides to using extensions. What if the developer stops developing them or develops them, but doesn't support them so errors are not fixed. Some extension developers share their source code which is great, some don't and that is also fine. I even see extensions being stolen from other developers, sold illegally and presented as their own work.
I am wondering how you all see this? From the point of view as a user and/or an extension developer?
[mod edit - links from historic document removed to avoid confusion]