1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <link href="https://fonts.googleapis.com/css2?family=Tilt+Neon&display=swap" rel="stylesheet" /> 7 <link rel="apple-touch-icon" sizes="57x57" href="/favicon-57x57.png"> 8 <link rel="apple-touch-icon" sizes="60x60" href="/favicon-60x60.png"> 9 <link rel="apple-touch-icon" sizes="72x72" href="/favicon-72x72.png"> 10 <link rel="apple-touch-icon" sizes="76x76" href="/favicon-76x76.png"> 11 <link rel="apple-touch-icon" sizes="114x114" href="/favicon-114x114.png"> 12 <link rel="apple-touch-icon" sizes="120x120" href="/favicon-120x120.png"> 13 <link rel="apple-touch-icon" sizes="144x144" href="/favicon-144x144.png"> 14 <link rel="apple-touch-icon" sizes="152x152" href="/favicon-152x152.png"> 15 <link rel="apple-touch-icon" sizes="180x180" href="/favicon-180x180.png"> 16 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 17 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 18 <link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png"> 19 <link rel="icon" type="image/png" sizes="192x192" href="/favicon-192x192.png"> 20 <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> 21 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 22 <meta name="msapplication-TileColor" content="#ffffff"> 23 <meta name="msapplication-TileImage" content="/favicon-144x144.png"> 24 <meta name="msapplication-config" content="/browserconfig.xml"> 25 <meta http-equiv="cache-control" content="public, max-age=0, s-maxage=3600, stale-while-revalidate=86400"> 26 <link href="./_app/immutable/assets/0.DG2aLNwg.css" rel="stylesheet"> 27 <link href="./_app/immutable/assets/Footer.BwIXAKsC.css" rel="stylesheet"> 28 <link href="./_app/immutable/assets/ArticleCard.jAVGkGxI.css" rel="stylesheet"> 29 <link href="./_app/immutable/assets/3.ByVxR1Hn.css" rel="stylesheet"> 30 <link rel="modulepreload" href="./_app/immutable/entry/start.DCslHCDY.js"> 31 <link rel="modulepreload" href="./_app/immutable/chunks/dmAq0LiT.js"> 32 <link rel="modulepreload" href="./_app/immutable/chunks/BN1SZ1vA.js"> 33 <link rel="modulepreload" href="./_app/immutable/entry/app.BFO6RO-y.js"> 34 <link rel="modulepreload" href="./_app/immutable/chunks/PPVm8Dsz.js"> 35 <link rel="modulepreload" href="./_app/immutable/chunks/DsnmJJEf.js"> 36 <link rel="modulepreload" href="./_app/immutable/chunks/InhFHllE.js"> 37 <link rel="modulepreload" href="./_app/immutable/chunks/D0kmE35K.js"> 38 <link rel="modulepreload" href="./_app/immutable/chunks/BWW5ddhD.js"> 39 <link rel="modulepreload" href="./_app/immutable/nodes/0.DSeAADkc.js"> 40 <link rel="modulepreload" href="./_app/immutable/chunks/CMb4_sAc.js"> 41 <link rel="modulepreload" href="./_app/immutable/chunks/pBEQZU1u.js"> 42 <link rel="modulepreload" href="./_app/immutable/chunks/qsbTZ_ho.js"> 43 <link rel="modulepreload" href="./_app/immutable/chunks/Ks26yRyA.js"> 44 <link rel="modulepreload" href="./_app/immutable/nodes/3.Cw1TntP0.js"> 45 <link rel="modulepreload" href="./_app/immutable/chunks/BmyB_2jS.js"> 46 <link rel="modulepreload" href="./_app/immutable/chunks/BIlqOjG3.js"> 47 <link rel="modulepreload" href="./_app/immutable/chunks/kkwqtSwP.js"> 48 <link rel="modulepreload" href="./_app/immutable/chunks/CU1QhgsP.js"> 49 <link rel="modulepreload" href="./_app/immutable/chunks/VV4Zbb8C.js"> 50 <link rel="modulepreload" href="./_app/immutable/chunks/COCSf-wL.js"> 51 <link rel="modulepreload" href="./_app/env.js"><!--12qhfyh--><meta name="description" content="Technical articles about on-device AI, edge inference, and building ML-powered applications that run locally on mobile and desktop."/> <meta property="og:type" content="website"/> <meta property="og:url" content="https://www.xybrid.ai/blog"/> <meta property="og:title" content="Blog - Xybrid"/> <meta property="og:description" content="Technical articles about on-device AI, edge inference, and building ML-powered applications that run locally on mobile and desktop."/> <meta property="og:image" content="https://www.xybrid.ai/og-image.jpg"/>
51 <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:site_name" content="Xybrid"/> <meta property="og:logo" content="https://www.xybrid.ai/logo.png"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:url" content="https://www.xybrid.ai/blog"/> <meta name="twitter:title" content="Blog - Xybrid"/> <meta name="twitter:description" content="Technical articles about on-device AI, edge inference, and building ML-powered applications that run locally on mobile and desktop."/> <meta name="twitter:image" content="https://www.xybrid.ai/og-image.jpg"/> <link rel="canonical" href="https://www.xybrid.ai/blog"/> <link rel="alternate" type="application/rss+xml" title="Xybrid Blog" href="/blog/rss.xml"/><!----><!--u4k2t--><!---->
51<script type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","name":"Xybrid Blog","description":"Technical articles about on-device AI, edge inference, and building ML-powered applications.","url":"https://www.xybrid.ai/blog","publisher":{"@type":"Organization","name":"Xybrid","logo":{"@type":"ImageObject","url":"https://www.xybrid.ai/logo.png"}},"blogPost":[{"@type":"BlogPosting","headline":"On-Device AI: The Complete Guide to Running ML Models Locally","description":"Everything you need to know about running machine learning models directly on mobile and desktop devices â privacy, latency, cost benefits, and how to get started.","datePublished":"2026-03-23","url":"https://www.xybrid.ai/blog/on-device-ai-guide"},{"@type":"BlogPosting","headline":"Publishing ML Models as Bundles with xybrid-pack","description":"A packaging pipeline that turns raw model files into versioned, checksummed, cross-platform bundles hosted on HuggingFace. No more 'download the model and put it here.'","datePublished":"2026-07-17","url":"https://www.xybrid.ai/blog/publishing-ml-models-as-bundles-xybrid-pack"},{"@type":"BlogPosting","headline":"Vendoring llama.cpp in a Rust Workspace (Lessons Learned)","description":"The practical pain of embedding a C++ inference engine in a Rust monorepo â cross-compilation, Android fp16, think-tag stripping, and when to give up on upstream.","datePublished":"2026-07-14","url":"https://www.xybrid.ai/blog/vendoring-llamacpp-in-rust-workspace"},{"@type":"BlogPosting","headline":"model_metadata.json: A Declarative Schema for ML Model Execution","description":"How a single JSON file replaces custom inference scripts and makes any ML model self-describing. No more 'works on my machine.'","datePublished":"2026-07-10","url":"https://www.xybrid.ai/blog/model-metadata-json-declarative-schema"},{"@type":"BlogPosting","headline":"Streaming LLM Tokens from Rust to Flutter in Real-Time","description":"How we bridge real-time token streaming from a Rust inference engine to Flutter's reactive UI using flutter_rust_bridge callbacks.","datePublished":"2026-07-07","url":"https://www.xybrid.ai/blog/streaming-llm-tokens-rust-to-flutter"},{"@type":"BlogPosting","headline":"How We Made ONNX Runtime 6.8x Faster on Apple Silicon with CoreML","description":"Real benchmarks showing when Apple's Neural Engine helps (and when it hurts). Lessons from optimizing ML inference across execution providers.","datePublished":"2026-07-03","url":"https://www.xybrid.ai/blog/onnx-runtime-6x-faster-apple-silicon-coreml"},{"@type":"BlogPosting","headline":"Whisper Speech Recognition as a Single Rust Binary","description":"Build a Whisper-powered transcription tool as a single Rust binary. Candle for pure-Rust inference. No runtime dependencies, works airgapped.","datePublished":"2026-06-30","url":"https://www.xybrid.ai/blog/whisper-speech-recognition-single-rust-binary"},{"@type":"BlogPosting","headline":"Why We Chose Rust Over Python for ML Inference","description":"Not training â inference. How Rust's zero-cost abstractions, lack of GIL, and FFI story make it the better choice for shipping ML to production devices.","datePublished":"2026-06-26","url":"https://www.xybrid.ai/blog/why-rust-over-python-for-ml-inference"},{"@type":"BlogPosting","headline":"On-Device AI for Mobile Apps: A Developer's Guide to iOS and Android","description":"How to add on-device AI to iOS and Android apps â comparing CoreML, ONNX Runtime, TensorFlow Lite, and llama.cpp. Practical guide with model sizes, performance benchmarks, and integration patterns.","datePublished":"2026-06-23","url":"https://www.xybrid.ai/blog/on-device-ai-mobile-ios-android"},{"@type":"BlogPosting","headline":"Edge AI: Why Edge-First Should Be Your Default Architecture","description":"On-device AI should be the starting position, not the optimization. The industry defaults to cloud out of habit, not necessity.","datePublished":"2026-06-19","url":"https://www.xybrid.ai/blog/edge-first-should-be-your-default"},{"@type":"BlogPosting","headline":"Private AI: How to Run AI Models Without Sending Data to the Cloud","description":"How to run AI models privately on-device â no cloud APIs, no data leaving the device. Covers GDPR, HIPAA, and SOC 2 compliance, private LLMs, and practical implementation patterns.","datePublished":"2026-06-16","url":"https://www.xybrid.ai/blog/private-ai-run-models-without-cloud"},{"@type":"BlogPosting","headline":"Building a Cross-Platform ML Inference SDK in Rust","description":"How we built a single Rust core that powers ML inference across CLI, Flutter, Swift, Kotlin, and Unity â and the architectural decisions that made it possible.","datePublished":"2026-06-12","url":"https://www.xybrid.ai/blog/building-cross-platform-ml-inference-sdk-in-rust"},{"@type":"BlogPosting","headline":"How to Run LLMs Locally: A Complete Guide (2026)","description":"How to run large language models locally on your laptop, desktop, or phone â llama.cpp, Ollama, ONNX Runtime, and on-device options compared. No cloud API needed.","datePublished":"2026-06-09","url":"https://www.xybrid.ai/blog/run-llm-locally-complete-guide"},{"@type":"BlogPosting","headline":"One Codebase, Five Platforms: Shipping ML to Flutter, Swift, Kotlin, Unity & CLI","de
51scription":"How UniFFI, flutter_rust_bridge, and C FFI let us write ML inference once in Rust and bind it to five platform SDKs. The cross-platform FFI playbook.","datePublished":"2026-06-05","url":"https://www.xybrid.ai/blog/one-codebase-five-platforms-ml-flutter-swift-kotlin-unity"},{"@type":"BlogPosting","headline":"Run AI Models On-Device â Zero Config, Five Minutes","description":"CLI, Rust, Flutter, Swift, Kotlin, Unity â run 25+ ML models on-device with one command. No tensor shapes, no preprocessing scripts.","datePublished":"2026-06-02","url":"https://www.xybrid.ai/blog/run-ai-models-on-device-zero-config"},{"@type":"BlogPosting","headline":"Add Text-to-Speech to Your Flutter App in 15 Minutes","description":"A step-by-step guide to adding high-quality, on-device TTS to a Flutter app using Xybrid and the Kokoro model. No cloud APIs, no API keys, no per-request costs.","datePublished":"2026-04-06","url":"https://www.xybrid.ai/blog/add-text-to-speech-to-flutter-app-in-15-minutes"},{"@type":"BlogPosting","headline":"Edge AI vs Cloud AI: When to Run Models On-Device","description":"A practical decision framework for choosing between on-device and cloud-based AI inference, with cost analysis, comparison tables, and real-world use cases.","datePublished":"2026-03-20","url":"https://www.xybrid.ai/blog/edge-vs-cloud-inference"},{"@type":"BlogPosting","headline":"Building a Voice Agent That Runs Entirely On-Device","description":"A step-by-step tutorial for building an on-device voice agent using Whisper, a local LLM, and Kokoro TTS â no cloud APIs, no internet required.","datePublished":"2026-03-17","url":"https://www.xybrid.ai/blog/building-voice-agent-on-device"}]}</script>
51<!----><!----><title>Blog - Xybrid</title> 52 </head> 53 <body data-sveltekit-preload-data="hover"> 54 <div style="display: contents"><!--[--><!--[--><!----><!----><div class="x-page x-root svelte-u4k2t"><nav class="x-nav "><div class="x-nav__left"><a class="x-nav__brand" href="/" aria-label="Xybrid home"><img class="x-logo-mark" src="/logo.png" alt="" width="34" height="34" style="display: inline-block; width: 34px; height: 34px; object-fit: contain;"/><!----></a> <ul class="x-nav__links"><li><a class="x-nav__link" href="/models">Models</a></li> <li><a class="x-nav__link" href="/blog">Blog</a></li> <li><a class="x-nav__link" href="/games">Games</a></li> <li><a class="x-nav__link --has-arrow" href="https://docs.xybrid.dev" target="_blank" rel="noopener">Docs</a></li></ul></div> <div class="x-nav__right"><a class="x-btn --ghost --sm x-nav__social svelte-1h8gbq9" href="https://github.com/xybrid-ai/xybrid" target="_blank" rel="noopener"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 16 16" fill="currentColor"><!--[!--><!--[--><path d="M8 .2A8 8 0 0 0 .5 11a8 8 0 0 0 5.5 5.06c.4.07.55-.18.55-.4v-1.4c-2.24.5-2.7-1.07-2.7-1.07-.36-.94-.9-1.18-.9-1.18-.74-.5.06-.5.06-.5.82.06 1.25.85 1.25.85.73 1.26 1.92.9 2.4.68.07-.53.28-.9.5-1.1-1.78-.2-3.65-.9-3.65-4 0-.88.32-1.6.84-2.17-.08-.2-.36-1.02.08-2.12 0 0 .68-.22 2.23.83a7.7 7.7 0 0 1 4.05 0c1.55-1.05 2.23-.83 2.23-.83.44 1.1.16 1.92.08 2.12.52.57.84 1.3.84 2.17 0 3.1-1.88 3.8-3.67 4 .3.25.55.74.55 1.5v2.22c0 .22.15.47.55.4A8 8 0 0 0 15.5 11 8 8 0 0 0 8 .2z"></path><!--]--><!--]--></svg><!----><!--[-->466<!--]--></a> <a class="x-btn --ghost --sm x-nav__social svelte-1h8gbq9" href="https://discord.gg/xybrid" target="_blank" rel="noopener"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 16 16" fill="currentColor"><!--[!--><!--[!--><!--[--><path d="M13.55 3.06A12.4 12.4 0 0 0 10.5 2.13a8.5 8.5 0 0 0-.4.83 11.5 11.5 0 0 0-3.43 0 8.4 8.4 0 0 0-.4-.83 12.4 12.4 0 0 0-3.05.93A12.93 12.93 0 0 0 .42 11.6a12.5 12.5 0 0 0 3.78 1.9c.3-.42.58-.86.81-1.32a8.1 8.1 0 0 1-1.28-.62c.1-.08.21-.16.32-.24a8.93 8.93 0 0 0 7.5 0c.11.08.22.16.32.24-.41.24-.83.45-1.28.62.24.46.5.9.81 1.32a12.5 12.5 0 0 0 3.78-1.9 12.78 12.78 0 0 0-2.63-8.54ZM5.35 9.98c-.74 0-1.35-.69-1.35-1.54s.6-1.55 1.35-1.55c.74 0 1.36.7 1.35 1.55 0 .85-.6 1.54-1.35 1.54Zm5.3 0c-.74 0-1.35-.69-1.35-1.54s.6-1.55 1.35-1.55c.74 0 1.36.7 1.35 1.55 0 .85-.6 1.54-1.35 1.54Z"></path><!--]--><!--]--><!--]--></svg><!----> Discord</a> <a class="x-btn --ghost --sm x-nav__signin svelte-1h8gbq9" href="https://console.xybrid.dev">Sign in</a> <a class="x-btn --primary --sm" href="https://console.xybrid.dev/">Get API key <svg class="x-arrow" aria-hidden="true" width="12" height="12" viewBox="0 0 13 13" fill="none"><!--[--><path d="M3 6.5h6.5M7 4l2.5 2.5L7 9" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"></path><!--]--></svg><!----></a> <span class="x-nav__progress" aria-hidden="true"></span> <button type="button" class="x-nav__burger svelte-1h8gbq9" aria-label="Open menu" aria-expanded="false" aria-controls="x-nav-drawer"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 18 18" fill="none"><!--[!--><!--[!--><!--[!--><!--[--><path d="M3 5h12M3 9h12M3 13h12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><!--]--><!--]--><!--]--><!--]--></svg><!----></button></div></nav> <!--[!--><!--]--> <div id="x-nav-drawer" class="x-nav__drawer svelte-1h8gbq9" aria-hidden="true" inert><ul class="x-nav__drawer-links svelte-1h8gbq9"><li class="svelte-1h8gbq9"><a href="/models" class="svelte-1h8gbq9">Models</a></li> <li class="svelte-1h8gbq9"><a href="/blog" class="svelte-1h8gbq9">Blog</a></li> <li class="svelte-1h8gbq9"><a href="/games" class="svelte-1h8gbq9">Games</a></li> <li class="svelte-1h8gbq9"><a href="https://docs.xybrid.dev" target="_blank" rel="noopener" class="svelte-1h8gbq9">Docs â</a></li></ul> <div class="x-nav__drawer-foot svelte-1h8gbq9"><a class="x-btn --ghost" href="https://github.com/xybrid-ai/xybrid" target="_blank" rel="noopener"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 16 16" fill="currentColor"><!--[!--><!--[--><path d="M8 .2A8 8 0 0 0 .5 11a8 8 0 0 0 5.5 5.06c.4.07.55-.18.55-.4v-1.4c-2.24.5-2.7-1.07-2.7-1.07-.36-.94-.9-1.18-.9-1.18-.74-.5.06-.5.06-.5.82.06 1.25.85 1.25.85.73 1.26 1.92.9 2.4.68.07-.53.28-.9.5-1.1-1.78-.2-3.65-.9-3.65-4 0-.88.32-1.6.84-2.17-.08-.2-.36-1.02.08-2.12 0 0 .68-.22 2.23.83a7.7 7.7 0 0 1 4.05 0c1.55-1.05 2.23-.83 2.23-.83.44 1.1.16 1.92.08 2.12.52.57.84 1.3.84 2.17 0 3.1-1.88 3.8-3.67 4 .3.25.55.74.55 1.5v2.22c0 .22.15.47.55.4A8 8 0 0 0 15.5 11 8 8 0 0 0 8 .2z"></path><!--]--><!--]--></svg><!----><!--[-->466<!--]--></a> <a class="x-btn --ghost" href="https://discord.gg/xybrid" target="_blank" rel="noopener"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 16 16" fill="currentColor"><!--[!--><!--[!--><!--[--><path d="M13.55 3.06A12.4 12.4 0 0 0 10.5 2.13a8.5 8.5 0 0 0-.4.83 11.5 11.5 0 0 0-3.43 0 8.4 8.4 0 0 0-.4-.83 12.4 12.4 0 0 0-3.05.93A12.93 12.93 0 0 0 .42 11.6a12.5 12.5 0 0 0 3.78 1.9c.3-.42.58-.86.81-1.32a8.1 8.1 0 0 1-1.28-.62c.1-.08.21-.16.32-.24a8.93 8.93 0 0 0 7.5 0c.11.08.22.16.32.24-.41.24-.83.45-1.28.62.24.46.5.9.81 1.32a12.5 12.5 0 0 0 3.78-1.9 12.78 12.78 0 0 0-2.63-8.54ZM5.35 9.98c-.74 0-1.35-.69-1.35-1.54s.6-1.55 1.35-1.55c.74 0 1.36.7 1.35 1.55 0 .85-.6 1.54-1.35 1.54Zm5.3 0c-.74 0-1.35-.69-1.35-1.54s.6-1.55 1.35-1.55c.74 0 1.36.7 1.35 1.55 0 .85-.6 1.54-1.35 1.54Z"></path><!--]--><!--]--><!--]--></svg><!----> Discord</a> <a class="x-btn --ghost" href="https://console.xybrid.dev">Sign in</a></div></div><!----> <main><section class="x-section"><div class="x-container"><div class="x-section__head"><span class="x-eyebrow">Blog</span>
54 <h1 class="x-h1" style="max-width: 20ch;">Notes from the <em>on-device frontier.</em></h1> <p class="x-lead">Technical deep-dives into on-device AI, edge inference, and building ML-powered 55 applications that run anywhere.</p></div> <!--[!--><div class="x-blog__grid svelte-u4k2t"><!--[--><a class="x-article-card svelte-1vz16gd" href="/blog/on-device-ai-guide"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-03-23">Mar 23, 2026</time> <span>·</span> <span>12 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">On-Device AI: The Complete Guide to Running ML Models Locally</h3> <p class="x-article-card__desc svelte-1vz16gd">Everything you need to know about running machine learning models directly on mobile and desktop devices â privacy, latency, cost benefits, and how to get started.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">on-device-ai</span><span class="x-article-card__tag svelte-1vz16gd">edge-inference</span><span class="x-article-card__tag svelte-1vz16gd">mobile-ml</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/publishing-ml-models-as-bundles-xybrid-pack"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-07-17">Jul 17, 2026</time> <span>·</span> <span>5 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Publishing ML Models as Bundles with xybrid-pack</h3> <p class="x-article-card__desc svelte-1vz16gd">A packaging pipeline that turns raw model files into versioned, checksummed, cross-platform bundles hosted on HuggingFace. No more 'download the model and put it here.'</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">machinelearning</span><span class="x-article-card__tag svelte-1vz16gd">devops</span><span class="x-article-card__tag svelte-1vz16gd">opensource</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/vendoring-llamacpp-in-rust-workspace"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-07-14">Jul 14, 2026</time> <span>·</span> <span>7 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Vendoring llama.cpp in a Rust Workspace (Lessons Learned)</h3> <p class="x-article-card__desc svelte-1vz16gd">The practical pain of embedding a C++ inference engine in a Rust monorepo â cross-compilation, Android fp16, think-tag stripping, and when to give up on upstream.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">rust</span><span class="x-article-card__tag svelte-1vz16gd">cpp</span><span class="x-article-card__tag svelte-1vz16gd">ai</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/model-metadata-json-declarative-schema"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-07-10">Jul 10, 2026</time> <span>·</span> <span>6 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">model_metadata.json: A Declarative Schema for ML Model Execution</h3> <p class="x-article-card__desc svelte-1vz16gd">How a single JSON file replaces custom inference scripts and makes any ML model self-describing. No more 'works on my machine.'</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">machinelearning</span><span class="x-article-card__tag svelte-1vz16gd">architecture</span><span class="x-article-card__tag svelte-1vz16gd">opensource</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/streaming-llm-tokens-rust-to-flutter"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-07-07">Jul 7, 2026</time> <span>·</span> <span>6 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Streaming LLM Tokens from Rust to Flutter in Real-Time</h3> <p class="x-article-card__desc svelte-1vz16gd">How we bridge real-time token streaming from a Rust inference engine to Flutter's reactive UI using flutter_rust_bridge callbacks.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">flutter</span><span class="x-article-card__tag svelte-1vz16gd">rust</span><span class="x-article-card__tag svelte-1vz16gd">ai</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/onnx-runtime-6x-faster-apple-silicon-coreml"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-07-03">Jul 3, 2026</time> <span>·</span> <span>6 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">How We Made ONNX Runtime 6.8x Faster on Apple Silicon with CoreML</h3> <p class="x-article-card__desc svelte-1vz16gd">Real benchmarks showing when Apple's Neural Engine helps (and when it hurts). Lessons from optimizing ML inference across execution providers.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">onnx-runtime</span><span class="x-article-card__tag svelte-1vz16gd">coreml</span><span class="x-article-card__tag svelte-1vz16gd">apple-silicon-ml</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/whisper-speech-recognition-single-rust-binary"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-30">Jun 30, 2026</time> <span>·</span> <span>5 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Whisper Speech Recognition as a Single Rust Binary</h3> <p class="x-article-card__desc svelte-1vz16gd">Build a Whisper-powered transcription tool as a single Rust binary. Candle for pure-Rust inference. No runtime dependencies, works airgapped.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">whisper-rust</span><span class="x-article-card__tag svelte-1vz16gd">offline-ai</span><span class="x-article-card__tag svelte-1vz16gd">speech-recognition</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/why-rust-over-python-for-ml-inference"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-26">Jun 26, 2026</time> <span>·</span> <span>7 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Why We Chose Rust Over Python for ML Inference</h3> <p class="x-article-card__desc svelte-1vz16gd">Not training â inference. How Rust's zero-cost abstractions, lack of GIL, and FFI story make it the better choice for shipping ML to production devices.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">
55rust-ml</span><span class="x-article-card__tag svelte-1vz16gd">rust-vs-python</span><span class="x-article-card__tag svelte-1vz16gd">ml-inference</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/on-device-ai-mobile-ios-android"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-23">Jun 23, 2026</time> <span>·</span> <span>12 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">On-Device AI for Mobile Apps: A Developer's Guide to iOS and Android</h3> <p class="x-article-card__desc svelte-1vz16gd">How to add on-device AI to iOS and Android apps â comparing CoreML, ONNX Runtime, TensorFlow Lite, and llama.cpp. Practical guide with model sizes, performance benchmarks, and integration patterns.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">on-device-ai</span><span class="x-article-card__tag svelte-1vz16gd">mobile-ai</span><span class="x-article-card__tag svelte-1vz16gd">ai-on-iphone</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/edge-first-should-be-your-default"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-19">Jun 19, 2026</time> <span>·</span> <span>7 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Edge AI: Why Edge-First Should Be Your Default Architecture</h3> <p class="x-article-card__desc svelte-1vz16gd">On-device AI should be the starting position, not the optimization. The industry defaults to cloud out of habit, not necessity.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">edge-ai</span><span class="x-article-card__tag svelte-1vz16gd">on-device-ai</span><span class="x-article-card__tag svelte-1vz16gd">edge-first</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/private-ai-run-models-without-cloud"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-16">Jun 16, 2026</time> <span>·</span> <span>10 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Private AI: How to Run AI Models Without Sending Data to the Cloud</h3> <p class="x-article-card__desc svelte-1vz16gd">How to run AI models privately on-device â no cloud APIs, no data leaving the device. Covers GDPR, HIPAA, and SOC 2 compliance, private LLMs, and practical implementation patterns.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">private-ai</span><span class="x-article-card__tag svelte-1vz16gd">private-llm</span><span class="x-article-card__tag svelte-1vz16gd">on-device-ai</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/building-cross-platform-ml-inference-sdk-in-rust"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-12">Jun 12, 2026</time> <span>·</span> <span>7 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Building a Cross-Platform ML Inference SDK in Rust</h3> <p class="x-article-card__desc svelte-1vz16gd">How we built a single Rust core that powers ML inference across CLI, Flutter, Swift, Kotlin, and Unity â and the architectural decisions that made it possible.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">rust</span><span class="x-article-card__tag svelte-1vz16gd">ai</span><span class="x-article-card__tag svelte-1vz16gd">architecture</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/run-llm-locally-complete-guide"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-09">Jun 9, 2026</time> <span>·</span> <span>12 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">How to Run LLMs Locally: A Complete Guide (2026)</h3> <p class="x-article-card__desc svelte-1vz16gd">How to run large language models locally on your laptop, desktop, or phone â llama.cpp, Ollama, ONNX Runtime, and on-device options compared. No cloud API needed.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">local-llm</span><span class="x-article-card__tag svelte-1vz16gd">run-llm-locally</span><span class="x-article-card__tag svelte-1vz16gd">offline-ai</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/one-codebase-five-platforms-ml-flutter-swift-kotlin-unity"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-05">Jun 5, 2026</time> <span>·</span> <span>8 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">One Codebase, Five Platforms: Shipping ML to Flutter, Swift, Kotlin, Unity & CLI</h3> <p class="x-article-card__desc svelte-1vz16gd">How UniFFI, flutter_rust_bridge, and C FFI let us write ML inference once in Rust and bind it to five platform SDKs. The cross-platform FFI playbook.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">rust</span><span class="x-article-card__tag svelte-1vz16gd">flutter</span><span class="x-article-card__tag svelte-1vz16gd">kotlin</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/run-ai-models-on-device-zero-config"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-06-02">Jun 2, 2026</time> <span>·</span> <span>3 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Run AI Models On-Device â Zero Config, Five Minutes</h3> <p class="x-article-card__desc svelte-1vz16gd">CLI, Rust, Flutter, Swift, Kotlin, Unity â run 25+ ML models on-device with one command. No tensor shapes, no preprocessing scripts.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">on-device-ai</span><span class="x-article-card__tag svelte-1vz16gd">run-ml-locally</span><span class="x-article-card__tag svelte-1vz16gd">
55rust-ml</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/add-text-to-speech-to-flutter-app-in-15-minutes"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-04-06">Apr 6, 2026</time> <span>·</span> <span>8 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Add Text-to-Speech to Your Flutter App in 15 Minutes</h3> <p class="x-article-card__desc svelte-1vz16gd">A step-by-step guide to adding high-quality, on-device TTS to a Flutter app using Xybrid and the Kokoro model. No cloud APIs, no API keys, no per-request costs.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">flutter</span><span class="x-article-card__tag svelte-1vz16gd">tts</span><span class="x-article-card__tag svelte-1vz16gd">tutorial</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/edge-vs-cloud-inference"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-03-20">Mar 20, 2026</time> <span>·</span> <span>10 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Edge AI vs Cloud AI: When to Run Models On-Device</h3> <p class="x-article-card__desc svelte-1vz16gd">A practical decision framework for choosing between on-device and cloud-based AI inference, with cost analysis, comparison tables, and real-world use cases.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">edge-ai</span><span class="x-article-card__tag svelte-1vz16gd">cloud-ai</span><span class="x-article-card__tag svelte-1vz16gd">inference</span><!--]--></div></div></a><a class="x-article-card svelte-1vz16gd" href="/blog/building-voice-agent-on-device"><!--[!--><!--]--> <div class="x-article-card__body svelte-1vz16gd"><div class="x-article-card__meta svelte-1vz16gd"><time datetime="2026-03-17">Mar 17, 2026</time> <span>·</span> <span>11 min read</span></div> <h3 class="x-article-card__title svelte-1vz16gd">Building a Voice Agent That Runs Entirely On-Device</h3> <p class="x-article-card__desc svelte-1vz16gd">A step-by-step tutorial for building an on-device voice agent using Whisper, a local LLM, and Kokoro TTS â no cloud APIs, no internet required.</p> <div class="x-article-card__tags svelte-1vz16gd"><!--[--><span class="x-article-card__tag svelte-1vz16gd">tutorial</span><span class="x-article-card__tag svelte-1vz16gd">voice-agent</span><span class="x-article-card__tag svelte-1vz16gd">tts</span><!--]--></div></div></a><!--]--></div><!--]--></div></section></main> <footer class="x-footer"><div class="x-container"><div class="x-footer__row"><div class="x-footer__col"><a href="/" aria-label="Xybrid home" style="display: inline-flex; align-items: center; gap: 10px; font-size: 16px; color: var(--c-fg);"><img class="x-logo-mark" src="/logo.png" alt="" width="26" height="26" style="display: inline-block; width: 26px; height: 26px; object-fit: contain;"/><!----></a> <p class="x-small" style="margin-top: 14px; max-width: 36ch;">The operating layer for on-device AI. Built in ð«ð·.</p></div> <div class="x-footer__col"><h4>Product</h4> <ul><li><a href="https://github.com/xybrid-ai/xybrid" target="_blank" rel="noopener">Runtime â</a></li> <li><a href="https://console.xybrid.dev">Console</a></li></ul></div> <div class="x-footer__col"><h4>Developers</h4> <ul><li><a href="https://docs.xybrid.dev" target="_blank" rel="noopener">Documentation â</a></li> <li><a href="https://docs.xybrid.dev/quickstart" target="_blank" rel="noopener">Quickstart â</a></li> <li><a href="https://docs.xybrid.dev/api">API reference</a></li></ul></div> <div class="x-footer__col"><h4>Company</h4> <ul><li><a href="/blog">Blog</a></li></ul></div></div> <div class="x-footer__bottom"><span>© 2026 Xybrid</span> <span style="font-family: var(--c-font-mono); font-size: 11px; color: var(--c-fg-4); letter-spacing: 0.05em;">v0.10.1</span></div></div></footer><!----></div><!----><!----><!----><!--]--> <!--[!--><!--]--><!--]--> 56 57
57<script> 58 { 59 __sveltekit_b1t3p1 = { 60 base: new URL(".", location).pathname.slice(0, -1), 61 env: null 62 }; 63 64 const element = document.currentScript.parentElement; 65 66 import("./_app/env.js").then(({ env }) => { 67 __sveltekit_b1t3p1.env = env; 68 69 Promise.all([ 70 import("./_app/immutable/entry/start.DCslHCDY.js"), 71 import("./_app/immutable/entry/app.BFO6RO-y.js") 72 ]).then(([kit, app]) => { 73 kit.start(app, element, { 74 node_ids: [0, 3], 75 data: [{type:"data",data:{gh:{stars:466,contributors:15,commitsThisMonth:4,commitGraph:[0,1,4,0,0,3,0,0,0,1,0,0,0,1,2,4,3,3,2,1,5,1,5,2,5,2,2,2,0,2,1,1]},latestReleaseTag:"v0.10.1"},uses:{}},{type:"data",data:{posts:[{title:"On-Device AI: The Complete Guide to Running ML Models Locally",description:"Everything you need to know about running machine learning models directly on mobile and desktop devices â privacy, latency, cost benefits, and how to get started.",date:"2026-03-23",author:"Glenn Sonna",tags:["on-device-ai","edge-inference","mobile-ml","privacy"],category:"engineering",image:"",imageAlt:"",draft:false,featured:true,readingTime:12,slug:"on-device-ai-guide"},{title:"Publishing ML Models as Bundles with xybrid-pack",description:"A packaging pipeline that turns raw model files into versioned, checksummed, cross-platform bundles hosted on HuggingFace. No more 'download the model and put it here.'",date:"2026-07-17",author:"Glenn Sonna",tags:["machinelearning","devops","opensource","ai"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:5,slug:"publishing-ml-models-as-bundles-xybrid-pack"},{title:"Vendoring llama.cpp in a Rust Workspace (Lessons Learned)",description:"The practical pain of embedding a C++ inference engine in a Rust monorepo â cross-compilation, Android fp16, think-tag stripping, and when to give up on upstream.",date:"2026-07-14",author:"Glenn Sonna",tags:["rust","cpp","ai","devops"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:7,slug:"vendoring-llamacpp-in-rust-workspace"},{title:"model_metadata.json: A Declarative Schema for ML Model Execution",description:"How a single JSON file replaces custom inference scripts and makes any ML model self-describing. No more 'works on my machine.'",date:"2026-07-10",author:"Glenn Sonna",tags:["machinelearning","architecture","opensource","ai"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:6,slug:"model-metadata-json-declarative-schema"},{title:"Streaming LLM Tokens from Rust to Flutter in Real-Time",description:"How we bridge real-time token streaming from a Rust inference engine to Flutter's reactive UI using flutter_rust_bridge callbacks.",date:"2026-07-07",author:"Glenn Sonna",tags:["flutter","rust","ai","tutorial"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:6,slug:"streaming-llm-tokens-rust-to-flutter"},{title:"How We Made ONNX Runtime 6.8x Faster on Apple Silicon with CoreML",description:"Real benchmarks showing when Apple's Neural Engine helps (and when it hurts). Lessons from optimizing ML inference across execution providers.",date:"2026-07-03",author:"Glenn Sonna",tags:["onnx-runtime","coreml","apple-silicon-ml","neural-engine","on-device-ai"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:6,slug:"onnx-runtime-6x-faster-apple-silicon-coreml"},{title:"Whisper Speech Recognition as a Single Rust Binary",description:"Build a Whisper-powered transcription tool as a single Rust binary. Candle for pure-Rust inference. No runtime dependencies, works airgapped.",date:"2026-06-30",author:"Glenn Sonna",tags:["whisper-rust","offline-ai","speech-recognition","local-ai","private-ai"],category:"tutorial",image:"",imageAlt:"",draft:false,featured:false,readingTime:5,slug:"whisper-speech-recognition-single-rust-binary"},{title:"Why We Chose Rust Over Python for ML Inference",description:"Not training â inference. How Rust's zero-cost abstractions, lack of GIL, and FFI story make it the better choice for shipping ML to production devices.",date:"2026-06-26",author:"Glenn Sonna",tags:["rust-ml","rust-vs-python","ml-inference","edge-ai","on-device-ai"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:7,slug:"why-rust-over-python-for-ml-inference"},{title:"On-Device AI for Mobile Apps: A Developer's Guide to iOS and Android",description:"How to add on-device AI to iOS and Android apps â comparing CoreML, ONNX Runtime, TensorFlow Lite, and llama.cpp. Practical guide with model sizes, performance benchmarks, and integration patterns.",date:"2026-06-23",author:"Glenn Sonna",tags:["on-device-ai","mobile-ai","ai-on-iphone","ai-on-android","coreml","mobile-ml"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:12,slug:"on-device-ai-mobile-ios-android"},{title:"Edge AI: Why Edge-First Should Be Your Default Architecture",description:"On-device AI should be the starting position, not the optimization. The industry defaults to cloud out of habit, not necessity.",date:"2026-06-19",author:"Glenn Sonna",tags:["edge-ai","on-device-ai","edge-first","private-ai","ai-architecture"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:7,slug:"edge-first-should-be-your-default"},{title:"Private AI: How to Run AI Models Without Sending Data to the Cloud",description:"How to run AI models privately on-device â no cloud APIs, no data leaving the device. Covers GDPR, HIPAA, and SOC 2 compliance, private LLMs, and practical implementation patterns.",date:"2026-06-16",author:"Glenn Sonna",tags:["private-ai","private-llm","on-device-ai","ai-privacy","gdpr-ai","hipaa-ai"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:10,slug:"private-ai-run-models-without-cloud"},{title:"Building a Cross-Platform ML Inference SDK in Rust",description:"How we built a single Rust core that powers ML inference across CLI, Flutter, Swift, Kotlin, and Unity â and the architectural decisions that made it possible.",date:"2026-06-12",author:"Glenn Sonna",tags:["rust","ai","architecture","opensource"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:7,slug:"building-cross-platform-ml-inference-sdk-in-rust"},{title:"How to Run LLMs Locally: A Complete Guide (2026)",description:"How to run large language models locally on your laptop, desktop, or phone â llama.cpp, Ollama, ONNX Runtime, and on-device options compared. No cloud API needed.",date:"2026-06-09",author:"Glenn Sonna",tags:["local-llm","run-llm-locally","offline-ai","private-llm","on-device-ai","local-ai"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:12,slug:"run-llm-locally-complete-guide"},{title:"One Codebase, Five Platforms: Shipping ML to Flutter, Swift, Kotlin, Unity & CLI",description:"How UniFFI, flutter_rust_bridge, and C FFI let us write ML inference once in Rust and bind it to five platform SDKs. The cross-platform FFI playbook.",date:"2026-06-05",author:"Glenn Sonna",tags:["rust","flutter","kotlin","gamedev"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:8,slug:"one-codebase-five-platforms-ml-flutter-swift-kotlin-unity"},{title:"Run AI Models On-Device â Zero Config, Five Minutes",description:"CLI, Rust, Flutter, Swift, Kotlin, Unity â run 25+ ML models on-device with one command. No tensor shapes, no preprocessing scripts.",date:"2026-06-02",author:"Glenn Sonna",tags:["on-device-ai","run-ml-locally","rust-ml","edge-inference","open-source-ai"],category:"announcement",image:"",imageAlt:"",draft:false,featured:false,readingTime:3,slug:"run-ai-models-on-device-zero-config"},{title:"Add Text-to-Speech to Your Flutter App in 15 Minutes",description:"A step-by-step guide to adding high-quality, on-device TTS to a Flutter app using Xybrid and the Kokoro model. No cloud APIs, no API keys, no per-request costs.",date:"2026-04-06",author:"Glenn Sonna",tags:["flutter","tts","tutorial","on-device-ai"],category:"tutorial",image:"",imageAlt:"",draft:false,featured:false,readingTime:8,slug:"add-text-to-speech-to-flutter-app-in-15-minutes"},{title:"Edge AI vs Cloud AI: When to Run Models On-Device",description:"A practical decision framework for choosing between on-device and cloud-based AI inference, with cost analysis, c
75omparison tables, and real-world use cases.",date:"2026-03-20",author:"Glenn Sonna",tags:["edge-ai","cloud-ai","inference","architecture","cost-optimization"],category:"engineering",image:"",imageAlt:"",draft:false,featured:false,readingTime:10,slug:"edge-vs-cloud-inference"},{title:"Building a Voice Agent That Runs Entirely On-Device",description:"A step-by-step tutorial for building an on-device voice agent using Whisper, a local LLM, and Kokoro TTS â no cloud APIs, no internet required.",date:"2026-03-17",author:"Glenn Sonna",tags:["tutorial","voice-agent","tts","asr","on-device-ai","flutter"],category:"tutorial",image:"",imageAlt:"",draft:false,featured:false,readingTime:11,slug:"building-voice-agent-on-device"}],seo:{title:"Blog - Xybrid",description:"Technical articles about on-device AI, edge inference, and building ML-powered applications that run locally on mobile and desktop.",url:"https://www.xybrid.ai/blog"}},uses:{}}], 76 form: null, 77 error: null 78 }); 79 }); 80 }); 81 } 82 </script>
82 83 </div> 84 </body> 85</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.