Overview
The Syni Flutter SDK (package:syni) is the Dart/Flutter consumer of the
Syni runtime. It wraps the C FFI in a Dart agent API:
install lifecycle, persona binding, streaming chat, and hybrid local/cloud
routing.
Key features
- On-device inference — Qwen 2 / 2.5 and Gemma 3 GGUF models out of the box; bring your own GGUF for other supported architectures.
- Hybrid local / cloud — same agent API, choose execution mode per call
(
localFirst,cloudFirst,localOnly,cloudOnly). - Versioned personas — load by id from bundled
syni-spec; the same id resolves to the same behavior on client and server. - Worker isolate so engine load + token generation don’t block the UI thread.
- Verified model downloads — pinned SHA-256 per model, checked at install time.
- Streaming chat with token-level deltas plus a final structured response.
Platform support
Android + iOS are the supported targets today. Desktop targets are in the
works. Web is out of scope.
Installation
1. Pull the native runtime artifacts
The Flutter plugin doesn’t ship the native engine — that’s Syni Runtime, distributed separately via the Synheart CLI:SyniRuntime.xcframework/, android/jniLibs/<abi>/libsyni_ffi.so,
and the spec payload under your app’s synheart/vendor/ tree. The plugin’s
build.gradle / Podspec resolve these paths automatically.
Re-run any time you want a fresher version — installs are idempotent.
2. Add the Dart package
Basic usage
Streaming
Hybrid local / cloud
SyniExecutionMode.{localFirst, cloudFirst, localOnly, cloudOnly}) or pinned by the persona via its
execution_policy field in the spec.
Where this fits
package:syni is the agent layer — inference, install lifecycle,
persona binding, chat orchestration. It does not own:
- HSI signal collection (the
synheart_coreSDK does), or - the four-authority gate (consent + capability + activation + session; also a host concern).
synheart_core and syni,
and use Synheart.syni (in synheart_core) which wraps the agent with
those layers. Standalone use of package:syni is fully supported when you
don’t need the wider Synheart contract.
Models
Two pre-pinned entries ship inSyniModels:
qwen25_15bInstructQ4(Qwen 2.5 1.5B Instruct Q4_K_M, ~1.1 GB)gemma3_1bInstructQ4(Gemma 3 1B Instruct Q4_K_M, ~770 MB, Synheart-hosted mirror)
SyniModelSpec.
API reference
The full Dart API is on pub.dev. Surface highlights:SyniAgent— install lifecycle, model catalog, persona binding,chat/chatStreamorchestration, hybrid local/cloud routing.SyniInstaller— model download, tokenizer fetch, SHA-256 verification, cold-start restore.SyniCloudClient— HTTP + SSE client for the Syni cloud chat endpoint; sticky session id; HSI forwarded as requestcontext.SyniSpecPersona.load(id)— resolves persona JSON from bundled spec assets so the same id consistently produces the same behavior on client and server.SyniRuntime— worker-isolate wrapper over the on-device inference engine.
Related
- Syni overview — how the pieces fit
- Syni Runtime FFI — the C ABI under the hood
- Syni Spec — persona / safety / schema contracts
- Package on pub.dev:
syni