KeenASR SDK version 2.2
Author: Ognjen Todic | June 30, 2026We’re excited to announce that KeenASR SDK version 2.2 is now generally available! This release introduces a new class for text alignment, a React Native plugin in beta, and several enhancements across all supported platforms.
KeenASR React Native Plugin
We’re releasing a new React Native plugin in beta, providing on-device speech recognition on iOS and Android from a single TypeScript API. The plugin is a Turbo Module that wraps the native KeenASR SDK on each platform.
Highlights:
- Full recognition API, including decoding graphs, contextual decoding graphs, alternative pronunciations, GoP scoring, and Dashboard integration.
- Cross-platform
TextAligner, exposed with the samealign/incrementalAlignmethods as on other platforms. - New Architecture (TurboModules) is required, matching the current React Native default.
For details, see the React Native Introduction, Installation, and Quick Start pages.
TextAligner
Applications that compare what a user actually said against a known reference text, such as oral reading instruction and assessment apps, have historically needed to implement their own word-level alignment on top of the recognizer’s output. In 2.2, we’re introducing TextAligner, a cross-platform class that produces a rich word-level alignment between recognized and reference text.
TextAligner provides two complementary methods:
incrementalAlign(text)keeps state between calls and is intended for streaming partial results. Call it on every partial result to drive real-time UI updates (for example, highlighting words as they are read, or shortening the end-silence threshold as the reader approaches the end of the passage), and again on the final recognized text.align(text)is stateless and intended for one-shot scenarios where partials are not used, for example post-hoc analysis of stored responses or batch processing of recorded audio.
Each call returns an AlignmentResult with everything oral-reading and evaluation apps typically need:
- Edit-distance counts (matches, substitutions, insertions, deletions) and word-error-rate.
- A full alignment trace at token level.
- Oral-reading views such as
matchedRefIndices,skippedRefIndices,furthestMatchedIndex, andrepetitionRefIndices(when repetition detection is enabled).
For details, see Text Alignment and the applied example on the EdTech use case page.
Unified Text Normalization
Starting with this release, text normalization is consolidated between the DecodingGraph methods and TextAligner. The reference text you pass to both is tokenized and normalized using the same pipeline, so recognized text and reference text align meaningfully without ad-hoc preprocessing in your app. Pass the natural form of the passage; punctuation and casing are handled internally, and normalized tokens are consistently upper-cased across all ASR Bundles.
Decoding Graph Metadata in Responses
The response JSON now includes information about the decoding graph used for recognition (graph name, task type, and relevant input parameters). This is useful for analytics workflows and for comparing responses across different decoding graph configurations, especially when uploaded to Dashboard.
Attaching Custom Data to Responses (setCustomJson)
On iOS and Android, the Response class now supports attaching application-specific data to a response via setCustomJson(json). The provided JSON is merged into the response representation and travels with the response wherever it goes (saved to disk, uploaded to Dashboard). This is a natural place to add context such as user, lesson, prompt, session identifiers, or your app’s own scoring, making it easier to slice and analyze responses on Dashboard. See the Dashboard page for details.
Other Updates
- Uploader CPU fix. Fixed a cross-platform bug where the Dashboard uploader consumed excessive CPU while idle.
- Memory leak fixes. Fixed a couple of small memory leaks across platforms.
- pykeenasr.
pykeenasrnow works with Python 3.12.
You can browse the developer documentation, see the release notes, download a trial SDK, or try our web demos to get started.
