WIP wasm/intro.md
diff --git a/wasm_intro.md b/wasm_intro.md
new file mode 100644
index 0000000..55eca674
--- /dev/null
+++ b/wasm_intro.md
@@ -0,0 +1,236 @@
+
+# [kotl.in/wasm-intro](https://kotl.in/wasm-intro)
+
+# Repo: `GitHib/Kotlin`| Branch: `wasm/intro` | `wasm_intro.md`
+
+---
+
+# Kotlin/Wasm Internals 101
+
+## Disclaimers & Notes
+- Recording?
+- Ask questions on the go.
+- Shortcuts.
+- As deep as I can, as much as we have time and energy.
+- Only about the new frontend (aka K2 aka FIR) + Wasm backend.
+- Live demo.
+
+## High level
+
+### Typical user project / Gradle
+
+2 groups of tasks:
+- Development
+- Production
+
+Tips:
+- name of tasks in Gradle could be abbreviated, e.g. use `wasmJsBrProdRun` instead of `wasmJsBrowserProductionRun`
+
+#### Development
+Goals:
+ - Fast round-trip.
+ - Debug experience.
+
+- No optimizations.
+- Incremental Compilation:
+ - up to 2 times faster now, work to be continued.
+ - off by default
+ - to enable it add `kotlin.incremental.wasm=true` to `local.properties` or `gradle.properties` https://kotlinlang.org/docs/whatsnew-eap.html#support-for-incremental-compilation
+- Going to use custom formatters by default.
+
+#### Production
+
+Goals:
+ - Runtime performance.
+ - Size.
+
+- Small/local optimizations.
+- Remove Unreachable Declarations (aka DCE in the code)
+ - [dce, wasm part](compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce)
+ - [dce, common & js part](compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce)
+ - Relatively cheap.
+ - Use some knowledge about kotlin.
+ - Service exports, e.g. for functions.
+ - @AssociatedObject (internal feature/API used by kotlinx-serialization)
+ - Instantiated classes.
+ - Reflection (...::class, KClass<...>)?
+ - No de-virtualization.
+ - Reachability graph could be dumped.
+
+- Run Binaryen
+ - Options: [BinaryenConfig.kt](wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/BinaryenConfig.kt)
+
+
+Simplified Diagram:
+```
+[Sources] [Dependencies (.klib files)]
+ | |
+ \ / \
+ v v \
+ Kompiler \
+ | \
+ v |
+ [.klib file] |
+ | /
+ v v
+ Kompiler (to produce executable) + addition lowrings in Prod, including DCE
+ | |
+ | |<Optional>
+ v |
+ [.wasm, .mjs] [.wat] !! Dev build stops here.
+ |
+ v
+ Binaryen // Run by Gradle plugin
+ |
+ v
+ [.wasm optimized] !! In Prod build.
+```
+
+### Compiler
+
+- No CLI for K/Wasm, almost
+- Compiler options could be found in [K2WasmCompilerArguments.kt](compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2WasmCompilerArguments.kt)
+
+#### Pipeline
+
+Simplified Diagram:
+```
+ [Sources] & [klibs]
+ |
+ v
+ Frontend (new frontend aka K2 aka FIR)
+ |
+ v
+ [FIR]
+ |
+ v
+ FIR2IR
+ |
+ v
+ [IR] <aka backend IR>
+ |
+ v
+ Compiler plugins
+ |
+ v
+ [IR] <IR> !! IR could be serialized to .klib here
+ |
+..............................................
+ |
+ v
+ Wasm Backend (Lowerings)¹
+ |
+ v
+ [IR lowered/simplified]
+ |
+ v
+ ir2wasm²
+ |
+ v
+ [Wasm IR]--------+
+ | |
+ v |
+ WasmIrToBinary³ WasmIrToText⁴
+ | |
+ v v
+ [~.wasm] [~.wat]
+```
+
+1: [WasmLoweringPhases.kt:538](compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt#L538)
+2: [ir2wasm](compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm)
+3: [WasmIrToBinary.kt](wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmIrToBinary.kt)
+4: [WasmIrToText.kt](wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/convertors/WasmIrToText.kt)
+
+TODO
+[Operators.kt](wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Operators.kt)
+
+## Project
+
+Paths:
+- [wasm](wasm)
+ - [wasm.config](wasm/wasm.config)
+ - [wasm.debug.browsers](wasm/wasm.debug.browsers)
+ - [wasm.frontend](wasm/wasm.frontend)
+ - [wasm.ir](wasm/wasm.ir)
+ - [wasm.tests](wasm/wasm.tests)
+- [backend.wasm](compiler/ir/backend.wasm)
+- [backend.js](compiler/ir/backend.js)
+- [backend.common](compiler/ir/backend.common)
+- misc
+ - [serialization.js](compiler/ir/serialization.js)
+ - [serialization.common](compiler/ir/serialization.common)
+ - [ir.tree](compiler/ir/ir.tree)
+
+### Tests
+
+Test running infrastructure is generated from files (or directories) located in special places.
+
+[codegen](compiler/testData/codegen)
+- [box](compiler/testData/codegen/box)
+- [boxInline](compiler/testData/codegen/boxInline)
+- [boxWasmJsInterop](compiler/testData/codegen/boxWasmJsInterop)
+- [boxWasmWasi](compiler/testData/codegen/boxWasmWasi)
+
+`fun box() = "OK"`
+
+If you add a new test-data file you need to regenerate tests with gradle task `generateTests` or run configuration in IDE.
+`./gradlew generateTests`
+
+Example: [FirWasmJsCodegenBoxTestGenerated.java](wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java)
+
+#### Run & Debug tests
+`./gradlew :wasm:wasm.tests:test`
+`./gradlew :wasm:wasm.tests:testFir`
+
+Try to run something. E.g. size tests.
+- Navigate or Run with find class/symbol
+
+Kotlin Test data Helper
+https://github.com/demiurg906/test-data-helper-plugin
+
+TODO
+Tips:
+- IRs
+- dump
+- custom renderers
+- compare files/dirs
+
+#### Directives
+compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/WasmEnvironmentConfigurationDirectives.kt
+most popular ones?
+
+### *.properties
+[gradle.properties:123](gradle.properties#L123)
+
+#kotlin.test.junit5.maxParallelForks=1
+[gradle.properties:106](gradle.properties#L106)
+
+### Publish
+TODO
+`./gradlew install`
+
+`defaultSnapshotVersion`
+[gradle.properties:27](gradle.properties#L27)
+2.1.255-SNAPSHOT
+2.<Next>.255-SNAPSHOT
+
+Troubleshooting:
+- Stop gradle daemons `./gradlew --stop`
+- To change debug level `-i` or `-d`
+
+## Useful Links
+- [Docs](https://kotl.in/wasm)
+- [Examples](https://kotl.in/wasm-examples)
+- [Benchmarks](https://kotl.in/wasm-benchmarks)
+- More about debugging inside IntelliJ IDEA:
+ - [Debugger Playlist](https://www.youtube.com/playlist?list=PLPZy-hmwOdEUWF85MuwrKV8YVWLmZW4ZA)
+ - [Talks by Anton Arhipov](https://www.youtube.com/results?search_query=IntelliJ+IDEA+By+Anton+Arhipov), e.g.:
+ - [IntelliJ IDEA Tips & Tricks](https://www.youtube.com/watch?v=53ccfLqYpWY)
+ - [Debugging with IntelliJ IDEA](https://www.youtube.com/watch?v=H50J2l2yUAk)
+
+
+Tips & tricks
+- run test from search symbol
+- find action
+- run anything
+- file patterns