The Mist Project: AI and Syntax Integration for App Inventor

Impressive!

1 Like

I'm experimenting with a new transformer written in Golang, that compiles to WebAssembly to run directly on the client side. This helps to reduce overhead.

It has a better live coding support with ability to mark empty sockets.

4 Likes

What is the motivation to use golang versus using a framework like treesitter?

Hi Evan, the project originally consists of two main parts

  • Blockly Transformer and Mist Code Generator - written in Kotlin for technical flexibility
  • Mist Syntax Parser, and Runtime - written in Pure Java 7 for portability

The motivation to write the Syntax Parser and the Runtime in Java 7 was to keep it as lightweight as possible without any dependency. This allows it to run anywhere - Desktop, Android and even on Web.

We use TeaVM to compile Java Bytecode to JS. For this, we need to keep the project as simple/lightweight as possible (avoid new Java/Kotlin features, or libs that may complicate the process).

Additionally, I've been writing my own Parsers for quite a few years now. So I'm pretty comfortable setting things up quickly in a matter of two or three days.


The problem with having the Blockly Transformer and Code Generator written in Kotlin is that we need to host it on a Server. The technical nature of it makes it complected to run 'em on the client's side.

I was looking to rewrite them in a language that can compile to WebAssembly, that also has a good XML Parsing support. I discovered Go. It has a robust in-built XML Parser (You define data structs to parse XML). So in a matter of two days, I got the Blockly Transformer and Code Generator completed and written in Golang.

𝗧𝗛𝗘 𝗙𝗔𝗟𝗖𝗢𝗡 𝗧𝗥𝗔𝗡𝗦𝗙𝗢𝗥𝗠𝗘𝗥
ᴀ ɴᴇᴡ ʙʀᴇᴀᴋᴛʜʀᴏᴜɢʜ


Demonstration of the Falcon transformer.
A simple fib function, followed by two examples of complex list manipulation and logical expressions, taken from an official App Inventor tutorial.




:star: Falcon — a syntax-to-block transformation engine. Soon it'll be the very core of the syntax-block bi-directional transformer.

Currently, it has a full 1:1 syntax support for all the in-built blocks.

I've designed a new version 2 Mist syntax, that further adapts to App Inventor's unique nature and requirements. The design — influenced by many good elements of various languages ( Simplicity of Python, Transformers from Kotlin, with style of Golang)

But we've got a long way to go — I'm designing the syntax in a way i.e. easier for humans and feasible for LLMs to consume ( without reinventing a lot of stuff ).

This requires us to build a smart chain of architecture that'd involve complex parsing and mapping techniques (type resolution, flow predictions) — and we are just starting.


I'll be sharing a live version of the implementation as adequate resources (e.g. documentation) and other technical requirements are satisfied.


Thank you
Kumaraswamy B G

6 Likes

𝗔𝗜 𝗜𝗡 𝗔𝗖𝗧𝗜𝗢𝗡


Workspace

The Falcon workspace integrates App Inventor Blockly and one way syntax transformation. (With some AI editing abilities, if you got the key)

:tada: kot.ekita.me:8080 (allow http)


Personally, the best way to try it out (by quality & without using API keys)

  • Give ChatGPT the whole Falcon language specification.
  • Give it instructions, broken down into very smaller parts.
  • Paste the generated code in the Falcon workspace.
  • Magic!

During the process, you may encounter temporary pop-up errors in the workspace. You can ignore them (simply close them).


Updates

  1. (May 24, 3:14 PM, IST): Fixes function, or body empty error, while slow typing
7 Likes

Astounding!!
:clap: :clap: :clap:

2 Likes

This is an awesome project!
I want to try it out, but unfortunately, the link you provided in the first post is not working. I would like to watch it and interact with it :slight_smile:
But based on the amount of progress that's already achieved, I think it will be quite useful, and I also hope it's integrated into AI2 someday.

1 Like

This is so cool. :partying_face:

1 Like

Fixed it! mist.ekita.me

Do note that this version uses the first version of the transformer (written in Kotlin), and we've already come a long way (a few things were drastically changed)

1 Like

Hi friends, sorry I'm not been able to give time to this project, I'm just stuck between too many things (School, SAT prep, other works) and some downs in my life. Wish to get back to this project asap.

6 Likes

𝗙𝗔𝗟𝗖𝗢𝗡 𝗧𝗥𝗔𝗡𝗦𝗙𝗢𝗥𝗠𝗘𝗥
ᴀᴜɢᴜꜱᴛ ᴜᴘᴅᴀᴛᴇ

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


Taifun's Bluetooth Chat app example with Falcon Transformer


We have achieved complete 100% directional Syntax ⟷ Block transformation support for all kinds of App Inventor blocks, with a wide range of advancements.


𝗛𝗜𝗚𝗛𝗟𝗜𝗚𝗛𝗧𝗦

  1. Complete bidirectional Syntax—Blockly transformation achieved. Includes added support for generic blocks, events, and helper blocks. :arrow_upper_right: Documentation.

    When you edit the blocks, the changes are reflected in the Mist panel, and vice versa; if you edit the code, the blocks are updated accordingly.

  2. Support for handling empty sockets.

  3. Replaced old math converter syntax with math functions.

  4. A new compute block.

  5. Differential merger mechanism, merges two instances of slightly different codes, one written by a human and the other by a machine, into a single output, which preserves the original human formatting.

The top left card displays the code written by a human in a specific format, and the top right card displays the code generated by a machine. The only changes between those two cards are the check n ? text and n ? number.

Those two blocks of code are then merged, preserving the human formatting over the machine's.
It's still in the experimental and testing phase; I've only rolled out the modest implementation.


𝗧𝗥𝗬 𝗜𝗧

:globe_with_meridians: mist.ekita.me
(sometimes try with hard reload Ctrl+Shift+R)

There could be bugs that I'm unaware of, most of which I've already fixed.
Please reload the page when:

  • The mist panel stops updating codes
  • When jumping or changing to a new project

The mist panel may not update the code for bad syntax. Please check the console otherwise.


𝗦𝗨𝗠𝗠𝗔𝗥𝗬

We are progressing rapidly, with more than 2700+ lines of code tested and written in a week.

Our next roadmap is to create an independent project analysis tool, something similar to unchive.kodular.io, but with syntax editability powered by the Falcon transformer core.

With the power of syntax editability, it's much easier for one (e.g. power users) to analyse or debug a project posted on the community.

I also strongly believe this is a stepping stone before we implement robust debugging capabilities and a powerful AI integration for App Inventor. (also see AI in Action)


Thank you
Kumaraswamy B G

7 Likes

I try this with your given link, when i open 1st time, its ask for login, i go to with 2nd option and where test@example.com already present, then i click login after its redirect this project (below image is show), and i notice on right side it write # Start Coding!. i go to block section, i notice blocks are present but code not generate, i try clrt + f5 for hard reload, but noting happen (website is too slow to loading), again same things write in right side of mist section.

when i click on mist section and type a key, then all blocks disappear. i try to reload again again but it not come. and also some problem, when i drag any block and put any block, it does not generate code. may be i'm wrong to do, i don't know right way.

Hi, please use a different test mail Id (not the default one), and could you please share a simple screen recording demonstrating the problem?

with another dummy mail :point_down:

it clear complete blocks when we enter some things or do backspace on mist. i dont know i use it right way or not.

what an awsome :astonished: :astonished: :astonished: :astonished: :astonished: :astonished: :astonished:

Could you please check the browser console for any errors or information? Just make sure the console is active before the page loads.

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")
  }
}