# miniEngin **Repository Path**: cpsoft13/mini-engin ## Basic Information - **Project Name**: miniEngin - **Description**: flutter打造的小程序引擎 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-08 - **Last Updated**: 2026-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MiniEngin — Flutter Mini-Program Rendering Engine A Flutter rendering engine that lets you build your own mini-program container app with WeChat/Alipay spec compatibility. Build mini-program containers without the official WeChat SDK. **Version**: v1.0.0 | **Tests**: 250 | **Components**: 44/44 | **APIs**: 100+ ## Architecture ``` Template (WXML/AXML) + Style (WXSS/ACSS) + Logic (JS) │ ├─ DSL Layer Tokenizer → Parser → AST → Compiler → ExpressionEvaluator ├─ Style Layer StyleSheetParser → StyleResolver (cascade + specificity) ├─ Renderer VNode Tree → Reconciler (diff/patch) → LayoutEngine (Flexbox) ├─ Bridge JS Runtime (flutter_js) → JsApiBridge → MiniApi ├─ Components 44 built-in (view/text/image/video/map/canvas/...) ├─ API 100+ wx.* APIs (UI/Network/Storage/Media/Crypto/Sensors/BLE/...) └─ Platform WechatAdapter / AlipayAdapter (dual spec) ↓ Flutter Widget Tree ``` ## Quick Start ```dart import 'package:mini_engin/core/engine.dart'; import 'package:mini_engin/platform/adapter.dart'; void main() async { final engine = MiniEngine(platformAdapter: WechatAdapter()); await engine.initialize( appPath: 'assets/miniapp', pages: ['pages/home/home'], ); runApp(engine.build()); } ``` ```xml {{ title }} {{ item.name }} ``` ```js // pages/home/home.js Page({ data: { title: 'Hello', items: [{id:1,name:'A'}] }, handleClick() { wx.showToast({ title: 'Clicked!' }); }, }); ``` ## Features - **WXML/AXML Template** — Tokenizer, Parser, Compiler, `{{ }}` expression evaluator, WXS script engine - **WXSS/ACSS Styles** — Selector matching, Flexbox layout, position/z-index, @keyframes, transitions - **Virtual DOM + Reconciler** — Diff/Patch minimal updates, VNodePool object pool, 60fps rendering - **JS Runtime** — flutter_js (QuickJS on Android/Windows/Linux, JavaScriptCore on iOS/macOS) - **44 Built-in Components** — 100% WeChat Mini-Program component spec - **100+ APIs** — Routing, UI, Storage, Network, WebSocket, Media, Device, Location, Crypto, Sensors, BLE, NFC, Wi-Fi, Worker, Animation, Recorder, BackgroundAudio - **Dual Platform** — WeChat (`wx:`) and Alipay (`a:`/`my.`) with automatic template/style transformation - **CI/CD** — GitHub Actions (flutter analyze + flutter test) ## Component Coverage | Category | Count | Components | |----------|-------|-----------| | View Container | 12 | view, scroll-view, swiper, movable-view, cover-view, page-container, root-portal, match-media, share-element | | Basic Content | 4 | text, icon, rich-text, progress | | Forms | 15 | button, checkbox, radio, switch, slider, input, textarea, picker, label, form, editor, keyboard-accessory | | Navigation | 2 | navigator, functional-page-navigator | | Media | 6 | image, video, camera, live-player, live-pusher, audio | | Map/Canvas | 2 | map, canvas | | Open Ability | 7 | web-view, ad, ad-custom, official-account, open-data, live-player, live-pusher | ## API Categories | Category | Count | Key APIs | |----------|-------|----------| | Routing | 5 | navigateTo, redirectTo, navigateBack, switchTab, reLaunch | | UI | 14 | showToast/Modal/Loading/ActionSheet, NavigationBar, TabBar, PullDownRefresh | | Storage | 9 | set/get/remove/clear + Sync + batch + info | | Network | 3 | request, uploadFile, downloadFile | | WebSocket | 7 | connect, send, close + 4 events | | Media | 6 | chooseImage/Video/Media, previewImage, getImageInfo, saveImage | | Audio | 2 | createInnerAudioContext, getBackgroundAudioManager | | Device | 5 | scanCode, makePhoneCall, clipboard, vibrate, getNetworkType | | Location | 3 | getLocation, chooseLocation, openLocation | | File | 5 | saveFile, openDocument, getFileInfo, getSavedFileList, removeSavedFile | | Crypto | 3 | createHash (SHA-1/256/384/512), createHmac, getRandomValues | | Recorder | 1 | getRecorderManager (record package) | | Sensors | 9 | Accelerometer, Gyroscope, Compass (sensors_plus) | | BLE | 16 | Full Bluetooth Low Energy API | | NFC | 3 | getNFCAdapter, startHCE, stopHCE | | Wi-Fi | 7 | start/stop/connect/list + events | | Worker | 1 | createWorker (Dart Isolate) | | Others | 20+ | Canvas 2D, Animation, Video/Map/Camera Context, SelectorQuery, EventChannel, nextTick, Share, Update | ## Testing ```bash flutter test # 232 tests (all passing) flutter test test/unit/ # Unit: api, component, platform_adapter, reconciler, layout, expression flutter test test/integration/ # Integration: pipeline (45 real tests) ``` ## Project Structure ``` lib/ ├── api/ # 100+ Mini-Program API implementations ├── bridge/ # JS ↔ Dart bridge (flutter_js runtime + JsApiBridge) ├── components/ # 44 built-in components ├── core/ # Engine, context, error boundary ├── demo/ # Phone preview demo app ├── dsl/ # Tokenizer, parser, compiler, expression evaluator, WXS ├── page/ # Page manager, routing, TabBar ├── platform/ # WechatAdapter, AlipayAdapter, PlatformSpec ├── renderer/ # VNode, Reconciler, WidgetBuilder, Layout, VNodePool └── style/ # WXSS/ACSS style engine, animations test/ ├── unit/ # api (35), component (50), platform_adapter (13), reconciler, layout, expression └── integration/ # Pipeline: DSL→VNode→Widget (45) ``` ## Platform Support | Platform | JS Runtime | Status | |----------|-----------|--------| | Android | QuickJS | Working | | iOS | JavaScriptCore | Working | | macOS | JavaScriptCore | Working | | Windows | QuickJS | Working | | Linux | QuickJS | Working | > Some APIs (BLE, NFC, Camera) use stub implementations that hosts can replace with custom providers via the provider injection pattern. ## License MIT