The Mist Project: AI and Syntax Integration for App Inventor

one thing i notice, when i open console then it work, one also some problem see u in video.

It dosen't show anything in the console because you have filters on, could you please disable it, and try again so that the logs appears in the console?

Console Message
mistai.js:233 Console was cleared
wasm_exec.js:22 Hello from falcon.go!
ode-0.js:1723167 Tue Aug 26 20:56:50 GMT+530 2025 com.google.appinventor.client.settings.user.UserSettings
INFO: Loaded global settings: {"GeneralSettings":{"AutoloadLastProject":"true","CurrentProjectId":"4644337115725824","DarkThemeEnabled":"false","DisabledUserUrl":"","DyslexicFont":"false","Folders":"{\"name\":\"*global*\", \"dateCreated\":\"1756129317284\", \"dateModified\":\"1756129317284\", \"projects\":[\"4644337115725824\"], \"folders\":[{\"name\":\"*trash*\", \"dateCreated\":\"1756129317285\", \"dateModified\":\"1756129317285\", \"projects\":[], \"folders\":[]}]}","LastLocale":"en","NewLayout":"true","ShowUIPicker":"false","TemplateUrls":""},"SimpleSettings":{},"SplashSettings":{"DeclinedSurvey":"","ShowSurvey":"0","SplashVersion":"0"},"BlocksSettings":{"Grid":"false","Snap":"false"}}
ode-0.js:1723167 Tue Aug 26 20:56:50 GMT+530 2025 com.google.appinventor.client.Ode
INFO: backpack: No shared backpack
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.folder.FolderManager
INFO: Created new folder manager
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.Ode
INFO: Declare DeckPanel
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.style.neo.TopToolbarNeo
INFO: bindUI neo
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: setTrashTabButtonsVisible
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: updateButtons
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: Set Project List variables
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: Before updateMenuState
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.folder.FolderManager
INFO: folderJSON - {"name":"*global*", "dateCreated":"1756129317284", "dateModified":"1756129317284", "projects":["4644337115725824"], "folders":[{"name":"*trash*", "dateCreated":"1756129317285", "dateModified":"1756129317285", "projects":[], "folders":[]}]}
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.folder.FolderManager
INFO: Creating Trash Folder
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectList
INFO: Refresh ProjectList
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: updateButtons
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: Set Project List variables
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: Before updateMenuState
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectList
INFO: Refresh ProjectList
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: updateButtons
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: Set Project List variables
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.ProjectToolbar
INFO: Before updateMenuState
ode-0.js:1723167 Tue Aug 26 20:56:51 GMT+530 2025 com.google.appinventor.client.settings.project.ProjectSettings
INFO: Loaded project settings: {"SimpleSettings":{"AIVersioning":"","AccentColor":"&HFFFF4081","ActionBar":"True","AppName":"test","BlocksToolkit":"","DefaultFileScope":"App","Icon":"","LastOpened":"Screen1","NSBluetoothAlwaysUsageDescription":"","NSBluetoothPeripheralUsageDescription":"","NSCameraUsageDescription":"","NSContactsUsageDescription":"","NSLocationWhenInUseUsageDescription":"","NSMicrophoneUsageDescription":"","NSSpeechRecognitionUsageDescription":"","PhonePreview":"Android Material","PhoneTablet":"False","PrimaryColor":"&HFF3F51B5","PrimaryColorDark":"&HFF303F9F","ProjectColors":"{}","ScreenCheckboxStateMap":"","ShowHiddenComponents":"False","ShowListsAsJson":"True","Sizing":"Responsive","Theme":"AppTheme.Light.DarkActionBar","TutorialURL":"","UsesLocation":"false","VersionCode":"1","VersionName":"1.0"}}
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.DesignToolbar
INFO: DesignToolbar added project test with id 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.boxes.ViewerBox
INFO: ViewerBox: switching the content in the viewer box
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: got onLoad for project 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.AssetList
INFO: AssetList: switching projects from  0 to 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.AssetList
INFO: AssetList: refreshing for project 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.AssetList
INFO: AssetList: switching projects from  4644337115725824 to 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.explorer.youngandroid.AssetList
INFO: AssetList: refreshing for project 4644337115725824
aiblockly-0.nocache.js:4351 Plugin "J{knhu3fQwsDl*!fLD6salready has capability "autohideable"
addCapability @ aiblockly-0.nocache.js:4351
(anonymous) @ aiblockly-0.nocache.js:5559
init @ aiblockly-0.nocache.js:5559
(anonymous) @ aiblockly-0.nocache.js:100300
$initWorkspace @ ode-0.js:374639
BlocklyPanel @ ode-0.js:374758
BlocksEditor @ ode-0.js:375800
YaBlocksEditor @ ode-0.js:677905
$loadProject @ ode-0.js:678469
resolved_7 @ ode-0.js:678765
lambda @ ode-0.js:2153
Promise.then
$openProject_0 @ ode-0.js:374132
$show_1 @ ode-0.js:373954
$openYoungAndroidProjectInDesigner @ ode-0.js:55957
onProjectLoaded_1 @ ode-0.js:56916
$fireProjectLoaded @ ode-0.js:1326509
$onSuccess_47 @ ode-0.js:1326571
$onSuccess_77 @ ode-0.js:1702431
onSuccess_72 @ ode-0.js:1702441
onResponseReceived_5 @ ode-0.js:1733848
$fireOnResponseReceived @ ode-0.js:1715163
onReadyStateChange @ ode-0.js:1715312
(anonymous) @ ode-0.js:1740628
apply_15 @ ode-0.js:1711127
entry0 @ ode-0.js:1711162
(anonymous) @ ode-0.js:1711150
XMLHttpRequest.send
$doSend @ ode-0.js:1715236
$doInvoke @ ode-0.js:1701201
$finish_2 @ ode-0.js:1733787
$getProject_4 @ ode-0.js:1702930
$getProject_3 @ ode-0.js:1702253
$loadProjectNodes @ ode-0.js:1326546
$openYoungAndroidProjectInDesigner @ ode-0.js:55954
$openProject @ ode-0.js:55945
$openPreviousProject @ ode-0.js:55934
$maybeOpenLastProject @ ode-0.js:55874
call_5 @ ode-0.js:56926
lambda$1 @ ode-0.js:1379208
resolved_13 @ ode-0.js:1379266
lambda @ ode-0.js:2153
Promise.then
$onModuleLoad @ ode-0.js:55919
init @ ode-0.js:1722728
initializeModules @ ode-0.js:2102
apply_15 @ ode-0.js:1711127
entry0 @ ode-0.js:1711176
(anonymous) @ ode-0.js:1711150
gwtOnLoad_0 @ ode-0.js:2115
(anonymous) @ ode-0.js:1757799
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.blocks.BlocklyPanel
INFO: Created BlocklyPanel for 4644337115725824_Screen1
mistai.js:117 Blockly event viewport_change
mistai.js:117 Blockly event theme_change
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: changeProjectSettingsProperty: ActionBar True => False
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: changeProjectSettingsProperty: AppName test => 
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.Ode
INFO: 
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: changeProjectSettingsProperty: ActionBar False => True
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: changeProjectSettingsProperty: AppName  => test
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: Inserted file editor for src/appinventor/ai_test1/test/Screen1.scm at pos 0
aiblockly-0.nocache.js:60005 Blockly.Versioning: Blockly.Versioning.ensureWorkspace: converting dom to Blockly.common.getMainWorkspace()
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: Inserted file editor for src/appinventor/ai_test1/test/Screen1.bky at pos 1
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.YaProjectEditor
INFO: YaProjectEditor.addBlocksEditor.loadFile.execute: switching to screen Screen1 for project 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.DesignToolbar
INFO: DesignToolbar: switching to existing project test with id 4644337115725824
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.DesignToolbar
INFO: Setting currentScreen to Screen1
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: got selectFileEditor for src/appinventor/ai_test1/test/Screen1.scm selectedFileEditor is null
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.Ode
INFO: Ode: Setting current file editor to src/appinventor/ai_test1/test/Screen1.scm
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.HiddenComponentsManager
INFO: Setting current form to: Screen1
ode-0.js:1723167 Tue Aug 26 20:56:52 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.YaVisibleComponentsPanel
INFO: Setting checkbox state for Screen1 to false
mistai.js:117 Blockly event screen.switch
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
mistai.js:141 Mist frame is null!
mistai.js:260 Code space was added!
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
ode-0.js:1723167 Tue Aug 26 20:56:57 GMT+530 2025 com.google.appinventor.client.Ode
INFO: Locking Screens
ode-0.js:1723167 Tue Aug 26 20:56:57 GMT+530 2025 com.google.appinventor.client.settings.project.ProjectSettings
INFO: Saving project settings: {"SimpleSettings":{"AIVersioning":"","AccentColor":"&HFFFF4081","ActionBar":"True","AppName":"test","BlocksToolkit":"","DefaultFileScope":"App","Icon":"","LastOpened":"Screen1","NSBluetoothAlwaysUsageDescription":"","NSBluetoothPeripheralUsageDescription":"","NSCameraUsageDescription":"","NSContactsUsageDescription":"","NSLocationWhenInUseUsageDescription":"","NSMicrophoneUsageDescription":"","NSSpeechRecognitionUsageDescription":"","PhonePreview":"Android Material","PhoneTablet":"False","PrimaryColor":"&HFF3F51B5","PrimaryColorDark":"&HFF303F9F","ProjectColors":"{}","ScreenCheckboxStateMap":"","ShowHiddenComponents":"False","ShowListsAsJson":"True","Sizing":"Responsive","Theme":"AppTheme.Light.DarkActionBar","TutorialURL":"","UsesLocation":"false","VersionCode":"1","VersionName":"1.0"}}
ode-0.js:1723167 Tue Aug 26 20:56:57 GMT+530 2025 com.google.appinventor.client.Ode
INFO: Unlocking Screens
ode-0.js:1723167 Tue Aug 26 20:56:59 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.DesignToolbar
INFO: Setting currentScreen to Screen1
ode-0.js:1723167 Tue Aug 26 20:56:59 GMT+530 2025 com.google.appinventor.client.editor.ProjectEditor
INFO: ProjectEditor: got selectFileEditor for src/appinventor/ai_test1/test/Screen1.bky selectedFileEditor is src/appinventor/ai_test1/test/Screen1.scm
ode-0.js:1723167 Tue Aug 26 20:56:59 GMT+530 2025 com.google.appinventor.client.editor.youngandroid.YaFormEditor
INFO: YaFormEditor: got onHide() for src/appinventor/ai_test1/test/Screen1.scm
ode-0.js:1723167 Tue Aug 26 20:56:59 GMT+530 2025 com.google.appinventor.client.Ode
INFO: Setting current file editor to null
ode-0.js:1723167 Tue Aug 26 20:56:59 GMT+530 2025 com.google.appinventor.client.Ode
INFO: Ode: Setting current file editor to src/appinventor/ai_test1/test/Screen1.bky
mistai.js:117 Blockly event screen.switch
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
mistai.js:117 Blockly event screen.switch
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
mistai.js:117 Blockly event screen.switch
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
mistai.js:117 Blockly event screen.switch
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
mistai.js:117 Blockly event viewport_change
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
mistai.js:117 Blockly event viewport_change
mistai.js:138 when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}
page-f4f164e36514e547.js:1 Received mistCode: when Screen1.Initialize() {
  if true {
    println("hiii")
    println("hiii")
  }
}

𝗙𝗔𝗟𝗖𝗢𝗡 𝗧𝗥𝗔𝗡𝗦𝗙𝗢𝗥𝗠𝗘𝗥
ᴏᴄᴛᴏʙᴇʀ ᴜᴘᴅᴀᴛᴇ

:globe_with_meridians: mist.ekita.me :octopus: GitHub

ᴀɪᴍʟ: ᴀᴘᴘ ɪɴᴠᴇɴᴛᴏʀ ᴍᴀʀᴋᴜᴘ ʟᴀɴɢᴜᴀɢᴇ

AIML is a human and LLM friendly representation of App Inventor's design schema. It is fully interoperable between App Inventor's internal schematic representation.


This version also features

  • updated UX of code editor (rewritten by hand in React)
  • bug fixes in blockly and mist code conversion

Please do note that the Markup Code Editor is highly experimental. Bugs are imminent, and I'll be working on fixing them as I free up some time.

Falcon is now licensed under GPL 3.0.

Thank you
Kumaraswamy B G

4 Likes

I just had the biggest breakthrough in syntax design ever. This reduces the complexity of the syntax several times over for both humans and LLMs.

It's now so simple that you wouldn't be able to tell it was designed for App Inventor :wink:

I've also implemented a signature system that can essentially predict if a block of code might or will fail when executed.

There's something big coming up! :sunglasses:

5 Likes

Burrow Editor is what we achieved last month. There was yet another massive syntax overhaul after we (I) were able to test it with a wide range of LLMs, both cloud-based and those running locally.


Live testing with Falcon

I had also been able to transpile Falcon code to YAIL (Young Android Intermediate Language), skipping the Blockly stage. YAIL is an extension of the Lisp-based language Kawa/Scheme. App Inventor establishes a connection to the Companion using WebRTC and sends YAIL commands to the Companion, "Hey companion, add this component and name it X".

I coded a simple Linux script that connects to the Companion and sends over YAIL code converted from Falcon, and I got it working :grin:.

But due to the syntax overhaul, I had to undo many things related to live testing.


Story with LLMs

I had a significant breakthrough making LLMs generate correct Falcon codes, which are eventually translated into Blocks. One of my focuses with LLMs for App Inventor is to cut costs. Using cloud providers such as Google or ChatGPT is expensive.

I had a fair success in fine-tuning our own models that we can run locally. Specifically, we trained an LLM to be good at Mathematics and Falcon code.

But there's a hella lot of work that needs to be done!


Thank you for reading
Kumaraswamy B G

5 Likes

The December update is here!

:sparkle: new homepage

:stars: new editor playground

:lady_beetle: instant feedback

:jigsaw: download blocks to your pc

image

:books: new docs

# language quirks
# data types
# operators
# operator precedence
# variables
# if else
# while loop
# for n loop
# for each loop
# functions/procedures

# control
# math
# values
# methods
# data structures
# components

:hearts: Falcon Open Source

The Falcon transformation engine is open-sourced under the GNU GPL v3 licensing.

:heavy_dollar_sign: Patreon

Please consider donating at least US$8 to support the development of the Falcon programming language. We also need to pay for the servers on which we research and experiment with fine-tuning of custom language models for code generation.

You will be listed on the sponsors section of the page. The first donation will allow us to purchase a new domain name for the open-source project.

Thank you
Kumaraswamy B G

3 Likes