Z.AI Chat for Android

Full-stack AI chat client for the Z.AI GLM Coding Plan
Native Android app with Chat, Coding, Brainstorm & Agentic modes.


Download APK Android 15/16 API: GLM-5.1 License: MIT


Dark Mode Light Mode


Get 10% OFF your Z.AI Coding Plan

Z.AI Coding Plan - 10% OFF

World-class GLM-5.1 models for coding agents. Monthly access from just $18/mo.
Use the link above for an exclusive 10% discount on your subscription.



Table of Contents


Overview

Z.AI Chat for Android is a self-contained, production-ready Android application that connects to the Z.AI GLM Coding Plan API. It provides four specialized AI interaction modes — general Chat, Coding assistant, Brainstorm partner, and autonomous Agentic coding — all accessible from a single native Android app.

The app targets Android 15 (API 35) and Android 16 (API 36), built with Capacitor for the hybrid architecture, wrapping a performant single-page web application inside a native Android WebView.

Key Differentiators

Feature Implementation
Zero-config start Enter your Z.AI coding plan token and start chatting immediately
4 Specialized Modes Each mode has a tailored system prompt optimized for its use case
Real-time Streaming Server-Sent Events (SSE) for token-by-token response rendering
Dark & Light Themes Full theme system with 30+ CSS custom properties per palette
Conversation Management Multi-conversation sidebar with auto-titling and JSON export
Markdown + Code Full GFM markdown with syntax highlighting and copy buttons
940 KB Release APK Minified, shrunk, ProGuard-optimized, self-signed

Architecture

High-Level Architecture

┌─────────────────────────────────────────────────────┐
│                   Android APK                        │
│                                                     │
│  ┌───────────────────────────────────────────────┐  │
│  │              Capacitor Shell                   │  │
│  │  ┌─────────────┐  ┌────────────────────────┐  │  │
│  │  │ MainActivity│  │  WebView (Chrome-based) │  │  │
│  │  │  (Java)     │──│                        │  │  │
│  │  └─────────────┘  │  ┌──────────────────┐  │  │  │
│  │                   │  │   SPA (HTML/CSS/JS)│  │  │  │
│  │  ┌─────────────┐  │  │                  │  │  │  │
│  │  │ Capacitor   │  │  │  ┌────────────┐  │  │  │  │
│  │  │ Bridge      │◄─┤  │  │  Chat UI   │  │  │  │  │
│  │  └─────────────┘  │  │  │  (Vue-like) │  │  │  │  │
│  │                   │  │  └────────────┘  │  │  │  │
│  │                   │  │                  │  │  │  │
│  │                   │  │  ┌────────────┐  │  │  │  │
│  │                   │  │  │  API Layer │  │  │  │  │
│  │                   │  │  │  (fetch)   │  │  │  │  │
│  │                   │  │  └──────┬─────┘  │  │  │  │
│  │                   │  └─────────┼────────┘  │  │  │
│  │                   └────────────┼────────────┘  │  │
│  └───────────────────────────────┼────────────────┘  │
│                                  │ HTTPS              │
└──────────────────────────────────┼────────────────────┘
                                   │
                    ┌──────────────▼──────────────┐
                    │     Z.AI Coding Plan API     │
                    │  api.z.ai/api/coding/paas/v4 │
                    │                              │
                    │  OpenAI-compatible endpoint  │
                    │  Models: GLM-5.1, GLM-5,     │
                    │  GLM-4.7, GLM-4.5-air        │
                    └─────────────────────────────┘

Component Architecture

www/
├── index.html          ← Entry point, all screens defined
├── css/styles.css      ← 30+ CSS custom properties, dual theme system
└── js/
    ├── app.js          ← Core application logic (state machine, API, UI)
    ├── marked.min.js   ← Markdown parser (GFM compatible)
    └── highlight.min.js← Syntax highlighting for 180+ languages

The app uses a state-machine pattern with three screens:

  1. Setup Screen — API key entry, endpoint selection, mode overview
  2. Chat Screen — Message history, mode selector, input area, sidebar
  3. Settings Screen — API config, model tuning, theme, data management, changelog

Data Flow

User Input → State Manager → API Request Builder → fetch() → Z.AI API
                                                              │
User Sees ← Markdown Renderer ← SSE Parser ← Stream Response ◄┘
                │
                └→ Syntax Highlighter → Code Headers (Copy button)

State Management

All state is persisted in localStorage with the zai_chat_ prefix:

state = {
    apiKey,           // Bearer token for Z.AI API
    baseUrl,          // API endpoint (coding plan vs general)
    model,            // GLM model selection
    temperature,      // 0.0 - 1.0 randomness control
    maxTokens,        // 256 - 16384 response length
    streaming,        // SSE toggle
    webSearch,        // web_search tool toggle
    currentMode,      // chat | coding | brainstorm | agentic
    theme,            // dark | light
    conversations[],  // Full message history
    activeConversationId
}

Technology Stack

Frontend (WebView SPA)

Technology Version Purpose
HTML5 Living Standard Semantic markup, meta viewport, PWA-ready
CSS3 Custom Properties, Grid, Flexbox Dual-theme design system with 30+ variables
Vanilla JavaScript ES2020 (IIFE pattern) Zero-dependency state management, async/await
Marked.js Latest GitHub-Flavored Markdown parsing
Highlight.js 11.9.0 Syntax highlighting for 180+ programming languages

Android Native Layer

Technology Version Purpose
Capacitor 8.3.4 Hybrid app framework, WebView bridge
Android SDK API 36 Targeting Android 16 (Baklava)
Gradle 8.14.3 Build automation
Android Gradle Plugin 8.13.0 Compilation, resource processing
JDK 21 Java compilation
ProGuard Android Optimize Release APK minification and shrinking

API Integration

Protocol Implementation
OpenAI Chat Completions POST /chat/completions with Bearer auth
Server-Sent Events (SSE) stream: true with ReadableStream parsing
Web Search Tool calling via web_search tool type

Build & Signing

Component Details
Debug Keystore debug.keystoreandroid / androiddebugkey
Release Keystore release.keystorezaichat / zai-chat
RSA Key Size 2048-bit
Validity 10,000 days

Features

1. Four Specialized Chat Modes

Each mode injects a purpose-built system prompt:

Mode System Prompt Strategy Use Case
Chat Concise, knowledgeable assistant General Q&A, explanations
Coding Expert coder; markdown code blocks, edge cases, error handling Code generation, debugging
Brainstorm Creative partner; diverse ideas, trade-off evaluation Ideation, planning
Agentic Autonomous agent; step-by-step tasks, tool-calling format Complex multi-step coding

2. Real-Time Streaming

  • Uses fetch() with ReadableStream for SSE parsing
  • Token-by-token rendering with Markdown re-parsing on each chunk
  • Abort support via AbortController — stop generation at any time

3. Dark & Light Theme System

30+ CSS Custom Properties per Theme
├── Backgrounds (7 levels: primary → code)
├── Text (3 levels: primary → muted)
├── Accent (main, hover, dim)
├── Borders
├── Status colors (danger, success, warning)
└── UI chrome (shadows, overlays, scrollbars)

Theme is toggled via:

  • Header button — sun/moon icon, instant toggle
  • Settings toggle — Dark Mode switch
  • PersistedlocalStorage survives app restarts

4. Conversation Management

  • Unlimited conversations stored in localStorage
  • Auto-titling from first message (first 50 chars)
  • Sidebar with conversation list, active indicator, swipe-to-delete
  • JSON export for backup/migration

5. Markdown & Code Rendering

  • Full GitHub-Flavored Markdown (tables, task lists, strikethrough)
  • Syntax highlighting for 180+ languages via Highlight.js
  • Code block headers with language label and copy button
  • Inline code with distinct styling

6. Network Security

  • network_security_config.xml whitelists only Z.AI domains
  • HTTPS-only communication
  • android:usesCleartextTraffic="false"

Design System

Color Palette

Dark Theme (Default)

Token Hex Usage
--bg-primary #0f0f23 Main background
--bg-secondary #1a1a2e Headers, cards
--bg-tertiary #16213e Tertiary surfaces
--accent #6c63ff Primary brand color
--text-primary #e0e0ff Main text
--border #2a2a4a Dividers

Light Theme

Token Hex Usage
--bg-primary #f5f5fa Main background
--bg-secondary #ffffff Headers, cards
--bg-tertiary #eef0f6 Tertiary surfaces
--accent #6c63ff Primary brand color (shared)
--text-primary #1a1a2e Main text
--border #d8dae6 Dividers

Typography

  • Font Stack: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif
  • Base Size: 15px
  • Code Font: 'Fira Code', 'JetBrains Mono', 'Cascadia Code', monospace
  • Code Size: 13px

Spacing & Sizing

Token Value Usage
--radius 16px Message bubbles, cards
--radius-sm 10px Buttons, inputs
--transition 0.2s ease All interactive elements

Development Process

This project was built end-to-end using a systematic Plan → Code → Test → Iterate workflow powered by the Z.AI GLM-5.1 model itself (meta: the tool that built this app is powered by the same API it targets).

Phase 1: Research & Planning

Objective: Understand the Z.AI API surface and design the app architecture.

  1. API Research: Fetched and analyzed the z-ai-sdk-python repository to understand:

    • Authentication flow (Bearer token)
    • Endpoint structure (OpenAI-compatible /chat/completions)
    • Streaming protocol (SSE with data: lines)
    • Available models and their capabilities
    • Tool calling format (web search)
  2. Endpoint Discovery: Discovered from Z.AI docs that the Coding Plan uses a dedicated endpoint:

    • Coding Plan: https://api.z.ai/api/coding/paas/v4
    • General API: https://api.z.ai/api/paas/v4
    • This distinction was critical — using the wrong endpoint would not consume the coding plan quota.
  3. Architecture Decision: Chose Capacitor (over Cordova/React Native) because:

    • Zero-framework frontend (vanilla JS) for minimal APK size
    • Direct access to native Android WebView
    • Smaller learning curve for a single-developer project
    • Production-ready Android project scaffolding

Phase 2: Frontend Development

Objective: Build the complete web application (HTML/CSS/JS).

Step 1: HTML Structure (index.html)

  • Designed three-screen layout: Setup → Chat → Settings
  • Semantic HTML with proper ARIA considerations
  • Mode selector, sidebar, conversation list
  • Theme toggle integration

Step 2: CSS Design System (styles.css)

  • Started with CSS Custom Properties for theming
  • Built component library: buttons, inputs, toggles, cards
  • Implemented responsive layout (mobile-first)
  • Added animations: fadeIn for messages, bounce for thinking dots, spin for loaders

Step 3: JavaScript Application (app.js)

  • IIFE pattern to avoid global scope pollution
  • State machine with localStorage persistence
  • API layer:
    • apiRequest() for non-streaming calls
    • streamResponse() with ReadableStream + TextDecoder for SSE
    • AbortController for cancellation support
  • Markdown pipeline: marked.parse()hljs.highlight() → DOM injection
  • Theme engine: data-theme attribute switching with CSS custom properties

Step 4: Theme System (v1.2.0)

  • Extended :root variables into dual theme blocks
  • [data-theme="light"] override block with 30+ light-palette values
  • Added applyTheme() function that:
    • Sets data-theme on <html>
    • Updates meta theme-color for browser chrome
    • Toggles header button icon (sun/moon)
    • Syncs settings toggle
    • Persists to localStorage

Phase 3: Android Build Pipeline

Objective: Create a signed, optimized APK.

Step 1: Environment Setup

  • Downloaded JDK 21 (required by Capacitor 8.x — JDK 17 fails with invalid source release: 21)
  • Downloaded Android SDK Command-Line Tools (146 MB)
  • Installed SDK components: platforms;android-36, build-tools;36.0.0, platform-tools

Step 2: Project Scaffolding

  • npm init → Capacitor initialization
  • npx cap add android — generates full Android project
  • Customized AndroidManifest.xml with network security config
  • Added network_security_config.xml for domain whitelisting

Step 3: Build Configuration

  • Created debug and release keystores with keytool
  • Configured signingConfigs in app/build.gradle
  • Enabled ProGuard minification + resource shrinking for release
  • Set Java 17 compatibility

Step 4: Build & Sign

./gradlew assembleRelease --no-daemon  # → 940 KB release APK
./gradlew assembleDebug --no-daemon    # → 4.0 MB debug APK

Phase 4: Testing & Validation

Test Method Result
APK install Manual (Android 15 emulator) Pass
API connection testConnection() with real key Pass
Streaming SSE parsing with real API Pass
Theme persistence Kill/restart app Pass
Conversation save Kill/restart app Pass
Multi-conversation Create/switch/delete Pass
Code rendering Python, JS, Go code blocks Pass
Copy button Clipboard API Pass
Export JSON file download Pass
Light mode contrast Visual inspection Pass
ProGuard release 940 KB (77% size reduction) Pass

Project Structure

zai-chat/
├── www/                              # Web application (SPA)
│   ├── index.html                    # Entry point with all 3 screens
│   ├── css/
│   │   └── styles.css                # Full design system + dual themes
│   └── js/
│       ├── app.js                    # Core application logic
│       ├── marked.min.js             # Markdown parser
│       └── highlight.min.js          # Syntax highlighter
│
├── android/                          # Native Android project
│   ├── app/
│   │   ├── build.gradle              # App-level build config + signing
│   │   ├── proguard-rules.pro        # ProGuard keep rules
│   │   ├── debug.keystore            # Debug signing key
│   │   ├── release.keystore          # Release signing key
│   │   └── src/main/
│   │       ├── AndroidManifest.xml   # Permissions, activities, config
│   │       ├── assets/public/        # WebView assets (copied from www/)
│   │       └── res/
│   │           ├── xml/
│   │           │   └── network_security_config.xml
│   │           ├── values/
│   │           │   ├── strings.xml
│   │           │   ├── colors.xml
│   │           │   └── styles.xml
│   │           └── mipmap-*/         # App icons
│   ├── build.gradle                  # Root build config
│   ├── variables.gradle              # SDK version constants
│   ├── settings.gradle               # Module includes
│   └── gradle/wrapper/               # Gradle wrapper
│
├── capacitor.config.json             # Capacitor configuration
├── package.json                      # NPM dependencies
└── README.md                         # This file

Building from Source

Prerequisites

Requirement Version
Node.js 18+
JDK 21
Android SDK Platform 36, Build-Tools 36.0.0
npm 9+

Quick Build

# Clone the repository
git clone https://github.rommark.dev/admin/Z.AI-Chat-for-Android.git
cd Z.AI-Chat-for-Android/zai-chat

# Install dependencies
npm install

# Sync web assets to Android
npx cap sync android

# Build debug APK
cd android && ./gradlew assembleDebug

# Build release APK (signed)
./gradlew assembleRelease

# APKs will be at:
# android/app/build/outputs/apk/debug/app-debug.apk
# android/app/build/outputs/apk/release/app-release.apk

Environment Setup (from scratch)

# 1. Install JDK 21
curl -fsSL "https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz" | tar xz -C /opt/
export JAVA_HOME=/opt/jdk-21.0.2

# 2. Install Android SDK
mkdir -p ~/android-sdk/cmdline-tools
curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" -o /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d ~/android-sdk/cmdline-tools/
mv ~/android-sdk/cmdline-tools/cmdline-tools ~/android-sdk/cmdline-tools/latest

# 3. Install SDK components
export ANDROID_HOME=~/android-sdk
yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \
  --sdk_root=$ANDROID_HOME \
  "platforms;android-36" "build-tools;36.0.0" "platform-tools"

# 4. Set environment
export PATH=$JAVA_HOME/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH

Configuration

API Endpoints

Name URL Purpose
Coding Plan https://api.z.ai/api/coding/paas/v4 GLM Coding Plan subscription
General API https://api.z.ai/api/paas/v4 Pay-per-use API
China https://open.bigmodel.cn/api/paas/v4 Zhipu AI (mainland China)

Available Models

Model Description Recommended For
glm-5.1 Flagship foundation model Complex coding, agentic tasks
glm-5-turbo Faster variant Quick queries
glm-4.7 Previous generation General purpose
glm-4.5-air Lightweight, fast Speed-critical tasks
glm-5v-turbo Vision model Image understanding

System Prompts

Chat Mode
You are a helpful, knowledgeable AI assistant. Be concise and accurate.
Coding Mode
You are an expert coding assistant. Write clean, efficient, well-documented code. 
Always use markdown code blocks with language tags. Explain your approach briefly 
before and after code. Handle edge cases and errors properly.
Brainstorm Mode
You are a creative brainstorming partner. Generate diverse ideas, explore 
unconventional angles, build on concepts, and help evaluate trade-offs. Think 
freely and expansively. Present ideas in organized lists or tables when appropriate.
Agentic Mode
You are an autonomous coding agent. Break down complex tasks into clear steps. 
Write production-quality code with proper error handling, tests, and documentation. 
Think through the architecture before coding. Use tool-calling format when appropriate: 
[SEARCH], [CREATE_FILE], [EDIT_FILE], [RUN_COMMAND]. Always verify your work.

API Reference

POST /chat/completions

Request:

{
  "model": "glm-5.1",
  "messages": [
    {"role": "system", "content": "..."},
    {"role": "user", "content": "..."},
    {"role": "assistant", "content": "..."}
  ],
  "temperature": 0.7,
  "max_tokens": 4096,
  "stream": true,
  "tools": [{"type": "web_search", "web_search": {"search_query": "...", "search_result": true}}]
}

Streaming Response (SSE):

data: {"choices":[{"delta":{"content":"Hello"},"index":0}]}
data: {"choices":[{"delta":{"content":" world"},"index":0}]}
data: [DONE]

Non-Streaming Response:

{
  "choices": [{
    "message": {"role": "assistant", "content": "Hello world"},
    "finish_reason": "stop"
  }]
}

Changelog

v3.3.1 (2026-05-21)

  • HTML Preview — HTML code blocks no longer render inside chat and break the flow
  • Added sandboxed iframe preview panel with Preview button
  • Added Open in Browser button for full-screen HTML preview

v3.3.0 (2026-05-21)

  • File Manager — browse device files (App Files, Downloads, Camera, Storage), open/preview any file, install APKs directly
  • SSH / Remote Access — AI can SSH into external machines, SCP upload/download, curl URLs
  • Approval Gate — all sensitive actions (SSH, SCP, curl, adb, pip, npm, etc.) require explicit user approval via in-app dialog
  • New Action Tags[SSH_EXEC], [SSH_UPLOAD], [SSH_DOWNLOAD], [REMOTE_EXEC], [CURL_EXEC]
  • Agentic Mode — updated system prompt with full external access documentation

v3.2.0 (2026-05-20)

  • Full Internal Virtual EnvironmentBootstrapPlugin.setupVirtualEnv() now provisions an app-contained Python venv under app storage, no external Termux app required
  • In-App Module InstallationBootstrapPlugin.venvPipInstall() installs Python modules directly into the internal venv
  • New AI Automation Tags[VENV_SETUP] and [VENV_PIP_INSTALL package] available in coding and agentic modes
  • Critical Runtime Fix — replaced invalid JS new File(...).exists check with shell-based file existence test in PRoot strategy
  • Concurrency FixShellPlugin.activeProcesses migrated to ConcurrentHashMap to avoid race/corruption under parallel process events
  • Wake Stability — added null-safe activity handling and power service guards in WakePlugin
  • Bootstrap Resource Safety — fixed major stream and descriptor leaks in download/extract paths (downloadFile, extractBootstrap)
  • Accessibility Labels — added missing aria-label attributes for icon-only controls in UI
  • Version sync — About screen and package/build versions updated to 3.2.0

v3.1.0 (2026-05-20)

  • AutoGLM Device ControlAccessibilityService for full device automation: tap, swipe, long press, type text, screenshot, UI tree
  • Navigation Controls — press Back, Home, Recents, Notifications, Quick Settings, Power Dialog via global actions
  • App Control — launch apps, get current foreground app, read full accessibility node tree with bounds/text/clickable state
  • Click by Text/IDclickByText() and clickNode() for semantic UI interaction without coordinates
  • Hermes AgentinstallHermes() creates Python venv and installs hermes-agent via pip; hermesExec() runs Hermes commands
  • AI Tool Tags[DEVICE_*] (17 tags) and [HERMES_*] (2 tags) parsed in both coding and agentic modes
  • AutoGLMPlugin — Capacitor plugin exposing all device control methods to JavaScript
  • Accessibility Setup UI — one-tap enable button in Dev Setup screen with live status indicator
  • Hermes Install UI — install button in Dev Setup screen
  • v2 APK Signing — release APK signed with APK Signature Scheme v2 (required for targetSdk 36)

v2.3.0 (2026-05-20)

  • Java Virtual Environmentecj.jar (3.2MB) and apksigner.jar (1.1MB) bundled as APK assets, extracted at runtime
  • app_process Wrappers — wrapper scripts use /system/bin/app_process to run JARs (bypasses SELinux execve restrictions entirely)
  • d8.jar Runtime Download — downloads DEX compiler (~18MB) from Google build-tools at first use
  • installAapt2 PluginBootstrapPlugin.installAapt2() downloads aapt2 + aapt + dependencies from Termux repo, extracts to $TOOLS
  • extractAsset/downloadFile Plugins — new BootstrapPlugin methods for APK asset extraction and URL file downloads
  • Smart Tool DetectiontoolsReady() and checkDevEnvironment() check both Termux native tools and Java virtual tools
  • BUILD_SCRIPT Updated — uses sh "$TOOLS/bin/ecj" etc., #!/system/bin/sh shebang, $TOOLS/share/android.jar fallback paths
  • LD_LIBRARY_PATH$TOOLS/lib added for aapt2 shared library resolution
  • Architecture: Java tools never need execute permission (read-only JARs), aapt2 downloaded on demand

v2.2.5 (2026-05-19)

  • Shebang Patching, Proot from APK nativeLib, Termux RUN_COMMAND integration, F-Droid fallback, 3-Strategy Install

v2.2.4 (2026-05-19)

  • Bundled PRoot — proot binary (v5.1.107) included in APK as native library with executable SELinux label
  • Auto-Proot InstallShellPlugin.refreshShell() copies proot + loader from APK's nativeLibraryDir to $PREFIX/bin/ and $PREFIX/libexec/proot/ on first use
  • Auto-Proot Wrapping — commands using $PREFIX/bin/ paths (pkg/apt/dpkg) automatically wrapped with proot -0 -b /dev -b /proc -b /sys -r $PREFIX
  • PROOT_LOADER envPROOT_LOADER environment variable set so proot finds its loader binary
  • Supports arm64-v8a, armeabi-v7a, x86_64, x86 architectures (~350KB total added to APK)

v2.2.3 (2026-05-19)

  • Os.chmod() Fix — uses android.system.Os.chmod() (direct syscall) instead of Runtime.exec("chmod") for reliable execute permissions
  • PRoot Fallback — auto-downloads PRoot from Termux package repo when SELinux blocks binary execution
  • Shell Always /system/bin/sh — avoids Termux bash permission issues entirely, uses system shell with correct PATH
  • Explicit sh Invocation — runs pkg/apt via sh "$script" instead of direct execution
  • installProot PluginBootstrapPlugin.installProot() downloads .deb, extracts proot binary with AR+tar parser
  • Termux Fallback Guide — if all auto-install methods fail, clear instructions to install Termux from F-Droid
  • chmodRecursive() replaces setPermissionsRecursive() — uses Os.chmod(path, 0755) for every file

v2.2.2 (2026-05-19)

  • Permission Fixchmod -R 755 on all bootstrap binaries after extraction (fixes "Permission denied" on bash)
  • Shell Auto-Fallback — if bash fails with permission error, auto-falls back to /system/bin/sh
  • fixPermissions Plugin — new BootstrapPlugin.fixPermissions() for JS to call after install
  • ensureBuildTools() uses full paths to pkg/apt with chmod 755 before execution
  • setPermissionsRecursive() ensures all nested binaries get execute permission
  • Shell auto-refreshes path on each execute call, re-chmods if needed

v2.2.1 (2026-05-19)

  • Auto-Install Build Toolsaapt2, ecj, d8, apksigner auto-installed via pkg with full paths and retry logic
  • Dev Tools Banner — yellow warning banner on Coding/Agentic mode if tools missing, one-tap Install button
  • Bootstrap + Tools in One Tap — Install button auto-installs Termux bootstrap then build tools sequentially
  • Checks tool availability before every build attempt, auto-installs if missing

v2.2.0 (2026-05-19)

  • Build Pipeline Rewrite — proven 7-step pipeline tested with Android SDK 36: resources → link → compile (R.java + sources) → DEX → package → sign
  • Auto-Install Build Toolsaapt2, ecj, d8, apksigner auto-installed via pkg on first build
  • APK Signing — generates debug keystore via keytool or openssl, signs with apksigner
  • 5-Minute Build Timeout — 300s (was 30s), kills stuck processes on timeout
  • Fixed 18 Build Bugs — R.java included in compilation, d8 uses @file instead of broken glob, set -e proper error propagation, no-op cp removed
  • Agentic IDE Loop — full tool→execute→verify→iterate cycle (inspired by opencode + AIDE architecture)
  • ShellPlugin fixes: HOME/PREFIX mismatch, process kill on timeout

v2.1.0 (2026-05-19)

  • File Tree per Session — sidebar shows all AI-generated files per conversation, click to view/edit/save
  • File Viewer with Edit Mode — view any file, switch to edit mode, save changes back to device
  • Auto-Continue — app detects incomplete AI responses and auto-continues until task is confirmed done
  • Task Completion Protocol — AI outputs [TASK_COMPLETE] when done; detects truncated code blocks and unclosed file tags
  • Configurable Auto-Continue — max auto-continues adjustable 120 (default 5) in Settings
  • File tree button visible in Coding/Agentic modes alongside Terminal toggle

v2.0.1 (2026-05-19)

  • APK Build Verification — confirms APK file exists after build, shows file size
  • Stay Awake Fix — dual wake locks (screen bright + CPU partial) with 24h timeout keep device fully awake
  • Configurable Auto-Fix Retries — max retries adjustable from 130 in Settings (default 10, was hardcoded 3)

v2.0.0 (2026-05-19)

  • Built-in Termux — full Linux environment inside the app, no external Termux install needed
  • One-time ~30MB download of Termux bootstrap (bash, coreutils, apt, 25+ packages)
  • Auto-detects CPU architecture (arm64-v8a, armeabi-v7a, x86, x86_64)
  • Path patching: fixes all /data/data/com.termux references to work from app prefix
  • BootstrapPlugin — native download, ZIP extraction, symlink creation, path patching
  • ShellPlugin upgraded — uses bundled bash instead of limited /system/bin/sh
  • Install build tools: pkg install aapt2 ecj dx apksigner
  • APK stays ~1MB — bootstrap downloaded on first use, never embedded

v1.4.0 (2026-05-19)

  • Agentic Feedback Loop — build errors auto-sent back to AI for fixing (up to 3 retries)
  • Termux Integration — auto-detects Termux, uses its PATH (aapt2, d8, ecj, tsu/su)
  • Workspace Context — AI sees device info, available tools, project files before coding
  • AIDE-style Tool Protocol — structured [CREATE_FILE], [RUN_COMMAND], [BUILD_APK], [INSTALL_APK]
  • Auto-Build Pipeline — aapt2 → ecj → d8 → sign → install chain
  • Build Error Auto-Correction — captures exit codes and compiler errors, feeds back to AI
  • Root Detection — detects tsu/su for elevated privileges via Termux

v1.3.1 (2026-05-19)

  • Auto-Execute — AI actions now deploy files, build, and install APKs automatically (no manual button taps)
  • Keep Screen On — toggle prevents Android screen sleep while agent is working
  • Auto-Deploy toggle — enable/disable automatic file deployment from AI responses
  • Status toasts — visual feedback for deploy/build/install progress
  • New "Terminal & Agent" settings section

v1.3.0 (2026-05-19)

  • Full Terminal — interactive shell on your Android device, execute real commands
  • Deploy Files — AI-generated code saved to device with one-tap Deploy button
  • Build APK — compile Android projects on-device with aapt2 + d8 + ecj (via Termux)
  • Install APK — install built APKs directly from the app via PackageInstaller
  • AI Action Parser — detects [CREATE_FILE], [RUN_COMMAND], [BUILD_APK], [INSTALL_APK]
  • Quick Commands — toolbar with ls, pwd, cat, mkdir, tools check, system info
  • Command History — arrow key navigation through previous commands
  • Built-in Commandshelp, sysinfo, create <name>, install <apk>, clear, setup
  • Dev Setup Screen — bootstrap on-device build tools (aapt2, d8, ecj, apksigner)
  • Project Scaffoldcreate myapp generates full Android project structure
  • Enhanced Agentic Mode — AI understands on-device build capabilities
  • Native plugins: ShellPlugin (command execution, file I/O) + InstallerPlugin (APK install)

v1.2.4 (2026-05-19)

  • Save button on every code block — downloads code as a file to your device
  • Copy & Save buttons on every AI response message
  • File path highlighting — paths like /app/build/file.apk are tappable badges (tap to copy)
  • Smart filename detection from code block first line or language
  • 30+ language-to-extension mappings for proper file saving

v1.2.3 (2026-05-19)

  • Fixed: Connect button not working — missing updateSendButton() function declaration caused JS parse error
  • All UI event handlers now correctly initialized on app start

v1.2.2 (2026-05-19)

  • Fixed: network error on app backgrounding — now auto-retries with reconnect
  • Streaming resumes from last saved token after reconnection (context preserved)
  • Exponential backoff retry (3 attempts) for network interruptions
  • Retry button shown for failed requests due to connectivity loss
  • Offline/online detection with status banner
  • Visibility change handler saves state on app going to background
  • Partial response preserved and restorable on reconnect

v1.2.1 (2026-05-19)

  • Fixed: messages lost when switching conversations during streaming generation
  • Streaming responses auto-save every 20 tokens to prevent data loss
  • Partial responses preserved when switching sessions mid-generation
  • Added in-app terminal panel for Coding and Agentic modes
  • Terminal parses code blocks, file operations, and tool calls from AI responses
  • Terminal toggle button with collapsible panel (persists state)
  • Conversation list now shows message count per session
  • Improved conversation switch safety with flush-before-switch pattern

v1.2.0 (2026-05-19)

  • Added light mode / dark mode toggle
  • Theme persists across sessions via localStorage
  • Theme toggle button (sun/moon) in chat header
  • Theme setting in Settings > Appearance
  • Added changelog section to Settings
  • Optimized light theme color palette with 30+ CSS variables
  • Android theme-color meta updates on theme switch

v1.1.0 (2026-05-19)

  • Z.AI Coding Plan endpoint support (api.z.ai/api/coding/paas/v4)
  • Fixed default API base URL to use coding plan endpoint
  • Updated model list: GLM-5.1, GLM-5 Turbo, GLM-4.7, GLM-4.5 Air, GLM-5V Turbo
  • Added coding plan subscription links to setup screen

v1.0.0 (2026-05-19)

  • Initial release
  • 4 chat modes: Chat, Coding, Brainstorm, Agentic
  • Real-time SSE streaming responses
  • Markdown rendering with syntax highlighting (180+ languages)
  • Code block headers with copy buttons
  • Multi-conversation management with sidebar
  • Settings: model, temperature, max tokens, web search, streaming
  • Conversation export to JSON
  • Android 15/16 support (targetSdk 36, compileSdk 36)
  • Dark theme with Material Design 3 aesthetics
  • Self-signed release APK (940 KB)

License

This project is licensed under the MIT License — see the LICENSE file for details.


Built with Z.AI GLM-5.1 · Powered by Z.AI Coding Plan

Z.AI Coding Plan

Description
Chat, code, and brainstorm on Android native app
Readme 37 MiB
2026-05-21 14:30:04 +00:00
Languages
JavaScript 46%
Java 30.5%
HTML 13.7%
CSS 9.8%