opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

A lightweight, cross-platform wake word engine that runs almost anywhere
GitHub RepoViews3

Project Description

View on GitHub

Wake Word Detection Without the Cloud: Porcupine Runs Almost Anywhere

You've probably had the thought: it would be nice if my app could listen for a wake word, but I don't want to ship audio to a server or wrestle with a heavy ML stack on a microcontroller. Porcupine, from Picovoice, is a wake word engine built for exactly that situation—always-listening keyword detection that stays on-device and runs across a surprisingly wide range of hardware.

What It Does

Porcupine is a wake word engine. You give it audio, it tells you when it hears the phrase you're looking for. Under the hood it uses deep neural networks trained in real-world environments, and it's designed to be compact and computationally efficient enough for IoT devices.

The cross-platform story is the headline. The README lists support for Arm Cortex-M, STM32, and Arduino; Raspberry Pi (Zero, 3, 4, and 5); Android and iOS; Chrome, Safari, Firefox, and Edge; and Linux, macOS, and Windows on x86_64 and arm64. It's also scalable in a specific sense—it can detect multiple always-listening voice commands with no added runtime footprint. And it's self-service: you can train custom wake word models yourself using Picovoice Console, rather than being stuck with a fixed vocabulary.

Why It's Cool

  • It goes where most voice tooling won't. The usual pattern for wake word detection is a cloud service or a beefy local model. Porcupine explicitly targets microcontrollers and single-board computers. If you've ever wanted a Raspberry Pi to respond to a phrase without a round trip to a server, this is the kind of tool that makes it practical.

  • Custom wake words without a gatekeeper. The self-service model training is the part that stands out. You're not limited to "Hey [brand name]"—you can define the phrase that fits your product and train a model for it through Picovoice Console.

  • Multiple commands, same footprint. The claim that detecting multiple voice commands adds no runtime footprint is a meaningful design choice. It means you don't have to budget more compute just because you want two or three trigger phrases.

  • Bindings for the languages you actually use. The README ships SDKs and demos across Python, .NET, Java, Flutter, React Native, Android, iOS, Web (both vanilla JS and React), NodeJS, C, and microcontrollers. That's not a token wrapper for one ecosystem—it's a real multi-platform effort, with packages published to PyPI, npm, NuGet, Maven Central, CocoaPods, and pub.dev.

  • It runs in the browser. The web support (Chrome, Safari, Firefox, Edge) is worth calling out on its own. On-device wake word detection in a browser tab, without a backend, opens up some interesting possibilities for web apps.

How to Try It

The fastest path depends on your stack, but Python is a reasonable starting point. The package is on PyPI as pvporcupine:

pip install pvporcupine

From there, the repository's demo directories are the place to look—there are demos for Python, .NET, Java, Flutter, React Native, Android, iOS, Web, NodeJS, C, and microcontrollers. Each one shows the basic integration pattern for that platform.

If you want a custom wake word, you'll train it through Picovoice Console, then plug the resulting model into whichever SDK you're using. For web projects, the vanilla JavaScript and HTML demo uses a CDN script tag, so you can try it without a build step at all.

Everything lives at github.com/picovoice/porcupine. Start with the demo that matches your platform and work backward from there.

Final Thoughts

Porcupine isn't trying to be a full voice assistant framework—it does one job, which is spotting a wake word, and it does that job across an unusually broad set of targets. If you're building an always-listening feature and you care about keeping audio on-device, or you're working with constrained hardware like a Pi or a microcontroller, this is worth a serious look. The combination of self-service custom models and real SDK coverage across mobile, web, desktop, and embedded is what makes it more than a novelty.

Back to Projects
Project ID: porcupineLast updated: October 27, 2026 at 02:49 AM