Skip to content

Latest commit

 

History

History
140 lines (109 loc) · 4.92 KB

File metadata and controls

140 lines (109 loc) · 4.92 KB

wasmline

Kotlin Multiplatform WebAssembly Plugin Framework · Cross-Platform WASI Execution Runtime

License Kotlin wasmtime AGP Platform WebAssembly

中文文档 · English · 文档


Wasmline 是一个 Kotlin Multiplatform 框架,用于在 Android、iOS、Desktop 与 Web 应用中加载并调用符合 WASI 规范的 WebAssembly 插件。

macOS — 应用 Arch Linux — 应用
macOS sample apps
Desktop · iOS · Android · 终端 · Web (Wasm)
Arch Linux sample apps
Desktop · Android · 终端 · Web (JS)
macOS — 构建终端 Arch Linux — 构建终端
macOS build terminals
构建命令:Desktop · iOS · Android · Web (Wasm)
Arch Linux build terminals
构建命令:Desktop · Android · Web (JS)

Sample

定义服务契约(commonMain):

// shared/src/commonMain/kotlin/com/example/EchoService.kt
import crow.wasmline.WasmlineService

interface EchoService : WasmlineService {
    fun echo(message: String): String
}

在插件中注册实现(wasmWasiMain):

// plugin/src/wasmWasiMain/kotlin/Main.kt
import crow.wasmline.Wasmline
import crow.wasmline.bind

fun main() {
    Wasmline.current.bind(object : EchoService {
        override fun echo(message: String): String {
            return "Response from WASI plugin: $message"
        }
    })
}

在宿主中加载插件并调用服务:

import crow.wasmline.WasmlineConfig
import crow.wasmline.WasmlineLoadResult
import crow.wasmline.link
import crow.wasmline.loader.WasmlineLoader
import crow.wasmline.network.ktor.KtorNetworkClient

WasmlineLoader.bootstrap()

// 本地路径与远程 URL 均可——http(s):// 会自动按远程 manifest 加载
val module = when (val result = WasmlineLoader.load(
    source = "https://example.com/plugin/manifest.wlm",
    config = WasmlineConfig(networkClient = KtorNetworkClient()),
)) {
    is WasmlineLoadResult.Success -> result.wasmline
    is WasmlineLoadResult.Failure -> error(result.cause)
}

val response = module.link<EchoService>().echo("ping")
module.close()

Note

link<T>()bind(impl) 是 Kotlin IR 编译器插件的重写目标。编译单元未应用 wasmline-kotlin-plugin 时,这些调用会在运行时抛出 UnsupportedOperationException

支持平台

平台 架构 产物支持 加载方式
Android v8a、x86_64 .cwasm / .pwasm wasmtime
Android v7a、x86 .pwasm wasmtime
iOS arm64 .pwasm wasmtime
macOS arm64 .cwasm / .pwasm wasmtime
Linux x86_64 .cwasm / .pwasm wasmtime
Windows x86_64 .cwasm / .pwasm wasmtime
Web(Kotlin/JS · Kotlin/WasmJS) 浏览器 JS 引擎 仅原始 .wasm web

安装

Note

Wasmline 目前处于开发阶段。详细的安装与集成文档将发布于 wuya.click/wasmline

Warning

最低需要 Kotlin 2.3.0-RC2 版本。

Kotlin/Wasm 运行时支持矩阵

架构思维导图

Wasmline 架构思维导图

许可证

Wasmline 基于 Apache License, Version 2.0 发布。完整许可证文本请参见 LICENSE