syncfusion-react-speech-to-text — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-react-speech-to-text (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The SpeechToText component enables users to convert spoken words into text using the Web Speech API. This skill helps you implement, customize, and troubleshoot speech recognition in React applications. The main component that captures audio from the user's microphone and converts speech to text in real-time using browser APIs.
📄 Read: references/getting-started.md
disabled property)📄 Read: references/speech-recognition-features.md
SpeechToTextState enum (Inactive, Listening, Stopped)listeningState from event args and component ref📄 Read: references/button-and-tooltip-customization.md
showTooltip property)TooltipPosition values)📄 Read: references/events-and-methods.md
cancel property to prevent listening startisInteracted to distinguish user vs programmatic triggerserrorMessage for human-readable error detailsisInterimResult for interim vs final transcript results📄 Read: references/globalization-and-localization.md
htmlAttributes for custom HTML/ARIA attributes on the button element📄 Read: references/troubleshooting-and-security.md
import { SpeechToTextComponent, TextAreaComponent, TranscriptChangedEventArgs } from '@syncfusion/ej2-react-inputs';
import { useState } from 'react';
import '@syncfusion/ej2-react-inputs/styles/material.css';
function VoiceNoteApp() {
const [transcript, setTranscript] = useState('');
const handleTranscriptChanged = (args: TranscriptChangedEventArgs) => {
setTranscript(args.transcript);
};
return (
<div style={{ padding: '20px' }}>
<h2>Voice Note Recorder</h2>
{/* SpeechToText component with microphone button */}
<SpeechToTextComponent
id="speechToText"
transcriptChanged={handleTranscriptChanged}
/>
{/* Display transcribed text */}
<TextAreaComponent
id="noteArea"
value={transcript}
resizeMode="None"
rows={5}
cols={50}
placeholder="Your voice will appear here..."
/>
</div>
);
}
export default VoiceNoteApp;import { SpeechToTextComponent, TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import { useState } from 'react';
function VoiceForm() {
const [formData, setFormData] = useState({
name: '',
message: ''
});
const handleNameTranscript = (args: any) => {
setFormData(prev => ({ ...prev, name: args.transcript }));
};
const handleMessageTranscript = (args: any) => {
setFormData(prev => ({ ...prev, message: args.transcript }));
};
return (
<div>
<label>Name (speak):</label>
<SpeechToTextComponent transcriptChanged={handleNameTranscript} />
<TextBoxComponent value={formData.name} />
<label>Message (speak):</label>
<SpeechToTextComponent transcriptChanged={handleMessageTranscript} />
<TextBoxComponent value={formData.message} />
</div>
);
}import { SpeechToTextComponent } from '@syncfusion/ej2-react-inputs';
import { useRef } from 'react';
function VoiceControlApp() {
const speechRef = useRef<SpeechToTextComponent>(null);
const startVoiceInput = () => {
speechRef.current?.startListening();
};
const stopVoiceInput = () => {
speechRef.current?.stopListening();
};
return (
<div>
<SpeechToTextComponent ref={speechRef} />
<button onClick={startVoiceInput}>Start Recording</button>
<button onClick={stopVoiceInput}>Stop Recording</button>
</div>
);
}import { SpeechToTextComponent, ErrorEventArgs } from '@syncfusion/ej2-react-inputs';
import { useState } from 'react';
function VoiceWithErrorHandling() {
const [error, setError] = useState('');
const [isListening, setIsListening] = useState(false);
const handleError = (args: ErrorEventArgs) => {
// args.errorMessage is the human-readable description; args.error is the error code
setError(args.errorMessage || `Error: ${args.error}`);
};
const handleStart = () => {
setIsListening(true);
setError('');
};
const handleStop = () => {
setIsListening(false);
};
return (
<div>
<SpeechToTextComponent
onError={handleError}
onStart={handleStart}
onStop={handleStop}
/>
{isListening && <p>🎤 Listening...</p>}
{error && <p style={{ color: 'red' }}>{error}</p>}
</div>
);
}| Prop | Type | Description |
|---|---|---|
lang | string | Language for speech recognition (e.g., 'en-US', 'fr-FR') |
transcript | string | Current transcribed text |
allowInterimResults | boolean | Show real-time results (default: true) |
listeningState | SpeechToTextState | Current listening state (Inactive, Listening, Stopped) |
buttonSettings | ButtonSettingsModel | Customize button appearance and content |
tooltipSettings | TooltipSettingsModel | Configure tooltip display |
showTooltip | boolean | Whether to display the tooltip on hover (default: true) |
cssClass | string | Apply CSS classes for styling |
disabled | boolean | Disable all component interaction (default: false) |
htmlAttributes | { [key: string]: string } | Additional HTML attributes (ARIA, data-*, etc.) for the root button element |
locale | string | Localization language code |
enableRtl | boolean | Enable right-to-left layout |
enablePersistence | boolean | Persist component state between page reloads via localStorage |
| Event | Args | Description |
|---|---|---|
created | - | Fired when component is initialized |
onStart | StartListeningEventArgs | Fired when speech recognition begins. Args: cancel, event, isInteracted, listeningState, name |
onStop | StopListeningEventArgs | Fired when speech recognition ends. Args: event, isInteracted, listeningState, name |
onError | ErrorEventArgs | Fired when an error occurs. Args: error, errorMessage, event, name |
transcriptChanged | TranscriptChangedEventArgs | Fired when transcription updates. Args: transcript, isInterimResult, event, name |
| Method | Description |
|---|---|
startListening() | Begin speech recognition programmatically |
stopListening() | Stop speech recognition programmatically |
destroy() | Destroy the component instance and release all resources |
Solution: Check browser permissions settings and allow microphone access in security settings
Solution: Check microphone volume, speak clearly, verify correct language setting
Solution: Ensure CSS imports are included and license key is registered
Solution: Check if browser supports Web Speech API (Chrome, Edge, Safari support it)
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.