TypeNo: a macOS voice input app that transcribes locally through a separate speech engine
A free, open source, privacy-first voice input app for macOS.
At a glance
- What is it?
- TypeNo is a GPL-3.0 macOS menu bar app that records your voice, transcribes it on the machine using the coli speech engine and pastes the text into whatever app you were using, with no windows, settings or accounts. It suits people who type all day and want dictation without sending audio to a cloud service, and the project is in low-key maintenance mode.
- Who is it for?
- TypeNo fits a macOS user who wants dictation that never leaves the machine and who is willing to install a Node.js speech engine alongside the app, since the recording, local transcription and paste loop is short, free and free of accounts.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 56 days ago.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Two keystrokes, one local transcription, no settings
TypeNo is a free, open source, privacy-first voice input tool for macOS, and the whole interaction is four steps. Short-press Control to start recording. Short-press Control again to stop. The text is transcribed and pasted into whatever app you were using, and also copied to the clipboard. While recording, an overlay shows segmented preview text roughly once per second, and after you stop, TypeNo still runs a final full-file transcription before pasting.
That last detail matters more than it first appears. A segmented preview is cheaper to produce than a complete transcription, and if the app pasted the preview you would get truncated or wrong text. Running a final full pass on the recorded file is what makes the pasted result the real transcript rather than an approximation.
The design philosophy section states the constraint plainly: TypeNo does one thing, voice to text to paste, with no extra UI, no preferences and no configuration. The stated reasoning is that the fastest way to type is to not type at all. Everything else in the README, from the menu bar to the absence of a settings window, follows from that.
The trigger is a short press of Control, under 300 milliseconds, with no other keys, and the same action is available from the menu bar as Record. The distinction between a short press and a long one is the only gesture the app asks you to learn, and the README's usage table is otherwise a list of menu bar items: choosing a microphone, automatic or a specific device, checking for updates, and quitting with the keyboard shortcut.
One more capability is in the table. You can drag an .m4a, .mp3, .wav or .aac file to the menu bar icon to transcribe a file, which turns the app into a general transcription tool for existing audio as well as a dictation utility.
The topics attached to the repository name the intended audience: accessibility, dictation, local-first, menu-bar-app, privacy, speech-to-text and voice-input.
The app is a thin shell over the coli speech engine
The mechanism is worth understanding, because it explains the installation steps and the failure modes.
TypeNo captures your voice, transcribes it locally, and pastes the result into the app you were using. The transcription itself is done by a separate project, the coli library from marswave ai, which the README credits as powering local speech recognition. The engine is not vendored into the app. It is installed on the machine as a command line tool, and the app calls it.
The README also describes the real-time behaviour: while recording, the overlay shows segmented preview text about once per second, and after you stop, TypeNo still runs a final full-file transcription. So there are two paths in play, an incremental one for feedback while you speak and a complete one over the finished recording. The presence of both suggests the incremental path is not simply a preview of the final result but a separate, cheaper recognition pass whose output is discarded.
The privacy claim follows from the architecture. Because transcription is performed by a locally installed engine rather than by a hosted API, the audio never has to leave the machine. That is the difference between this and the built-in macOS dictation, which sends audio to a server, and it is the reason the project is described as privacy-first rather than merely local.
The alternative reading of the design is worth stating too. The heavy part of the work, speech recognition, is somebody else's project with its own release cadence, its own runtime requirements and its own model downloads. TypeNo contributes the capture, the gesture, the overlay and the paste. That is a sensible division of labour for a small app, and it is also a dependency you do not control.
The repository layout backs this up. The tree holds an App/ directory, Sources/, a Package.swift, scripts/, assets/, docs/ and a log.md, so the app itself is a Swift package with build scripts, and the speech engine lives entirely outside this repository.
Installing the app, then the engine, then the model
There are two installation routes, and the second one has a dependency of its own.
The download route is the short one. Take the latest TypeNo.app.zip from the releases page, unzip it, move TypeNo.app to /Applications and open it. The README notes that TypeNo is signed and notarized by Apple, so it should open without warnings.
The speech engine is a separate step. TypeNo uses coli for local speech recognition, and the prerequisites are Node.js, with LTS recommended and a note to install directly from nodejs.org for best compatibility, and ffmpeg for audio conversion, installed with brew install ffmpeg. The engine itself is then installed globally:
npm install -g @marswave/coliThe README is explicit that this installs the coli CLI but does not pre-download the speech model. The model comes later, on the first actual transcription, and is downloaded into ~/.coli/models/. If coli is missing, the app shows an in-app setup prompt with the install command, so the failure mode is a prompt rather than a silent breakage.
One version note is included. On Node 24 and later, a sherpa-onnx-node error means you should build from source:
npm install -g @marswave/coli --build-from-sourceThe first launch needs two permissions, Microphone to capture your voice and Accessibility to paste text into other apps, and the app walks you through granting both.
If you prefer to build it yourself, the README gives three commands:
git clone https://github.com/marswaveai/TypeNo.git
cd TypeNo
scripts/generate_icon.sh
scripts/build_app.shThe result is at dist/TypeNo.app, and the README advises moving it to /Applications/ for persistent permissions, which is a real detail since macOS ties the accessibility grant to the application's location.
Two documented failure modes: the model download and the accessibility grant
The troubleshooting section is short and both items are worth reading before you install, because both are awkward the first time they happen.
The first is the model download. The speech model comes from GitHub, and if GitHub is not reachable from your network, the first transcription fails while coli is downloading. The documented fix is to enable TUN mode, also called Enhanced Mode, in your proxy tool so that all system-level traffic is routed correctly, and then trigger another transcription so the download can be retried. There is a second part: if ~/.coli/models/ contains a partial .tar.bz2 archive from a failed download, the leftover files in that directory should be deleted before retrying.
rm -rf ~/.coli/modelsThat command deletes the model cache, which means the next transcription downloads the model again. It is a blunt instrument, and it is the documented remedy for a corrupt partial archive rather than something to run routinely.
The second failure is the accessibility permission, and the cause is not the app. Some users find that enabling TypeNo in System Settings, Privacy & Security, Accessibility has no effect, and the README calls this a known macOS bug. The fix is to remove the entry and add it again: select TypeNo in the list, click the minus button to remove it, then click the plus button and re-add TypeNo from /Applications. The README includes an animated image of the procedure.
Both of these are the cost of an app that depends on a separately installed engine and on macOS's own permission model. Neither is a design flaw, and both are fixable, but the first one requires a proxy tool configured in a particular way, which is a real barrier for anyone on a network where GitHub is blocked.
The uninstall procedure is symmetrical and worth knowing about: quit TypeNo from the menu bar, drag TypeNo.app to Trash from /Applications, then remove the engine and its cached models with rm -rf ~/.coli/ and npm uninstall -g @marswave/coli.
A GPL app in maintenance mode, with a Node dependency
The maintenance status is stated by the project itself, and it is unusual enough to quote rather than paraphrase. The README carries a note saying TypeNo is in low-key maintenance mode, that it remains fully functional and supported, that bug reports are welcome and that macOS major releases will be verified, but that active feature development is paused.
That is a clear signal about what to expect. You will not get new features. You will get bug fixes, and you will get verification against macOS major releases. If you need a feature that does not exist, you are looking at writing it yourself, and the GPL-3.0 licence permits that.
The dates support the note. The last push was on 2026-08-28, and the most recent release is v1.4.1 on the same day, with v1.4.0 from 2026-05-25 and v1.3.1 from 2026-03-27 before it. So the project is still being touched, but the interval between releases has been growing from roughly two months to roughly three, and the maintenance note explains the direction.
The licence is the GNU General Public License v3.0, with the LICENSE file at the root of the tree. For an application you install and use on your own machine, the practical effect is minimal, and the code is available to read, modify and redistribute under the GPL's terms. This review does not interpret what the licence requires in a particular distribution situation.
One dependency note belongs here too. Because the speech engine arrives through npm as @marswave/coli, a Node.js runtime is part of the footprint of a Swift application, and if your organisation's machines are managed and locked down, installing a global npm package and a brew formula is a request to your IT team rather than a local decision. The README's own note to install Node.js directly from nodejs.org for best compatibility suggests the author has seen that cause friction.
The app itself is also, as the topics say, a menu bar app, so it runs constantly while you work, with a global keyboard shortcut watching for the Control press. That is a small but real privilege to grant.
Editorial conclusion
TypeNo fits a macOS user who wants dictation that never leaves the machine and who is willing to install a Node.js speech engine alongside the app, since the recording, local transcription and paste loop is short, free and free of accounts. It is the wrong choice for Windows or Linux users, since the app is macOS only, and it is the wrong choice if you need a maintained feature pipeline, because the README states the project is in low-key maintenance mode with active feature development paused. Before you install, run the npm install -g @marswave/coli step and confirm the speech model downloads into ~/.coli/models/, and check the macOS major release compatibility yourself, since the README only says major releases will be verified.
Frequently asked questions
How do I install the TypeNo speech engine and its model?
Install Node.js and ffmpeg, then run `npm install -g @marswave/coli`, which installs the CLI but not the model. The model is downloaded into ~/.coli/models/ on the first actual transcription, and if the download fails you can clear the directory with `rm -rf ~/.coli/models` and retry.
Does TypeNo send my voice to a server?
No. The README says TypeNo captures your voice, transcribes it locally, and pastes the result into whatever app you were using, with the local speech recognition powered by the coli project. The first transcription is the only step that reaches the network, and only to download the model.
Is TypeNo still being developed?
The README's maintenance note says TypeNo is in low-key maintenance mode: it remains fully functional and supported, bug reports are welcome and macOS major releases will be verified, but active feature development is paused. The last push was on 2026-08-28, with release v1.4.1 the same day.
How do I fix the Accessibility permission not working on macOS?
The README calls this a known macOS bug. The fix is to select TypeNo in System Settings, Privacy and Security, Accessibility, click the minus button to remove it, then click the plus button and re-add TypeNo from /Applications.
What licence is TypeNo released under?
The README states the GNU General Public License v3.0, and the repository root holds a LICENSE file. The app is also available to build from source with scripts/generate_icon.sh and scripts/build_app.sh.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/marswaveai-typeno)Was this useful?