Skip to content

Repository files navigation

TinyUI

JS 写声明式组件、Compose Multiplatform 渲染的 UI 框架,引擎为 QuickJS(经 quickjs-kmp 接入)。Android / iOS 双端。

早期阶段。关键选型已定,M1 Counter 与 M2 列表页已在双端跑通(TSX → 模块字节码 → 引擎 → patch → Compose);进度见 docs/roadmap.md。

  • 设计文档与决策记录:docs/
  • 响应式模型与引擎 benchmark:bench/
  • 站点:tinyui.app(未上线)

目录

docs/        设计文档、ADR、roadmap
packages/    npm 包:tinyui-core · tinyui-native · tinyui-cli
compose/     KMP 库 app.tinyui:tinyui(Compose Multiplatform 侧)
updates/     KMP 库 app.tinyui:tinyui-updates(热下发:校验、落盘、选择、回退,见 docs/updates.md)
schema/      内置组件 schema(TS DSL),两侧契约的唯一真值,`pnpm schema` 生成
sample/      示例 App(sample/js 与 sample/js-extra 是两个包的页面源码,Gradle 构建时经 CLI 编成字节码打进资源)
bench/       响应式模型与引擎 benchmark
build-logic/ Gradle convention plugins

目录与命名依据见 docs/README.md。

安装

  • Kotlin:implementation("app.tinyui:tinyui:<version>")(Maven Central;自带 wang.harlon:quickjs-kmp);热下发另加 app.tinyui:tinyui-updates,同版本号
  • JS:pnpm add tinyui-core tinyui-native 与 pnpm add -D tinyui-cli,三包同版本号;tinyui build 用的 quickjs-kmp 宿主工具 qjsc-kmp 随 tinyui-cli 的依赖装好(macOS、Linux 预编译版)

版本号与 git tag 一致,不带 v 前缀,Maven 与 npm 三包同号同 tag 发:推 tag 触发 publish.yml,Maven 走 Sonatype,npm 走 trusted publishing(OIDC,无 token)。

构建

pnpm install                     # Node 22+,pnpm 10
./gradlew build                  # compose 库 + 测试(Android host / iOS simulator)+ sample APK + iOS framework;需要 JDK 25、Android SDK、Xcode
pnpm build && pnpm test          # 三个 npm 包
pnpm schema                      # 改了 schema/ 之后重新生成两侧代码
pnpm runtime                     # 改了 packages/core、packages/native 或升了 quickjs-kmp 之后,重新生成库内置的运行时字节码

sample 的 Gradle 构建会调 tinyui build 把 sample/js 编成字节码,qjsc-kmp 来自 pnpm install 装好的 npm 包;Android host 测试还需要宿主 JNI 库。两种来源:

  • 本地联调:local.properties 加 quickjs-kmp.dir=<quickjs-kmp 仓路径>,SDK 从源码构建(composite build),qjsc-kmp 与 JNI 库都由该仓的任务自动编出,零配置
  • 否则:TINYUI_QUICKJS_HOST_JNI 指向含 libquickjs_kmp 的目录(CI 的做法见 .github/workflows/build.yml);没有预编译 qjsc-kmp 的平台再用 TINYUI_QJSC 指向自己编的那份

License

MIT

About

TinyUI — JS-driven declarative UI for Compose Multiplatform, powered by QuickJS (quickjs-kmp)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages