Hello,
I’ve been using the MIT App Inventor distribution, Kodular, for over five years. I actually started back in school. Now that I’m in college, I recently learned about Google Summer of Code (GSoC) and was excited to see that App Inventor has been a participant in recent years.
I wanted to ask whether App Inventor plans to participate in GSoC 2026 as well.
I have experience with JavaScript and am currently learning Java. I’m also planning to contribute to the project once I complete my Java learning and successfully build my own local copy of App Inventor.
Thank you for your time and guidance!
Best regards,
Yash
We plan to apply next year. Google has different priorities for participating organizations every year, so we're not guaranteed a place. When we have information to share, I'll post it, but it won't be until early next year.
If you are interested in contributing to MIT App Inventor as part of GSoC or not, our info post for 2025 GSoC contains a lot of useful information about getting started: Google Summer of Code (GSoC) 2025
We welcome your contribution!
2 Likes
Thank you very much! Regarding the contribution, I’ve mentioned you on the official repo, do check it out!
opened 05:28PM - 27 Oct 25 UTC
bug
help wanted
status: new
affects: master
**Describe the bug**
The [instructions](https://ai2.appinventor.mit.edu/referen… ce/other/googlesheets-api-setup.html) for creating a Service Account to use the Google Sheets component in App Inventor are obsolete. A link to these instructions is on the Designer screen here:
<img width="354" height="581" alt="Image" src="https://github.com/user-attachments/assets/16175326-166e-42fb-93ab-98a5159b5f2b" />
And [another link](https://ai2.appinventor.mit.edu/reference/components/storage.html#Spreadsheet
) can be found on the Spreadsheet documentation page (in the opening paragraph of the Spreadsheet documentation).
We've heard from a few teachers directly that they couldn't follow the older instructions.
Suggest changing both links to the current and updated App Inventor instructions [here](https://docs.google.com/document/d/10PcV0WGgtedebzxn1H1tu58BP1cSFOIVSUGPwVQ_rsQ/edit?tab=t.0).
Great! I finally replied. We're a small team and can lose track of things. A few reminders are welcome.
1 Like
What happened to this year's GSOC and projects? I don't think I see any pr from GSOC in the repository.
One project has already been merged (the updated color choice picker by @iamwsumit ). He also worked on:
mit-cml:master ← iamwsumit:classifier-property
opened 09:45PM - 08 Sep 25 UTC
This is the PR for my second proposal which was creating property editor for cre… ating/training ML models.
I worked on this project during initial days in my GSoC and made a good progress but had to stop working because of shifting to the original project.
Things completed:
* Created a test component to test the PIC property editor
* Implemented a new property category
* Created property editor dialog for Personal image classifier models
* Implemented web cam in PIC property editor
* Implemented JSON in handling the property and images data (base64)
* Implemented custom parameters for models training
- [x] I branched from `master`
- [x] My pull request has `master` as the base
Previews:
<img width="1468" height="804" alt="image" src="https://github.com/user-attachments/assets/327a6dd6-2757-4ee3-aed1-f02a54ce4912" />
<img width="786" height="555" alt="image" src="https://github.com/user-attachments/assets/2fe62a4d-70e1-4726-91b8-13e1a626d16a" />
<img width="738" height="520" alt="image" src="https://github.com/user-attachments/assets/3ff39f5e-36b6-457b-800e-b1eddb080089" />
In addition, the following PRs are for this year's GSOC:
mit-cml:master ← lakshyashishir:asset-library-merge
opened 10:08PM - 30 Aug 25 UTC
This PR implements the Asset Library as part of GSoC 2025. The Asset Library int… roduces a dedicated interface for managing global assets that can be shared across multiple projects.
Users can:
- Upload assets to the global library and organize them in folders.
- Add assets to projects in two ways:
- Tracking mode - project assets automatically update when the library version changes.
- Copy mode - a static copy of the asset is added to the project.
- Manage assets more effectively through folder organization.
On the backend, new services handle global asset storage, while on the frontend, the Asset Library widget is integrated into the main project interface. Together, these changes enable efficient asset reuse and streamline asset management across the App Inventor platform.
mit-cml:master ← Codnelle:menu
opened 11:44AM - 11 Aug 25 UTC
<!--
Thanks for contributing a pull request to MIT App Inventor. Please answer … the following questions to help us review your changes.
-->
General items:
- [ ] I have updated the relevant documentation files under docs/
- [ ] My code follows the:
- [ ] [Google Java style guide](https://google.github.io/styleguide/javaguide.html) (for .java files)
- [ ] [Google JavaScript style guide](https://google.github.io/styleguide/jsguide.html) (for .js files)
- [ ] `ant tests` passes on my machine
<!--
This section pertains to changes to the components module that affect the code running on the Android device.
-->
If your code changes how something works on the device (i.e., it affects the companion):
- [ ] I branched from `ucr`
- [ ] My pull request has `ucr` as the base
Further, if you've changed the blocks language or another user-facing designer/blocks API (added a SimpleProperty, etc.):
- [ ] I have updated the corresponding version number in appinventor/components/src/.../common/YaVersion.java
- [ ] I have updated the corresponding upgrader in appinventor/appengine/src/.../client/youngandroid/YoungAndroidFormUpgrader.java (components only)
- [ ] I have updated the corresponding entries in appinventor/blocklyeditor/src/versioning.js
<!--
This section pertains to changes that affect appengine, blocklyeditor (except changes to block semantics), buildserver, components (but not changes to runtime), and docs.
-->
For all other changes:
- [ ] I branched from `master`
- [ ] My pull request has `master` as the base
What does this PR accomplish?
<!--
Please describe below why the PR is needed, what it adds/fixes, etc.
--->
*Description*
<!--
If this fixes a known issue, please note it here (otherwise, delete)
-->
Fixes # .
<!--
If this resolves an enhancement/feature request issue, please note it here (otherwise, delete)
-->
Resolves # .
mit-cml:master ← Codnelle:fab
opened 01:03PM - 07 Jul 25 UTC
FAB implmented. Ice property FAB implemented.
mit-cml:master ← Codnelle:Sidebar
opened 12:41PM - 07 Jul 25 UTC
mit-cml:master ← d1vyanshu-kumar:mobile-ui0
opened 12:02PM - 18 Jun 25 UTC
This pull request contributes to the GSoC 2025 project, which aims to make the U… I of MIT App Inventor fully responsive for mobile devices. It builds on the existing GWT UiBinder framework to support adaptive layouts without compromising core features, such as the blocks editor and designer. It focuses on optimising the interface for small screens, common on phones used globally, by introducing touch-friendly designs and space-efficient navigation, ensuring a smooth experience for users who rely on mobile access.
Key changes include updates to these three main interfaces:
- Project Explorer
- Designer Interface
- Blockly Interface
This PR is intended to support one of the other GSOC projects not part of the main repo:
mit-cml:ucr ← Tonyhrule:File-Cache-API
opened 05:04PM - 10 Aug 25 UTC
<!--
Thanks for contributing a pull request to MIT App Inventor. Please answer … the following questions to help us review your changes.
-->
General items:
- [ ] I have updated the relevant documentation files under docs/
- [X] My code follows the:
- [X] [Google Java style guide](https://google.github.io/styleguide/javaguide.html) (for .java files)
- [ ] [Google JavaScript style guide](https://google.github.io/styleguide/jsguide.html) (for .js files)
- [x] `ant tests` passes on my machine
<!--
This section pertains to changes to the components module that affect the code running on the Android device.
-->
If your code changes how something works on the device (i.e., it affects the companion):
- [ ] I branched from `ucr`
- [X] My pull request has `ucr` as the base
Further, if you've changed the blocks language or another user-facing designer/blocks API (added a SimpleProperty, etc.):
- [ ] I have updated the corresponding version number in appinventor/components/src/.../common/YaVersion.java
- [ ] I have updated the corresponding upgrader in appinventor/appengine/src/.../client/youngandroid/YoungAndroidFormUpgrader.java (components only)
- [ ] I have updated the corresponding entries in appinventor/blocklyeditor/src/versioning.js
<!--
This section pertains to changes that affect appengine, blocklyeditor (except changes to block semantics), buildserver, components (but not changes to runtime), and docs.
-->
For all other changes:
- [ ] I branched from `master`
- [ ] My pull request has `master` as the base
What does this PR accomplish?
### Description
This PR introduces a **File Cache API** that lets components and extensions download, cache, and reuse large external assets (e.g., ML model files, language libraries) directly on the device. Removing the need to bundle them in the APK and allowing for offline use after the initial fetch.
### Highlights
| Feature | Details |
|---------|---------|
| **Utility class** | `com.google.appinventor.components.runtime.util.FileCache` |
| **Lifecycle** | A single `FileCache` instance is attached to the `Form` (`form.fileCache`) to avoid collisions with other cache uses. |
| **registerFile(path, url)** | Asynchronously downloads the asset at *url* into *cacheDir/path* (no-op if already cached). Returns `CompletableFuture<Void>` so callers can await completion or launch multiple downloads in parallel without blocking the UI. |
| **getFile(path)** | Returns `CompletableFuture<File>` that resolves once the asset is present, transparently waiting if the file is still downloading. |
| **resetCache()** | Clears the cache sub-directory. Use if widespread corruption is detected (e.g., interrupted downloads while offline). |
| **Implementation notes** | Leverages `FileUtil.downloadUrlToFile`; avoids I/O on the main thread and keeps downloads independent. |
### Typical usage
```java
// Cache a model the first time the app launches
this.form.fileCache.registerFile("models/myModel.tflite",
"https://example.com/models/myModel.tflite");
// Later, retrieve and use the cached file
File model = this.form.fileCache.getFile("models/myModel.tflite").get()
```
This mechanism allows for features such as Teachable LLM and similar tools that rely on assets too large to ship inside an extension, while preserving users’ ability to run the app offline after the initial download.
### Resolves [#3533](https://github.com/mit-cml/appinventor-sources/issues/3533)
1 Like