A simple and lightweight Chrome extension that enables advanced voice input capabilities in any web application. Use your microphone to input text in any text field, textarea, or contenteditable element across the web.
Disclaimer: Audio is processed by Google Gemini API (subject to Google's privacy policy). Since this is self-hosted, you are in control and responsible for your data security.
- Fast transcriptions powered by Gemini 2.5 Flash Lite
- Universal compatibility - works with any text field, textarea, or contenteditable element
- Secure API key storage using Chrome's storage API (synced across devices)
- Smart element detection - automatically inserts transcription into focused fields
- Privacy-conscious - extension collects no data; audio processed by Google Gemini API (subject to Google's privacy policy)
- Manifest V3 - built with the latest Chrome extension standards
- Chrome browser (version 120+)
- Google AI Studio API key (free tier available)
- Node.js 16+ (for building from source)
-
Clone the repository:
git clone https://github.com/ndamulelonemakh/global-voice.git cd global-voice -
Install dependencies:
npm install
-
Build the extension:
npm run build
-
Load in Chrome:
- Open Chrome and navigate to
chrome://extensions - Enable "Developer mode" (toggle in top right)
- Click "Load unpacked"
- Select the
global-voicedirectory
- Open Chrome and navigate to
-
Configure API key:
- Click the Global Voice extension icon in your browser toolbar
- Paste your Google AI Studio API key
- Click "Save"
- Navigate to any website with a text input field
- Click on the text field where you want to insert transcribed text
- Click the Global Voice extension icon
- Click "Start Recording"
- Speak clearly into your microphone
- Click "Stop Recording" when done
- The transcribed text will be automatically inserted into the focused field
global-voice/
├── background.js # Service worker handling transcription
├── popup.js # Extension popup logic
├── popup.html # Extension popup UI
├── popup.css # Extension styles
├── offscreen.js # Offscreen document for mic access
├── mic-setup.js # Microphone permission handler
├── mic-setup.html # Permission prompt UI
├── manifest.json # Extension configuration
├── webpack.config.js # Build configuration
└── dist/ # Built files (generated)
npm run build # Build extension with webpack
npm run lint # Check code with Biome linter
npm run lint:fix # Auto-fix linting issues
npm run format # Format code with Biome- Chrome Extensions API - Manifest V3
- Google Generative AI SDK - Gemini 2.5 Flash for transcription
- Webpack 5 - Module bundling
- Biome - Fast linting and formatting
- Extension privacy - this extension collects no personal data, analytics, or tracking information
- Audio processing - recordings are sent to Google Gemini API for transcription (subject to Google's privacy policy)
- User control - you provide your own API key and can modify the code to use alternative models or self-hosted solutions
- API key security - stored using
chrome.storage.syncAPI, accessible only by this extension - Minimal permissions - only requests necessary permissions (storage, activeTab, scripting, offscreen, tabs)
- Open source - full transparency; review and modify the code to meet your privacy requirements
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the ISC License - see the LICENSE file for details.
- Powered by Google Gemini AI
- Built with Chrome Extensions Manifest V3
If you encounter any issues or have questions:
- Open an issue on GitHub Issues
- Check existing issues for solutions
Made with ❤️ by Ndamulelo Nemakhavhani
