RunAnywhere Flutter SDK

pub package License

Privacy-first, on-device AI SDK for Flutter. Run LLMs, Speech-to-Text, Text-to-Speech, and Voice AI directly on user devices.

Installation

Step 1: Add packages to pubspec.yaml:

dependencies:
  runanywhere: ^0.20.9
  runanywhere_onnx: ^0.20.9      # STT, TTS, VAD
  runanywhere_llamacpp: ^0.20.9  # LLM text generation

Step 2: Configure platforms (see below).


iOS Setup (Required)

After adding the packages, you must update your iOS Podfile for the SDK to work.

1. Update ios/Podfile

Make these two critical changes:

# Change 1: Set minimum iOS version to 17.5
platform :ios, '17.5'

# ... (keep existing flutter_root function and setup) ...

target 'Runner' do
  # Change 2: Add static linkage - THIS IS REQUIRED
  use_frameworks! :linkage => :static

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '17.5'
      # Required for microphone permission (STT/Voice features)
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        'PERMISSION_MICROPHONE=1',
      ]
    end
  end
end

Important: Without use_frameworks! :linkage => :static, you will see "symbol not found" errors at runtime.

For a pub.dev dependency, CocoaPods downloads the version-matched RACommons XCFramework and verifies its immutable SHA-256 checksum automatically. Source checkouts use a locally staged framework when present.

2. Update ios/Runner/Info.plist

Add microphone permission for STT/Voice features:

<key>NSMicrophoneUsageDescription</key>
<string>This app needs microphone access for speech recognition</string>

3. Run pod install

cd ios && pod install

Android Setup

Add microphone permission to android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

Quick Start

import 'package:runanywhere/runanywhere.dart';
import 'package:runanywhere_onnx/runanywhere_onnx.dart';
import 'package:runanywhere_llamacpp/runanywhere_llamacpp.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Initialize SDK and register backends
  await RunAnywhere.initialize();
  await Onnx.register();
  await LlamaCpp.register();

  runApp(MyApp());
}

Text Generation (LLM)

final stream = RunAnywhere.llm
    .generateStream('Tell me a joke', LLMGenerationOptions(maxTokens: 128));
await for (final event in stream) {
  if (event.isFinal) break;
  if (event.token.isNotEmpty) print(event.token);
}

Speech-to-Text

final result = await RunAnywhere.stt.transcribe(audioData);
print(result.text);

Platform Support

Platform Minimum Version
iOS 17.5+
Android API 24+

Documentation

License

RunAnywhere License (Apache 2.0 based, with additional commercial-use terms). See LICENSE.

Commercial licensing: san@runanywhere.ai

Libraries

adapters/http_client_adapter
adapters/voice_agent_stream_adapter
core/native/rac_native
features/stt/services/audio_capture_manager
features/tts/services/audio_playback_manager
features/voice_agent/services/voice_agent_mic_driver
foundation/constants/sdk_constants
foundation/errors/sdk_exception
foundation/logging/sdk_logger
SDK Logger
generated/chat.pb
generated/chat.pbenum
generated/component_types.pb
generated/component_types.pbenum
generated/convenience/ra_convenience
generated/device_info.pb
generated/device_info.pbenum
generated/diffusion_options.pb
generated/diffusion_options.pbenum
generated/download_service.pb
generated/download_service.pbenum
generated/embeddings_options.pb
generated/embeddings_options.pbenum
generated/errors.pb
generated/errors.pbenum
generated/hardware_profile.pb
generated/hardware_profile.pbenum
generated/hybrid_router.pb
generated/hybrid_router.pbenum
generated/lifecycle_service.pb
generated/lifecycle_service.pbenum
generated/llm_options.pb
generated/llm_options.pbenum
generated/llm_service.pb
generated/llm_service.pbenum
generated/logging.pb
generated/logging.pbenum
generated/lora_options.pb
generated/lora_options.pbenum
generated/model_types.pb
generated/model_types.pbenum
generated/pipeline.pb
generated/pipeline.pbenum
generated/plugin_loader.pb
generated/plugin_loader.pbenum
generated/rac_options.pb
generated/rac_options.pbenum
generated/rag.pb
generated/rag.pbenum
generated/router.pb
generated/router.pbenum
generated/sdk_events.pb
generated/sdk_events.pbenum
generated/sdk_init.pb
generated/sdk_init.pbenum
generated/solutions.pb
generated/solutions.pbenum
generated/storage_types.pb
generated/storage_types.pbenum
generated/structured_output.pb
generated/structured_output.pbenum
generated/stt_options.pb
generated/stt_options.pbenum
generated/thinking_tag_pattern.pb
generated/thinking_tag_pattern.pbenum
generated/tool_calling.pb
generated/tool_calling.pbenum
generated/tts_options.pb
generated/tts_options.pbenum
generated/vad_options.pb
generated/vad_options.pbenum
generated/vlm_options.pb
generated/vlm_options.pbenum
generated/voice_agent_service.pb
generated/voice_agent_service.pbenum
generated/voice_events.pb
generated/voice_events.pbenum
native/dart_bridge
native/dart_bridge_audio
native/dart_bridge_auth
native/dart_bridge_device
native/dart_bridge_diffusion
native/dart_bridge_download
native/dart_bridge_embeddings
native/dart_bridge_environment
native/dart_bridge_events
native/dart_bridge_file_manager
native/dart_bridge_hf_auth
native/dart_bridge_http
native/dart_bridge_hybrid_stt
native/dart_bridge_llm
DartBridge+LLM
native/dart_bridge_lora
DartBridge+LoRA
native/dart_bridge_model_lifecycle
native/dart_bridge_model_paths
native/dart_bridge_model_registry
native/dart_bridge_platform
native/dart_bridge_plugin_loader
native/dart_bridge_proto_utils
native/dart_bridge_rag
native/dart_bridge_sdk_init
native/dart_bridge_secure_storage
native/dart_bridge_solutions
native/dart_bridge_state
native/dart_bridge_storage
native/dart_bridge_structured_output
native/dart_bridge_stt
DartBridge+STT
native/dart_bridge_telemetry
native/dart_bridge_tool_calling
native/dart_bridge_tts
DartBridge+TTS
native/dart_bridge_vad
DartBridge+VAD
native/dart_bridge_vlm
DartBridge+VLM
native/dart_bridge_voice_agent
native/native_functions
NativeFunctions
native/platform_loader
native/type_conversions/model_types_cpp_bridge
ModelTypes + CppBridge
native/types/basic_types
native/types/core_function_types
native/types/memory_platform_types
native/types/tools_storage_types
public/capabilities/runanywhere_diffusion
public/capabilities/runanywhere_downloads
public/capabilities/runanywhere_embeddings
public/capabilities/runanywhere_hybrid
public/capabilities/runanywhere_llm
public/capabilities/runanywhere_lora
public/capabilities/runanywhere_model_lifecycle
public/capabilities/runanywhere_models
public/capabilities/runanywhere_plugin_loader
public/capabilities/runanywhere_rag
public/capabilities/runanywhere_solutions
public/capabilities/runanywhere_stt
public/capabilities/runanywhere_tools
public/capabilities/runanywhere_tts
public/capabilities/runanywhere_vad
public/capabilities/runanywhere_vlm
public/capabilities/runanywhere_voice
public/configuration/sdk_environment
public/events/event_bus
public/extensions/audio/audio_convert
public/extensions/format_framework
public/extensions/model_category_extensions
public/extensions/rag_module
RAG backend module for RunAnywhere Flutter SDK.
public/extensions/runanywhere_logging
public/extensions/runanywhere_storage
public/extensions/runanywhere_structured_output
public/extensions/stt/stt_options_helpers
public/hybrid/hybrid_cloud_backend
public/hybrid/hybrid_device_state
public/hybrid/hybrid_model
public/hybrid/hybrid_routing_policy
public/hybrid/hybrid_stt_router
public/runanywhere
public/system_tts
runanywhere
RunAnywhere Flutter SDK - Core Package.
runanywhere_protos
Public generated proto type surface for RunAnywhere Flutter.