Compile-to-web PLs come in three flavours (increasing difficulty of adoption): JS-like: different syntax/semantics, existing JS tooling: Typescript, CS Separate world: builds own toolchain: Elm, Purescript Separate platform: includes own runtime/needs FFI: ScalaJS, Pyjamas