Back to the catalogue

Web Speech-to-Text

Free speech-to-text plugin for Astra. Uses Google Web Speech API with no API key required. Supports 38 languages. Install and speak.

Install in Astra

In Astra, open Plugins and search for:

web-stt

Don’t have Astra yet? Get Astra

Details

Updated
2026-09-07
License
MIT
Status
Grandfathered until 2026-12-15 06:00 UTC

Being listed means these bytes were published by the repository shown and passed the registry’s automated checks. It is not a sandbox, not a security review, and not an endorsement.

About

Web Speech-to-Text — Free STT plugin for Astra

Speech recognition via Google Web Speech API — free, no API key required, no registration, no setup. Install the plugin, pick it as your STT engine in Astra and talk.

Image not shown — raw.githubusercontent.com

What it does and why you need it

Astra can turn your voice into typed text, but out of the box it ships without a speech-to-text engine. This plugin provides one — a small process that takes the microphone audio Astra captures and turns it into a transcript.

It uses the same free Web Speech API endpoint that Google Chrome and the Python SpeechRecognition library call, with the client=chromium handshake and a built-in public key. Speech in, text out — nothing more.

Real-world use cases:

  • Dictate messages by voice instead of typing.
  • Feed transcribed voice into your AI so it reads what was said.
  • Hands-free control while your hands are busy.

How a phrase turns into text

  1. Astra captures microphone audio and runs its own VAD (voice-activity detection) — it listens for speech and decides where one phrase ends.
  2. The finished phrase is streamed to the plugin as raw PCM audio, chunk by chunk.
  3. The plugin watches the stream live and spots silence itself.
  4. When the phrase is done (Astra's silence or the plugin's own, whichever comes first), the audio is converted from f32 to 16-bit little-endian PCM and posted to Google's speech endpoint.
  5. The JSON answer is parsed and returned to Astra as a final SttEvent.

Astra normally "waits for silence" by itself before handing a phrase to the plugin. If that pause feels too long or too short for you, set Silence to end phrase below — the plugin then finishes the phrase on its own after that much quiet, without waiting for Astra's VAD.

What it requires and why

WhatWhy this plugin asks
Outbound network access to Google's speech servers (www.google.com:80)The recognition request is sent from the plugin's own process to Google directly. Astra never sees the audio, the transcript or the network traffic.

One [permissions] grant is declared — the one thing this plugin may grow into:

PermissionWhy it is asked
clientLets the plugin act as a client front-end, so a future release can send the recognized speech straight into an Astra chat conversation (dictation). Declared up front because a listing cannot add a high-risk permission without going back through review. Today's code calls none of the permission-gated host RPCs — pure STT needs nothing from the daemon beyond the stt capability — and the daemon grants the session only if the user consents on the permission screen.

Configuration

The plugin works out of the box — Russian by default. Every setting is a convenience, not a requirement.

SettingRequiredDefaultMeaning
LanguageNoru-RURecognition language, from a dropdown of 38 supported locales (Russian, English US/UK, Ukrainian, German, French, Spanish, Italian, Portuguese BR, Japanese, Korean, Chinese Simplified/Traditional, Arabic, Hindi, Turkish, Polish, Dutch, Swedish, Norwegian, Finnish, Danish, Greek, Hebrew, Romanian, Hungarian, Czech, Bulgarian, Croatian, Slovenian, Serbian, Slovak, Lithuanian, Latvian, Estonian, Indonesian, Thai, Vietnamese). The plugin's own settings are localized: they follow Astra's UI language in English, Russian or Ukrainian.
Google API keyNobuilt-in free keyYour own key for www.google.com/speech-api. Leave empty to use the shared free key. Useful if the built-in one is throttled.
Max phrase length (seconds)No55Audio longer than this is cut before sending. Google rejects requests over ~60 s, so the default keeps you under the limit. 0 = no limit.
Network timeout (seconds)No10How long to wait for Google to answer before the request fails. 0 = default 10 s.
Silence to end phrase (ms)No0End the phrase and send it after this much quiet, without waiting for Astra's own silence detection. 0 = use Astra's setting (recommended first).

The language picked in Astra's own STT picker overrides this plugin's Language setting for that call.

Set up in Astra

  1. Install the plugin (see Installation below).
  2. Press Ctrl+P to open Astra's settings, or go to Settings.
  3. Open the Voice tab.
  4. Go down to the STT (Speech-to-Text) section.
  5. Change the STT engine from the default to Web Speech-to-Text.
  6. Optionally, open the plugin's config (the settings gear next to it) and set Language / API key / limits.
  7. Done — the next time voice is used, Web STT transcribes it.

If your plugin does not appear in the STT list, you likely forgot a licence: Settings → Privacy → Enable "Allow unsigned plugins".

Installation

  1. In Astra: Settings → Privacy → enable "Allow unsigned plugins"
  2. Plugins → Dev → paste the plugin folder path and click Load
  3. Pick it as your STT engine in Settings → Voice.

Limitations

  • One request at a time; a phrase is limited to ~60 s (configurable, see Max phrase length).
  • Requires an internet connection — every request goes to Google's servers, and the transcript leaves your machine.
  • The endpoint is the free, unofficial one. It is not a guaranteed SLA service; treat it as best-effort.
  • Google may throttle, require a personal key, or change the free endpoint at any time. That is the price of a free, keyless engine.

Build it yourself

cargo build --release
astra-plugin build

Files

  • src/main.rs — plugin lifecycle, config handling, f32→i16 PCM conversion, live streaming hook with the plugin's own silence endpointing, phrase-length cutting, Google request and JSON parsing.
  • locales/ — English, Russian and Ukrainian translations: store-card text (listing.*) and every settings label (config.*), resolved by Astra in the user's current UI language.
  • icon.svg / icon.png — store icons, drawn by hand.

Licensed MIT.

Releases

0.6.02026-09-07

Protocol 1

Permissions

  • client High riskThe author says: “Sends recognized speech into Astra chat as a message (dictation).”
Files and provenance
TargetSizeSHA-256
linux-x64web-stt-0.6.0-linux-x64.astraplugin3.6 MB4253a9e362d7f44d3d1bb2011880d37bd57f031a8183dae56f1b51c382d7668a
windows-x64web-stt-0.6.0-windows-x64.astraplugin3.1 MB2d49cc1881818e4e90c2f5f99e96d617e5789b2c6d45420be1db16a446082691

Provenance

Repository
LilKALINOV/Astra-Google-STT
Release repository
LilKALINOV/Astra-Google-STT
Tag
v0.6.0
Commit
779e2957f8e90f3046c742f22f92b6f02472e8ba
Older releases (1)

0.4.02026-09-05

Protocol 1

Files and provenance
TargetSizeSHA-256
linux-x64web-stt-0.4.0-linux-x64.astraplugin3.6 MB2d2e2db8f153a6427addcf544b295ebbdf247200d292901a62be0816a5c329cc
windows-x64web-stt-0.4.0-windows-x64.astraplugin3.1 MB9a48ae7fb32b1d0a2cd4c3749b8e0b2b588c64e79e61b71fdae110e067cd5693

Provenance

Repository
LilKALINOV/Astra-Google-STT
Release repository
LilKALINOV/Astra-Google-STT
Tag
v0.4.0
Commit
4f672cbf3d193805a00741a13a54de4c1d474e97
For the publisherThis listing has to be bound to a repositoryBind by 2026-12-15 06:00 UTC · cutover 2026-10-16 06:00 UTCHow

Migration notice, round 2.

The binding deadline is 2026-12-15 06:00 UTC.

Binding needs a Minice account that owns Astra, a binding line committed to the repository, a new tag, and a moderator’s approval of the first binding.

A release that is not held and passes the automated checks is published at once, marked not reviewed by moderators.

From 2026-10-16 06:00 UTC, a held release waits until this listing is bound.

Binding happens in the plugins panel; there is nowhere else to do it. Repository bindings