Skip to main content
praisonai/mobile is a purpose-built entry point that bundles only the webview-safe surface of the SDK, so phones and browsers pull ~77 kB instead of 2.97 MB.

Quick Start

1

Import the phone-safe Agent

The same Agent, from the webview-safe entry.
Never ship a raw API key into a phone or webview build. Route requests through your own backend or an ephemeral-token endpoint. This example assumes apiKey was fetched from a trusted source at runtime.

Why a Separate Entry

The root praisonai entry re-exports the CLI, MCP server, tool registry, and knowledge store — a bundler cannot tell you don’t call them, so it follows every re-export and dies on a Node builtin.

What’s Exported

The mobile entry is an allowlist matching src/mobile.ts — everything here is verified loadable in a webview. Not exported (and why): CLI (spawns processes), MCP server (opens sockets), tool registry (reads the filesystem), knowledge store (reads/writes files). None of them can run in a webview, so importing them from a phone build was always a build-time crash waiting to happen.

Bundle-Size Expectation

The mobile entry bundles well under the 400 kB target for a phone build.
The entry is verified on every CI run by scripts/webview-gate.mjs; if a maintainer adds an import that pulls a Node builtin into either entry, the build fails.

Webview-Safe UUIDs

randomUUID from praisonai/mobile replaces import { randomUUID } from 'crypto', a static Node builtin import that kills a webview bundle at load.
It calls globalThis.crypto.randomUUID where available (every supported webview and Node ≥ 19), falls back to getRandomValues, and as a last resort uses Math.random — those ids are run and message identifiers, not secrets.

Adding an Import to the Mobile Entry

For contributors: an export belongs in the mobile entry only if it can run in a webview. If a piece of the SDK can run in a webview and would be useful on mobile, add it to src/mobile.ts and to the WEBVIEW_ENTRIES list in scripts/webview-gate.mjs. If it cannot run in a webview, it does not belong there — even if it would be convenient. A consumer reaching for something absent gets a clear build-time resolution error, which is a far better outcome than a blank screen on a device at import time.

Framework Examples

The same 5-line Agent example, with the runtime-appropriate way to source apiKey.

Best Practices

A key shipped in a phone or webview build is extractable by anyone with the app. Fetch an ephemeral token from your own backend at runtime and pass it as apiKey.
AgentEvent, AgentStreamOptions, SimpleAgentConfig, and StopReason are all re-exported from praisonai/mobile. Import them from there so a mobile build never reaches into the root entry by accident.
import { randomUUID } from 'crypto' is a static Node builtin import that kills a webview bundle at load. Use randomUUID from praisonai/mobile instead.
If you add an export to src/mobile.ts, add its entry to WEBVIEW_ENTRIES in scripts/webview-gate.mjs so CI keeps verifying it stays webview-safe.

Stream Events

Structured tool events from streamEvents()

TypeScript SDK

The full TypeScript framework

Streaming

Stream text token-by-token

Agent

Full agent configuration