v0.15.0 Highlights
Meet Iru! The built-in character has a new name, and Iru now reacts when you touch the avatar. This release also gives the desktop app new title bars, adds a phone-friendly Live2D editor, and makes MAGIC motion feel a lot more alive.
Product updates
Meet Iru
- The built-in character is now Iru. AIRI is still the name of the app. Only the character changed. If you already use the built-in character, AIRI renames it for you, and any name or description that you edited stays as it is.
- Live2D characters react when you touch them. A tap on the head makes the character nod and squint, a stroke across the head tilts it, and a tap on the body makes the character flinch. The character also hears about the touch and can answer in character, for example after a few head pats. To keep this from turning into a flood of replies, the character answers a touch on the head or the body at most once every 20 seconds, and does not interrupt a reply that is already playing.
Motion
- MAGIC motion now follows your cursor. Before, the "Enable mouse tracking" switch was turned off for the MAGIC driver. Now the head and eyes turn toward the cursor, and the generated motion keeps playing underneath.
- MAGIC moves differently while the character speaks. You can pick one profile for idle and another one for speaking. The motion blends smoothly between them when the voice starts and stops, instead of a hard cut. An idle profile, a speaking profile, and a "Follow speech" switch replace the single "MAGIC profile" setting.
- Previously, turning off mouse tracking and idle eye movement could leave the model looking to one side. It now returns to the center. The model preview on the web settings page also moves with MAGIC again.
Desktop app
- New title bars. The settings, chat, devtools, onboarding, about, editor, and notice windows now draw their own title bar to match the rest of the app. On Windows and Linux, the app draws the minimize, maximize, and close buttons. On macOS, you keep the usual traffic lights. On Windows 11, the Snap Layouts menu no longer appears when you hover over the maximize button.
- A cleaner floating chat dock. The floating chat and the fullscreen island now share one dock design, and every icon shows a label when you hover over it.
- On macOS, the floating chat panel now uses the same see-through look as the chat window.
- The hearing capsule no longer sits at the bottom of the stage window and covers the character while the microphone is on.
Mobile
- A new Live2D editor for phones. On a phone, Settings → Models now keeps the model on screen while you edit it. A tab bar at the bottom switches between Model, Placement, Motion, Look, and Display. You can drag the model to move it, and a dot on a tool tells you that it no longer uses the default value.
- Foldable phones are supported. Before, folding or unfolding the screen could wipe your chat draft and push content under the system bars. The layout now follows the screen as it changes.
- Long chat messages no longer stretch to the full width of the screen on stage-web and the mobile app.
Chat and voice
- You can rename conversations. Rename a conversation from the conversation list. If you are signed in, the new name is synced. If the sync fails, AIRI tries again later.
- Signing in is now the quickest way to start chatting. When no chat provider is set up, the notice above the composer now offers Sign in first, because signing in sets up a ready-to-use provider for you. You can still open provider settings to use your own.
- Character cards can limit how much history they send. In the card settings, you can set a maximum number of history messages to send to the model. When a chat goes over the limit, AIRI leaves out the oldest messages. Your saved chat history does not change. Existing cards keep sending the full history.
- Voice output reads links properly. Before, a web address such as
https://example.comwas spoken as three choppy pieces, with pauses between them. Obsidian links such as[[Note|Alias]]were read as raw symbols or skipped. AIRI now reads them as normal words. - The voice no longer pauses in the middle of a Chinese list. Before, a long sentence could be split at
、, so the voice stopped between list items. - On stage-web desktop, a voice call now shows only as the capsule at the top of the page. The large call panel that pushed your chat history out of view is gone. The mute button now takes the place of the microphone button in the composer during a call.
- The stage-web chat composer now has rounded corners and lines up with the chat history above it.
- Hearing is no longer in the account menu on stage-web. You can still find it in Settings and in the voice menu of the chat composer.
Bug fixes
- Home Assistant works with self-signed and private certificates on desktop. Before, if your Home Assistant used a certificate from a private certificate authority that your operating system trusts, every request failed with only
fetch failed. The desktop app now trusts the certificates that your system trusts. When a request still fails, the error now tells you the real reason. - Some Live2D models no longer show black patches. Models that rely on screen or multiply colors, for example on the nose or cheeks, now render correctly.
- The floating chat works on Wayland again. On Linux with native Wayland, for example KDE Plasma, you could not click or type in the floating chat or the voice window. Both now take clicks and keyboard input.
- VRM models close their mouth when they stop talking. Before, a VRM model could keep the last mouth shape after speech ended.
- Resetting provider settings no longer leaves hearing, vision, and speech broken. These modules, and every character card, now forget providers that no longer exist. You can pick a new one without getting errors from a missing setup.
- In a narrow chat window, a long microphone name pushed the voice menu off screen and hid its switches. The menu now fits inside the window and shortens the name.
- In the floating chat, a click on the welcome card of an empty conversation went through to the app behind it. The card now takes the click.
- When the message feed was attached to the character, the standing chat dock opened when you only moved toward a message, so the message actions button slid away from your cursor. The dock now opens only from its bar.
- The hearing drawer on desktop no longer scrolls past its last control into an empty dark panel.
- If you cancel sign-in during onboarding, you now return to the onboarding dialog and can continue local setup. Before, the dialog stayed hidden until the next start.
- We updated a certificate library in the desktop app to fix eleven published security advisories.
To developers
- Voice plugins can now listen to what AIRI says. A voice plugin gets
onOutputand anoutputaudio side, next toinput, so it can observe the speech that AIRI plays like it observes the microphone. Lip sync for Live2D, VRM, and MMD and the spectrum analyser now use this path. If you wrote a voice plugin, renameonSpeechInputtoonInputandobserveAudiotoinput.observe. - The IO tracer now shows each tool call as its own span on the tools track. Failed tool calls, for example a failed Home Assistant request, now appear in the trace, and the time to first token of a model request no longer includes the tool time.
- The IO tracer now draws the voice activity probability as a curve over the voice input waveform, with a dashed line at the speech threshold.
- Onboarding now records a version and an outcome for each step, so a later release can show a new step to users who already finished onboarding.
To contributors
no-explicit-anyis now a lint error in TypeScript and Vue source. Existing cases are recorded as bulk suppressions, and we already removed some of them. Runpnpm run lint:prune-suppressionsafter you remove more.- CI is faster, with the same checks.
- The slowest test suites are faster. No test case or assertion was removed.
pnpm installno longer downloads MediaPipe model files. The MediaPipe devtools page now loads them when it runs, so a failed download no longer breaks the install.- The contributor guide now tells you to run unit tests with Node web storage off, like CI. Without it, Node.js 26 can give
localStoragefailures that CI does not show. - Display model cloud sync now recovers after a failed step, like character card sync. It is still behind the
display-model-syncflag. - The Nix desktop build no longer needs its asset patching workaround, and its build output is smaller.
- The workspace overrides no longer rewrite the version ranges of direct dependencies. This fixes the api image build, which failed with
ERR_PNPM_UNUSED_PATCH. - Dev and nightly desktop builds now include analytics, so the analytics setting works on them.
- A new
enforce-rules-for-render-loopsagent skill explains which clock each renderer uses for motion in a frame. - Tests no longer leak store work into the next test, and a flaky reply preview test now waits for its transition.