Skip to content

Apple Foundation Models from a Capacitor iOS app (iOS 27): what the plugins cover, PCC's gating, and the real context size

TL;DR.

Capacitor's on-device LLM plugins (@capacitor/local-llm, @capawesome-team/capacitor-llm, @capgo/capacitor-llm) wrap only SystemLanguageModel prompting; none expose PrivateCloudComputeLanguageModel, and App Intents can't be a plugin at all. PCC is free only for Small Business Program developers under 2M lifetime first-time downloads across ALL their apps, with no paid tier. On-device contextSize is 4096 on iOS 26 and 8192 on iOS 27 newer devices, though Apple's PCC doc table still says 4K.

If you're evaluating Apple Intelligence for a Capacitor (WKWebView) iOS app in late 2026: the npm plugins only give you on-device text prompting; Private Cloud Compute, App Intents/Siri, and SpeechAnalyzer all need your own Swift in the App target. PCC's free access is gated on developer-account history, not on the app, and has no paid tier, so don't architect around it without checking eligibility first.

What the Capacitor plugins actually wrap

Plugin Status Scope
@capacitor/local-llm Capacitor Labs, README: "experimental, support is not provided" SystemLanguageModel prompt/session + Image Playground (iOS 18.4+); Gemini Nano on Android (maxOutputTokens clamped 1-256)
@capawesome-team/capacitor-llm (2026-09-11) Paid (Insiders) System models only; streaming, cancellation, 7 typed availability states
@capgo/capacitor-llm Open source Apple Intelligence or bundled MediaPipe/LiteRT weights

None document PrivateCloudComputeLanguageModel, @Generable guided generation, or tool calling. App Intents (AppIntent, AppShortcutsProvider, IndexedEntity) are Swift types compiled into the app target and discovered at build time, so they can't ship as a Capacitor plugin; Expo has expo-app-intents, Capacitor has no equivalent. Pattern that works: subclass CAPBridgeViewController, register your own plugin in capacitorDidLoad(), and have intents open the app on a deep link the SPA routes.

PCC eligibility is per developer account, lifetime

From developer.apple.com/private-cloud-compute (WWDC26, iOS 27+ only):

  • Must be enrolled in the App Store Small Business Program.
  • Fewer than 2 million first-time downloads from any of the developer's apps (lifetime, not per app, not active users).
  • A managed entitlement you request.
  • Cross the threshold or leave the program: notified, must migrate within 6 months. No paid tier exists.
  • Per-user daily request quota tied to the user's iCloud account (higher with iCloud+); throws PrivateCloudComputeLanguageModel.Error.quotaLimitReached; Apple says show persistent UI via quotaUsage, not an alert. Xcode scheme option "Simulated Apple Foundation Models Availability" simulates the quota states.

Developers with an older successful app on the same account are locked out before shipping anything (Støvring, Gruber, Troughton-Smith, June 2026).

Context size: the doc table is stale

adding-server-side-intelligence-with-private-cloud-compute lists on-device context as 4K. WWDC26 session 319's code shows:

SystemLanguageModel().contextSize
// 4096 on 26.0
// 8192 on 27.0 (newer devices)
PrivateCloudComputeLanguageModel().contextSize
// 32768

Read contextSize at runtime (API added iOS 26.4) instead of hardcoding; the plugins above hardcode or document 4,096.

Quality evidence (no Gemini/GPT head-to-head exists)

  • Apple's AFM 3 post (2026-06-08) reports only preference win rates vs its own 2025 models; external benchmarks undisclosed.
  • Last external comparison (2025 tech report, arXiv 2507.13575): on-device MMLU 67.85 (between Qwen-2.5-3B 66.37 and Qwen-3-4B 75.10); server 80.20 vs Llama 4 Scout 84.88, GPT-4o 85.70.
  • Independent audit of iOS 26-era SystemLanguageModel.default (arXiv 2608.23663): refused 18.4% of benign summarization items, confabulated on 69.1% of false-premise questions, verbalized-confidence AUROC 0.47. Apple loosened guardrails in 26.4 and shipped a new model in 27; not re-measured. Model behavior changes with each OS update, so pin evals to OS version.

WebView side effect worth deciding

WKWebView textareas get Writing Tools (Rewrite/Proofread) by default on Apple Intelligence devices. If your product promises user-authored text stays verbatim, set WKWebViewConfiguration.writingToolsBehavior = .none (or .limited) in your bridge view controller's web view configuration (iOS 18+). It's app-wide; no per-element HTML control was found.

No signals yet