This guide walks you through installing Chattree on your Android device and configuring a complete development environment for authoring WebAssembly plugins.
| Specification | Minimum | Recommended |
|---|---|---|
| Operating System | Android 8.0 Oreo (API Level 26) | Android 13+ (API Level 33+) |
| RAM (Cloud AI & Plugins) | 3 GB | 4 GB |
| RAM (Ultralight Local LLMs < 1B) | 3 GB (1.2 – 1.6 GB RAM allocated) | 4 GB |
| RAM (Medium Local LLMs 1B – 4B) | 4 GB to 6 GB | 6 GB to 8 GB |
| RAM (Heavy Local LLMs 7B – 8B) | 8 GB | 12 GB or 16 GB |
| Free Storage | 500 MB (app & plugins) | 4 GB+ (for local GGUF model weights) |
| Architecture | 64-bit ARM (arm64-v8a) or x86_64 | 64-bit ARM (arm64-v8a) with NEON/v8.2-A |
To create .chattree-plugin packages, you need a compiler capable of targeting WebAssembly (wasm32).
No SDK or heavy toolchain required. Perfect for simple text tools and utilities.
wabt (The WebAssembly Binary Toolkit):
brew install wabtsudo apt-get install wabtchoco install wabt or scoop install wabtwat2wasm --version
Provides high-level ergonomics, memory management, and JSON serialization.
rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
wasm32-unknown-unknown compilation target:
rustup target add wasm32-unknown-unknown
rustup target list | grep "wasm32-unknown-unknown (installed)"
For existing C/C++ libraries:
clang --target=wasm32 -O3 -nostdlib -Wl,--no-entry -Wl,--export-all.A Chattree plugin package is a ZIP archive with a .chattree-plugin extension.
zip utility.
zip my-plugin.chattree-plugin plugin.json plugin.wasm
Compress-Archive.
Compress-Archive -Path plugin.json, plugin.wasm -DestinationPath my-plugin.zip
Rename-Item my-plugin.zip my-plugin.chattree-plugin
During development, transfer your .chattree-plugin package to your test device:
adb push my-plugin.chattree-plugin /sdcard/Download/
Transfer the .chattree-plugin file via Google Drive, Telegram, email, or a local HTTP server (python3 -m http.server), then open it with Chattree.
To view real-time plugin execution logs and core.log output:
adb logcat -s Flutter:D | grep "\[Plugin:"
When your plugin calls core.log:
{ "api": "core", "operation": "log", "payload": { "level": "info", "message": "Initialized" } }
The output will appear in the system log stream:
D/Flutter: [Plugin:com.example.myplugin] Initialized